如何强制java服务器只接受tls 1.2并拒绝tls 1.0和tls 1.1连接

Pan*_*ays 20 java security ssl https

我有一个在java 7上运行的https Web服务.我需要进行更改,以便此服务只接受tls1.2连接并拒绝ssl3,tls1.0和tls1.1.

我添加了以下java参数,以便tls1.2具有最高优先级.

-Dhttps.protocols=TLSv1.2
Run Code Online (Sandbox Code Playgroud)

但它也接受来自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
Run Code Online (Sandbox Code Playgroud)

我正在使用java 7,更新79.我不倾向于拦截每个连接并检查tls版本.

我的服务器证书是使用带有RSA算法的MD5生成的2048位.

如果禁用的算法列表使用RSA代替RSA keySize <2048,则会收到SSLHandShakeError,并显示错误消息:没有共同的密码套件.

我的测试程序从以下URL运行http服务器:http: //www.herongyang.com/JDK/HTTPS-HttpsEchoer-Better-HTTPS-Server.html

请帮助如何使java只接受tls 1.2连接.

Pan*_*ays 32

我找到了解决方案.我订了

jdk.tls.disabledAlgorithms= SSLv2Hello, SSLv3, TLSv1, TLSv1.1
Run Code Online (Sandbox Code Playgroud)

在服务器上的jre/lib/security/java.security文件中.

设置此项后,服务器仅接受TLS1.2连接并拒绝较低安全协议版本.

  • 这仅适用于Java 7更新75及更高版本. (9认同)