admin 管理员组

文章数量: 1184232

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

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

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

无法验证证书。

将不执行该应用程序。

名称:AirView

发行者:Ubiquiti Inc.

位置:

笔者先前已经在控制面板——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.

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

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

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

本文标签: 无法验证 编程 将不执行