背景
原本好好的项目突然运行出现这个错误Certificates does not conform to algorithm constraints
,代码什么都没修改
问题分析
证书不符合算法约束,那就是我们的jdk算法约束出现了点问题
解决步骤
- 在jdk的安装目录找到
java.security
文件,可参考于我的路径jdk1.8.1_121/jre/lib/security/java.security
- 修改
jdk.tls.disabledAlgorithms
这里可以修改成jdk.tls.disabledAlgorithms=
,但这就意味着不限制加密算法,可用于排查错误,一般来说修改成这样是百分比能成功的。
如果你清楚证书加密是使用了哪种具体的加密格式,如RSA算法,则可以设置具体的长度限制。比如你使用的RSA加密算法长度在1024以上,那就得限制1024以下的长度:jdk.tls.disabledAlgorithms=RSA keySize < 1024
这只是举个例子,具体其它的限制配置也可以加上的。
一般来说,将tlsv1、tlsv1.1、3des_ede_cbs删除即可解决大部分人的问题,如果你不清楚要删除哪些,可以试一下 - 如果是修改了具体算法限制,还需要清除浏览器缓存,否则也会不生效的
未解之谜
我的配置在修改之后,清除缓存生效了,但是我明白之前为什么会出现这个问题,我将配置修改回来原本的配置,清除浏览器缓存,结果又能正常访问了。然后过了一个多小时之后,问题再一次出现。
问题解决
后来排错的时候,将jdk.certpath.disabledAlgorithms
与jdk.tls.disabledAlgorithms
中关于MD5的算法都去掉就成功了。由于我的系统接入别人的系统,证书编码格式不清除,所以只能一个个摸索。如果是自己的系统,知道域名证书的具体编码格式,那就好办多了,将编码格式移除即可。