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接続のみを許可する方法を確認してください。
これに対する解決策を見つけました。設定しました
jdk.tls.disabledAlgorithms= SSLv2Hello, SSLv3, TLSv1, TLSv1.1
サーバー上のファイルjre/lib/security/Java.security内。
これを設定すると、サーバーはTLS1.2接続のみを受け入れ、下位のセキュリティプロトコルバージョンを拒否します。
「/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
ちょっとした発言。
質問では、MD5で2048サイズの証明書を生成したと述べました。ただし、cert path algではMD5を無効にしているため、通常は機能しません。次に、MD5ハッシュで生成されたサーバー証明書は、Internet Explorer 10/Edgeなどの最新のブラウザーから禁止されています。
少なくともSHA256または<ハッシュを使用してサーバー証明書を生成することをお勧めします。