安全ではないため、接続が継続的に切断されました。このトピックは、広く文書化されていない Matlab と PostgreSQL 間の安全な接続に関するものです。たとえば、Matlab と PostgreSQL 間の安全な SSL 接続についてはこちらで説明しています。
で適切な変更を行います
- サーバーの証明書を生成します。diseserver.csr、root.crt; postgreSQL ディレクトリ (diseserver.key、diseserver.crt、および root.crt); 詳しくはこちらをご覧ください
- postgresql.conf
- pg_hba.conf
- クライアント証明書を生成する
- キーをpkcs8形式に変換します
- JDBC ドライバーの正しいバージョンを確認する
- クライアント証明書を確認する
dbtest.m
サーバーの証明書
$openssl req -out diseserver.csr -new -newkey rsa:2048 -nodes -keyout diseserver.key
postgresql.conf
ssl = on
ssl_cert_file = 'diseserver.crt' # (change requires restart)
ssl_key_file = 'diseserver.key' # (change requires restart)
ssl_ca_file = 'root.crt' # (change requires restart)
pg_hba.conf
hostnossl all all 0.0.0.0/0 reject
hostssl mytable all 0.0.0.0/0 cert map=ssl clientcert=1
クライアント証明書を生成する
$mkdir ~/.postgresql
$cd ~/.postgresql
$openssl req -out postgresql.csr -new -newkey rsa:2048 -nodes -keyout postgresql.key
キーをpkcs8形式に変換する
$openssl pkcs8 -topk8 -inform PEM -outform DER -in postgresql.key -out postgresql.pk8 -nocrypt
クライアント証明書を確認する
jdbc:postgresql://diseserver.mydomain.org/mytable?ssl=true&sslfactory=org.postgresql.ssl.jdbc4.LibPQFactory&sslmode=verify-full&
dbtest.m
matlab 関数
function dbtest
driver = 'org.postgresql.Driver';
[~,username] = system('whoami');
url = 'jdbc:postgresql://diseserver.mydomain.org/mytable?ssl=true&sslfactory=org.postgresql.ssl.jdbc4.LibPQFactory&sslmode=verify-full&';
myconn = database('mytable', username, '', driver, url);
if ~isempty(myconn.Message)
fprintf(2,'%s\n', myconn.Message);
else
fprintf(1, 'Connected!\n');
end
end