今天抓取程序出错,报异常
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