目录

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

目录

解决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 Notes

https://i-blog.csdnimg.cn/blog_migrate/fd7b3b90db8dc44050120ee5a1f4af41.png “Java™ SE Development Kit 11, 11.0.17 Release Notes”)

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

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

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