web-dev-qa-db-ja.com

Javaサーバーがtls 1.2のみを受け入れ、tls 1.0およびtls 1.1接続を拒否する方法

Java 7。

次のJavaパラメーターを追加したため、tls1.2が最優先になります。

-Dhttps.protocols=TLSv1.2

ただし、Javaクライアントからのtls1.0接続も受け入れます。クライアントも上記のJavaパラメーターで実行されている場合、接続はtls1.2ですが、クライアントがこのパラメーターなしで実行されている場合、接続はtls1.0です。

Jdk/jre/lib/securityフォルダーにあるJava.securityファイルをいくつか試しました。

現在、次の無効なアルゴリズムがあります:

jdk.certpath.disabledAlgorithms= MD2, MD4, MD5, SHA224, DSA, EC keySize < 256, RSA keySize < 2048, SHA1 keysize < 224
jdk.tls.disabledAlgorithms=DSA, DHE, EC keySize < 256, RSA keySize < 2048, SHA1 keysize < 224

私はJava 7、update 79を使用しています。各接続をインターセプトしてtlsバージョンを確認するつもりはありません。

私のサーバー証明書は、RSAアルゴリズムを使用したMD5で生成された2048ビットです。

無効なアルゴリズムリストのRSA keySize <2048の代わりにRSAがある場合、エラーメッセージでSSLHandShakeErrorが表示されます:共通の暗号スイートはありません。

私のテストプログラムは、次のURLからhttpサーバーを実行しています。 http://www.herongyang.com/JDK/HTTPS-HttpsEchoer-Better-HTTPS-Server.html

Java tls 1.2接続のみを許可する方法を確認してください。

18
PankajSays

これに対する解決策を見つけました。設定しました

jdk.tls.disabledAlgorithms= SSLv2Hello, SSLv3, TLSv1, TLSv1.1

サーバー上のファイルjre/lib/security/Java.security内。

これを設定すると、サーバーはTLS1.2接続のみを受け入れ、下位のセキュリティプロトコルバージョンを拒否します。

29
PankajSays

「/Java/jdk1.7.0_79/jre/lib/security」-Java.securityファイルでも同じ変更を行いましたが、一部のクライアントはまだSSLプロトコルでサービスを呼び出すことができます。

----変更jdk.tls.disabledAlgorithms = SSL、SSLv2、SSLv3、TLSv1、TLSv1.1、MD5、SSLv3、DSA、RSA keySize <2048

2
Abhimanyu Kumar

ちょっとした発言。

質問では、MD5で2048サイズの証明書を生成したと述べました。ただし、cert path algではMD5を無効にしているため、通常は機能しません。次に、MD5ハッシュで生成されたサーバー証明書は、Internet Explorer 10/Edgeなどの最新のブラウザーから禁止されています。

少なくともSHA256または<ハッシュを使用してサーバー証明書を生成することをお勧めします。

2
TyGp