问题描述
我在 macOS 11.4 下运行 Oracle 的 JRE 版本 1.8.0_291-b10,但无法使用通过 TLSv1.1 获取 JAR 的本地 JNLP。
使用 javaws -wait ~/Downloads/test.jnlp
运行 JNLP 时,尽管在控制面板中启用了所有协议,但我仍然收到 javax.net.ssl.SSLHandshakeException: The server selected protocol version TLS11 is not accepted by client preferences [TLS13,TLS12,SSL20Hello]
:
我还尝试通过运行 javaws -J-Dhttps.protocols=TLSv1.1 -wait ~/Downloads/test.jnlp
来强制 JVM(以防设置有问题),但这让我javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)
。
JRE 似乎无论如何都无法建立 TLSv1.1 连接。有什么办法可以强制吗?更新应用程序是没有问题的,因为这是一个封闭源代码废弃软件,通常需要 IE6 和 Windows XP 才能运行。
解决方法
您可以找到信息 here。它可能有点过时,但包含必要的配置。总结:
- 添加
-Djdk.tls.client.protocols=TLSv1.1
- 使用以下内容创建文件 enableTLS1.1.security(您也可以从 /jre/lib/security/java.security 复制该属性并删除 TLSv1.1)
jdk.tls.disabledAlgorithms=SSLv3,TLSv1,RC4,DES,MD5withRSA,DH keySize < 1024,EC keySize < 224,3DES_EDE_CBC,anon,NULL,include jdk.disabled.namedCurves
-Djava.security.properties=<path to enableTLS1.1.security>
您还可以从 /jre/lib/security/java.security 中的 jdk.tls.disabledAlgorithms 属性中删除 TLSv1.1,而不是 2) 和 3),但这不是一个好的做法