解决JAVA“无法验证证书。将不执行该应用程序。”提示

笔者的一台电脑安装了Java 8 update 361。

需要使用UBNT网桥上的AirView应用(JAVA),但运行时提示:

应用程序出于安全原因被阻止

无法验证证书。

将不执行该应用程序。

名称:AirView

发行者:Ubiquiti Inc.

位置:http://172.16.x.x:80

笔者先前已经在控制面板——Java——安全——“例外站点”列表中加入了上述地址,在以前的旧版Java上是可以正常运行的。

但自从Java更新到某个版本后(具体无从考证了),就出现了这个“无法验证证书”的问题。

笔者又尝试在控制面板——Java——高级中,将几个证书撤销检查设置为“不检查”。但仍然没有效果,依旧报告相同的错误信息。

既然是证书有问题,那就在弹出提示时,查看一下JAVA应用的证书。

发现应用的证书是SHA256算法。但在证书路径中,有父(根)证书在使用SHA1算法。

那么会不会是SHA1算法被JAVA所禁止了?

答案就在C:\Program Files\Java\jre1.8.0_361\lib\security\java.security文件中。

发现这么几行:

jdk.certpath.disabledAlgorithms=MD2, MD5, SHA1 jdkCA & usage TLSServer, \
    RSA keySize < 1024, DSA keySize < 1024, EC keySize < 224, \
    include jdk.disabled.namedCurves, \
    SHA1 usage SignedJAR & denyAfter 2019-01-01

又上网查询了一下,官方讲得很清楚:

JARs signed with SHA-1 algorithms are now restricted by default and treated as if they were unsigned. 

 

Any JAR signed with SHA-1 algorithms and timestamped prior to January 01, 2019 will NOT be restricted.

Users can, at their own risk, remove these restrictions by modifying the java.security configuration file (or override it by using the java.security.properties system property) and removing "SHA1 usage SignedJAR & denyAfter 2019-01-01" from the jdk.certpath.disabledAlgorithms security property and "SHA1 denyAfter 2019-01-01" from the jdk.jar.disabledAlgorithms security property.

Java™ SE Development Kit 11, 11.0.17 Release Noteshttps://www.oracle.com/java/technologies/javase/11-0-17-relnotes.html

也就是说,JRE从某个版本开始(大约是2021年的第三季度),默认阻止签名证书使用SHA1算法的应用。但也有例外,就是签名时间戳早于2019年1月1日的,不受此限制。

因此,只需要在java.security文件中找到两行带有“denyAfter 2019-01-01”的代码,用#将其注释掉即可。

保存文件,之后就可以运行先前的java应用了。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值