JRE 忽略 TLSv1.1 首选项

问题描述

我在 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]

TLSv1.1 enabled

我还尝试通过运行 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。它可能有点过时,但包含必要的配置。总结:

  1. 添加-Djdk.tls.client.protocols=TLSv1.1
  2. 使用以下内容创建文件 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

  1. -Djava.security.properties=<path to enableTLS1.1.security>

您还可以从 /jre/lib/security/java.security 中的 jdk.tls.disabledAlgorithms 属性中删除 TLSv1.1,而不是 2) 和 3),但这不是一个好的做法

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...