sql >> データベース >  >> RDS >> Mysql

最新のJDKアップデート後にJavaがMySQL5.7に接続できないのはなぜですか?また、どのように修正する必要がありますか? (ssl.SSLHandshakeException:適切なプロトコルがありません)

    @skelwaがすでにコメントしているように、enabledTLSProtocols=TLSv1.2を追加する必要があります 問題を解決するための接続文字列の構成プロパティ。

    Connector /J の完全な接続文字列 次のようになります:

    jdbc:mysql://<host>:<port>/<dbname>?enabledTLSProtocols=TLSv1.2
    

    r2dbc の場合 tlsVersion=TLSv1.2を使用する必要があります 代わりに。

    残っている問題は次のとおりです。

    JDKとMySQLがTLSv1.2の使用に同意しないのはなぜですか ?

    どちらの当事者も実際にはTLSv1.2をサポートしていますが、発生した問題は、Connector/Jのデフォルトの動作によって発生します。互換性の理由から、Connector/JはデフォルトでTLSv1.2以降を有効にしません。したがって、明示的に有効にする必要があります。

    次の注<を参照してください。 / a> :

    警告: ソリューションに注意してください jdk.tls.disabledAlgorithmsの編集を提案する jre/lib/securityの内部 セキュリティリスクをもたらす アプリケーションに変更を加えたり、何かを変更したりすると、深刻な影響が生じる可能性があります。これらのプロトコルが無効になっているのには理由があり、リストからすべてまたは一部を削除するだけではいけません。

    注: 問題をデバッグするためにJDKからより低レベルの洞察を得たい場合は、次の構成をJavaコマンドに渡すことでsslデバッグログを有効にできます。

    -Djavax.net.debug=ssl,handshake または-Djavax.net.debug=all

    あなたの場合、次のようなものが表示されます:

    ...(HANDSHAKE_FAILURE): Couldn't kickstart handshaking (
    "throwable" : {
      javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)
        at java.base/sun.security.ssl.HandshakeContext.<init>(HandshakeContext.java:170)
        at java.base/sun.security.ssl.ClientHandshakeContext.<init>(ClientHandshakeContext.java:98)
        ...
    


    1. スレッドが失われた場合にテーブルのロックを解除する

    2. 整数列のデフォルト値を設定するSQLite

    3. SQL Server(T-SQL)のmsdbデータベースからデータベースメールメッセージを削除する

    4. SQL Server(T-SQL)でログインのデフォルト言語を取得する2つの方法