Oracle JRE 1.8.0_291忽略TLSv1.1偏好无法建立连接如何解决?
根本原因
Oracle JRE 8u291 及更高版本默认将 TLSv1、TLSv1.1 纳入全局禁用加密算法列表,该配置优先级高于 Java 控制面板的 TLS 开关设置,因此仅修改控制面板不生效。
操作步骤
- 定位 Java 安全配置文件
macOS 系统下 javaws 调用的 JRE 配置文件默认路径为:/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/lib/security/java.security
如果系统中安装了独立 JDK 且 javaws 关联 JDK 路径,对应的配置文件路径为:/Library/Java/JavaVirtualMachines/jdk1.8.0_291.jdk/Contents/Home/jre/lib/security/java.security - 编辑安全配置移除 TLSv1.1 禁用规则
使用 root 权限打开上述配置文件,找到jdk.tls.disabledAlgorithms配置项,删除列表中的TLSv1、TLSv1.1两个值:
修改前示例:
jdk.tls.disabledAlgorithms=SSLv3, TLSv1, TLSv1.1, RC4, DES, MD5withRSA, DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL
修改后示例:jdk.tls.disabledAlgorithms=SSLv3, RC4, DES, MD5withRSA, DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL
如果仍提示加密套件不兼容,可同步移除该配置项中的3DES_EDE_CBC等老版本加密套件规则。
- (可选)导入服务端自签证书
如果目标服务端使用自签名 TLS 证书,需将证书导入 JRE 信任库:
sudo keytool -import -alias old_app_server -file 你的服务端证书路径.crt -keystore "/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/lib/security/cacerts"
信任库默认密码为changeit,导入时按提示确认即可。
4. 测试启动命令
修改完成后优先使用原命令测试:javaws -wait ~/Downloads/test.jnlp
如果仍报错,可添加强制指定 TLS 版本的 JVM 参数启动:javaws -J-Djdk.tls.client.protocols=TLSv1.1 -J-Dhttps.protocols=TLSv1.1 -wait ~/Downloads/test.jnlp
无全局修改权限的替代方案
如果不希望修改 JRE 全局配置,可自定义安全配置文件单独给 javaws 调用:
- 复制原
java.security文件到任意用户目录,按上述规则修改后保存 - 启动时指定自定义配置文件路径:
javaws -J-Djava.security.properties=/Users/你的用户名/custom_java.security -wait ~/Downloads/test.jnlp
内容的提问来源于stack exchange,提问作者kiler129

