笔者的一台电脑安装了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 thejava.security.properties
system property) and removing "SHA1 usage SignedJAR & denyAfter 2019-01-01" from thejdk.certpath.disabledAlgorithms
security property and "SHA1 denyAfter 2019-01-01" from thejdk.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”的代码,用#将其注释掉即可。文章来源:https://www.toymoban.com/news/detail-449373.html
保存文件,之后就可以运行先前的java应用了。文章来源地址https://www.toymoban.com/news/detail-449373.html
到了这里,关于解决JAVA“无法验证证书。将不执行该应用程序。”提示的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!