アプリケーションの下位互換性を確保するために、CVE-2011-3389に対して脆弱なバージョンのMS SQL Serverが使用されている場合の JDBC over TLS の動作をテストしています (2005、またはサービス パックなしの 2008/2008R2 が適合します)。理論的には、次の 2 つのオプションを使用できます。
- またはなどのブロック暗号を使用して CBC 保護を無効にし
-Djsse.enableCBCProtection=false
、引き続き使用します。AES_128_CBC
3DES_EDE_CBC
- または、次のようなストリーム暗号にフォールバックします( CVE-2015-2808
RC4
により、これも安全でないことは認識しています)。
実際には、3DES_EDE_CBC
CBC 保護をオフにして接続を確立するのに問題はありませんが、 1.8.0_51 (たまたまCVE-2015-2808 に対処した) または( 1.6+ JDK を使用)よりRC4_128
も新しい JDKを使用することはできません。 )。AES_{128,256}_CBC
Java のバージョンごとに分類された結果は次のとおりです。
- 1.6.0_45 ( jTDS )
SSL_RSA_WITH_RC4_128_MD5
使用されている
- 1.7.0_76 ( jTDS ) および 1.8.0 から1.8.0_45 ( MS SQL JDBC ) まで:
SSL_RSA_WITH_RC4_128_MD5
(デフォルト) またはSSL_RSA_WITH_3DES_EDE_CBC_SHA
使用可能AES_128_CBC
が無効になっていても使用しません3DES
(3DES_EDE_CBC
とにかく強制されます)
- 1.8.0_45 (IBM J9 8.0 SR1) ( MS SQL JDBC )
SSL_RSA_WITH_3DES_EDE_CBC_SHA
が使用されます (CBC 保護がオフの場合にのみ成功します)。また、AES
またはRC4
が要求された場合
- 1.8.0_51+ (オラクル) ( MS SQL JDBC )
SSL_RSA_WITH_3DES_EDE_CBC_SHA
が使用されている (CBC 保護がオフの場合にのみ成功)、AES_128_CBC
orは使用しませんAES_256_CBC
(以前の Java バージョンと3DES
は異なり、強制されなくなりました。代わりに、互換性のある暗号スイートとしてリストされるIOException
afterを取得します)ClientHello
*_WITH_AES_128_CBC_SHA
- と
RC4
の両方が無効になっていても使用しません: ( jTDSとMS SQL JDBCの両方)。AES
3DES
"no negotiable cipher suite"
java.security
リクエストに使用するのは次のAES
とおりです。
jdk.certpath.disabledAlgorithms=MD2
jdk.tls.disabledAlgorithms=SSLv3, RC4, TLSv1.1, TLSv1.2, 3DES_EDE_CBC
jdk.tls.legacyAlgorithms= \
K_NULL, C_NULL, M_NULL, \
RC4_128, RC4_40
リクエストするバージョンは次のRC4
とおりです。
jdk.certpath.disabledAlgorithms=MD2
jdk.tls.disabledAlgorithms=SSLv3, AES_128_CBC, TLSv1.1, TLSv1.2, AES_256_CBC, AES_128_GCM, AES_256_GCM, 3DES_EDE_CBC
jdk.tls.legacyAlgorithms= \
K_NULL, C_NULL, M_NULL
質問:
- MS SQL Server 2014に接続するときに
AES_{128,256}_CBC
使用できるように、Java クライアントでサポートされているようです。MS SQL Server 2005でサポートされていないことを確認できますか? 事実上無効にすると につながるので、サポートされていると思いますが、CBC保護がオフになっているにもかかわらず、サーバー側で何かが起こります。TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
AES
"no negotiable cipher suite"
RC4
Java 1.8.0_51+で引き続き使用するにはどうすればよいですか? このソリューションは機能しなくなり、https.cipherSuites
システム プロパティにも影響しません (ここで説明します)。6u115と7u101には魔法のjdk.tls.enableRC4CipherSuites
システム プロパティがありますが、Java 1.8 では効果がないようです。- jTDSの何が問題なのですか? Java 1.6 および 1.7 (ドライバー バージョン 1.2.8 および 1.3.1) では正常に動作しますが、Java 1.8 を使用すると、 MS SQL JDBCが接続データの暗号化に使用する
"Connection reset by peer"
たびに常に受信します。3DES