TLSv1.2 で Amazon RDS に接続できない

TLSv1.2 で Amazon RDS に接続できない

Ubuntu 20 で新しいマシンをセットアップしたところ、RDS データベースに接続できなくなっていました。

開発環境に接続するはずだった Spring Boot アプリケーションは、次の例外をスローします。
javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)

そこで、mySql ワークベンチを掘り出して試してみました。その結果、次のエラーが発生しました。
ssl_choose_client_version:unsupported protocol

調べてみると、Ubuntu 20ではTLSv1.2が最小TLSバージョンとして設定されており、MySQLサーバーがそれをサポートしていない場合にこのエラーが発生することがわかりました(ここから:https://askubuntu.com/questions/1193629/why-mysql-workbench-8-x-errors-out-with-an-ssl-connection-error-choose-client-v)。SSL をオフにしてワークベンチを試したところ、確かに接続を確立できました。

明らかな問題は、これはAmazon RDSだということです...TLS 1.2はできないここで指摘されているように、これは内部で使用されるバージョンであるため、無効にする必要があります。https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/SQLServer.Ciphers.html

つまり、実際には問題はないはずです。TLS バージョンが本当に問題なのかどうか疑問に思い始めていました。しかし、他に手がかりがなかったので、ここでの回答にあるクックブックに従って、ローカルの openssl を再構成し、最小 TLS バージョン 1 を許可してセキュリティ レベルをダウングレードしました。https://askubuntu.com/questions/1233186/ubuntu-20-04-sslセキュリティレベルを下げる方法

そして、ご存知のとおり、WorkbenchはSSLが必須に設定されて接続されています。Spring-Bootはまだそうではありません。メモを取得するには、どこか別の場所で設定する必要があると思います。しかし、それに時間を浪費するよりも、本物問題は、TLSv1.2 経由で接続できないことです。私の知る限り、実際には接続できるはずです。セキュリティをダウングレードするよりは、はるかに望ましいことです。データベース証明書が問題である可能性がある場合に備えて、データベース証明書を更新しようとしましたが、管理コンソールでは証明書に問題は見つからず、必要がない場合は証明書を置き換えることができないようです。そのため、次に何を試せばよいか、アイデアが浮かびません。

答え1

TLS のサポートは、RDS で使用しているデータベース エンジンのバージョンによって異なります。Aurora mySQL 5.6 はバージョン 1.23.1 までは TLSv1.0 のみをサポートしており、その時点で TLSv1.1 と 1.2 が利用可能になります。私たちのバージョンは 1.22 だったので、エンジンをアップグレードする必要がありました。

その時でさえただし、Ubuntu 20 では最小キー長が 2048 ビットに強制されるため、これは機能しません。これは Aurora mysql 5.6 では実現できず、変更できないようです。Diffie-Hellman キー長を変更するために使用できるデータベース パラメータのドキュメントは見つかりますが、それらは SqlServer 専用であり、MySQL には適用されません。したがって、次の承認済み回答で説明されているように、openssl.cnf に変更を適用する必要があります。https://askubuntu.com/questions/1233186/ubuntu-20-04-sslセキュリティレベルを下げる方法 これにより、SECLEVEL が 1 に変更され、openssl はより短い DHE キーを受け入れるようになります。

その時でさえ私のスプリングブートアプリケーションは接続できませんでしたが、ワークベンチは接続できるようになりました。これは、JDBCがサーバーにTLSv1.2を実行できることを伝えていないためです。それは確かに可能ですが(奇妙な決定です)、サーバーは、たとえ可能であっても、1.2 ハンドシェイクの送信を試みません。

JDBC に実際に TLSv1.2 を使用するように指示するには、接続文字列に TLSv1.2 を追加する必要があります。

jdbc:myslq://<host>/<db>?enabledTLSProtocols=TLSv1.2

今、すべてがつながります。

Ubuntu のセキュリティを低下させるのではなく、Aurora にもっと長いキーを配信させたかったのですが、どうやら方法はないようです。どなたかご存知の方がいらっしゃいましたら、教えてください。

関連情報