我有一个在 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 许可协议
我找到了解决方案。我设置了
在服务器上的文件
jre/lib/security/java.security
中。设置后服务器只接受TLS1.2连接,拒绝低安全协议版本。