程序员

java.security.cert.CertificateException: Certificates does not conform to algorithm constraints

今天抓取程序出错,报异常

java.security.cert.CertificateException: Certificates does not conform to algorithm constraints

百度一下,很快知道了原因和解决方案

原因:

JDK默认禁用了一些加密算法,因为觉的这些加密算法的强度不高

解决方案:

将%JAVA_HOME%/jre/lib/security/java.security文件里

jdk.certpath.disabledAlgorithms=MD2, RSA keySize < 1024

改为

#jdk.certpath.disabledAlgorithms=MD2, RSA keySize < 1024

重新运行异常消失,问题解决

但领导认为这个解决方案可能会影响别的程序,要求在java命令运行参数里解决这个问题。

仔细研读%JAVA_HOME%/jre/lib/security/java.security文件

发现线索

#

# Determines whether this properties file can be appended to

# or overridden on the command line via -Djava.security.properties

#

security.overridePropertiesFile=true

复制java.security文件,注释掉jdk.certpath.disabledAlgorithms=MD2, RSA keySize < 1024,文件保持为my.java.security

启动程序 java -Djava.security.properties=./my.java.security DemoApplication,结果还是抛出异常。

仔细一看一想,犯了思维定式的错误,这里不是用my.java.security代替java.security,而是用my.java.security
里的属性去覆盖java.security的属性,#jdk.certpath.disabledAlgorithms=MD2, RSA keySize < 1024就是没有jdk.certpath.disabledAlgorithms属性,还是用的java.security里的属性jdk.certpath.disabledAlgorithms=MD2, RSA keySize < 1024

这里想明白就很简单了,把my.java.security里的内容删的只留下

jdk.certpath.disabledAlgorithms=

再次运行java -Djava.security.properties=./my.java.security DemoApplication,异常消失,问题解决

圆满完成任务 V