95629


Aurora PostgreSQLへJDBC接続した場合Java1.8では成功するもJava1.6ではSSLエラーが発生します。

これをなんとかJava6からも接続できるようにしたいのですがどのようにすればよいでしょうか。  
おそらくJava6 はTLS 1.0までの対応しかできない事に起因しているのではと予想はしているのですが、、、

私なりに２つアプローチ考えたのですが、具体的な対策方法が見つからず困っています。  
どなたか解決策をご存じの方いれば教えてください。当然以下アプローチ方法にこだわりません。

１．そもそもPostgreSQLサーバ側からSSL通信を求められないように（平文のまま接続）すれば  
解決できるのではないか

２．クライアント(JDBCで)側から何か設定すれば非SSLで接続できるのではないか  
と言うのも、psqlでの接続例ですが、通常接続すると SSL接続になりますが、export PGSSLMODE=disable  
の状態で接続すると非SSLで接続できるので、これと同様な事をJDBCでできないか。


CC BY-SA 4.0
2023-07-14T09:49:05.793
95615
2023-07-19T10:33:57.607
55896
question
aws postgresql jdbc
Java1.6からAurora PostgreSQLへJDBC接続するとSSLエラーが発生


まず初めにすべきことは、Java8やJava11やJava17といった現在サポートされているバージョンにアップデートできないか真剣に検討することです。Java6はサポートが終了しており、セキュリティ上の問題が出てもOracle社からパッチが提供されることはありません。[Azulが提供するJava6のサポート](https://www.azul.com/support-
for-java-7-and-
java-6/)のような契約を別途結んでいない限り、使用し続けることは大変危険であると認識してください。Java6を使い続けたことが原因でセキュリティインシデントが発生した場合、使い続けるという判断をしたことが
**重過失** とみなされる可能性があります。Java6を使い続けるかどうかはあなたが判断してください。

回答の手段を実施することで通信が **極めて脆弱になりことがあります**
。通信が盗聴された(インターネットを経由した通信の盗聴は比較的簡単です)場合、やり取りしたデータ全てが漏洩する恐れがあります。場合によっては改竄される可能性も高いです。通信の経路全てがプライベートサブネット内で完結する、VPNを使う等の対策を実施して、インターネット上をそのままデータが流れると言うことがないようにしてください。

下記の回答の内容を実施した事による損失や損害等に関して、私は一切の責任を負いません。全て自己責任で実施してください。責任が持てない場合は、絶対に実施しないでください。

* * *

考えられる対策としては三つあります。いずれの場合も、Aurora
PostgreSQLとJava6の環境を持っていないので、サイト等で調べただけであるため、動作確認はしていません。

### TLS1.2対応のSSLSocketFactory拡張クラスを使う

参考: <https://stackoverflow.com/questions/33364100/how-to-use-tls-1-2-in-
java-6>

[Bouncy
Castle](https://www.bouncycastle.org/)でTLS1.2対応のSSLSocketFactory拡張クラスが入ったjarが配付されています。この拡張されたファクトリークラスを使えば、Java6でもTLS1.2通信ができるようになるようです。導入方法は上記の本家SOでの回答を参考にしてください。

JDBCでのみSSLSocketFactoryを変更したい場合は、[`sslfactory`オプションで指定する](https://jdbc.postgresql.org/documentation/ssl/#custom-
sslsocketfactory)こともできます。接続のURIを次のようにしてみてください。

`jdbc:postgresql://server:5432/postgres?sslfactory=org.bouncycastle.jsse.provider.SSLSocketFactoryImpl`

この方法は通信自体はまだ安全と思われますが、サードパーティーのライブラリの信頼性が問題となります。

### PostgreSQL側でTLS1.0に対応する。

参考:
<https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/AuroraPostgreSQL.Reference.ParameterGroups.html>

Aurora
PostgreSQLインスタンスレベルのパラメーター`ssl_min_protocol_version`を`TLSv1`に設定することで、TLS1.0でも通信できるようになるようです。

TLS1.0は既に **安全では無い** とされています。通信の盗聴により情報漏洩が発生する恐れがあります。

### 平文で通信する。

参考: <https://jdbc.postgresql.org/documentation/ssl/#configuring-the-client>

`sslmode`を`disable`にすることで、SSL通信を無効化できるようです。URLは次のようにします。

`jdbc:postgresql://server:5432/postgres?sslmode=disable`

通信の盗聴により情報漏洩が発生します。 **インターネット上で通信を行う場合は、絶対に設定しないでください。**


CC BY-SA 4.0
2023-07-15T03:37:24.380
95629
2023-07-15T03:37:24.380
7347
95615
answer


raccyさんの提案で対応できました。

具体的な対応としては、結果的には以下のようにRDSパラメータグループの  
２つほどパラメータ値を変更する事で対応いたしました。

(1) ssl_min_protocol_version：TLSv1.2 → TLSv1  
Java1.6はTLSv1.0までは対応していたのでTLSのバージョンを落としました。

(2) password_encryption：scram-sha-256 → md5  
前提条件に記載する事漏れていたのですが今回のPostgreSQLのバージョンは14でした。  
バージョン14からパスワード暗号化アルゴリズムのデフォルトがscram-sha-256になっており  
こちらもJava1.6では対応できていなかったので、こちらもmd5へ落としました。

ありがとうございました。


CC BY-SA 4.0
2023-07-19T10:33:57.607
95694
2023-07-19T10:33:57.607
55896
95615
answer