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

时间:2015-09-08 20:08:44

标签: java security ssl https

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

我添加了以下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,更新79.我不倾向于拦截每个连接并检查tls版本。

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

如果禁用的算法列表具有RSA代替RSA keySize&lt; 2048,我收到SSLHandShakeError并显示错误消息:没有共同的密码套件。

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

请帮助如何让java只接受tls 1.2连接。

2 个答案:

答案 0 :(得分:2)

只是一个小小的评论;

在您提出的问题中,您使用MD5生成了2048大小的证书。但是在cert path alg中你禁用了MD5,所以这通常不起作用。其次,使用MD5哈希生成的服务器证书将被禁止使用现代浏览器,例如Internet Explorer 10 / Edge。

我建议您至少使用SHA256或&lt;生成服务器证书。哈希值。

答案 1 :(得分:2)

我在&#34; /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&lt; 2048