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

新手上路,请多包涵

我有一个在 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。

我围绕 java.security 文件夹中的 jdk/jre/lib/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 版本。

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

如果禁用的算法列表用 RSA 代替 RSA keySize < 2048,我会收到 SSLHandShakeError 以及错误消息:

没有共同的密码套件。

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

请帮助如何使 java 只接受 TLS1.2 连接。

原文由 PankajSays 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.9k
2 个回答

我找到了解决方案。我设置了

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

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

设置后服务器只接受TLS1.2连接,拒绝低安全协议版本。

原文由 PankajSays 发布,翻译遵循 CC BY-SA 4.0 许可协议

我也在 "/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

原文由 Abhimanyu Kumar 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题