今天,我想使用HttpClient在AEM中调用Hybris接口。但是我收到错误消息“ java.security.cert.CertPathValidatorException:签名算法:MD5withRSA的算法约束检查失败”。
在此行中引发异常“ java.security.cert.CertPathValidatorException:签名算法:MD5withRSA的算法约束检查失败”。
httpClient.executeMethod(request);
我将java.security文件(C:\ Program Files \ Java \ jdk1.8.0_191 \ jre \ lib \ security \ java.security)中的以下属性更改为空,但是它不起作用。 / p>
jdk.certpath.disabledAlgorithms
jdk.tls.disabledAlgorithms
jdk.jar.disabledAlgorithms
MY JDK版本:jdk1.8.0_191
有人知道如何解决吗?
谢谢, 福雷斯特
答案 0 :(得分:0)
此外:jdk.jar.disabledAlgorithm
属性与此问题无关。
使某些确实已更改了程序所看到的文件。
Windows的现代版本(自Vista以来为IIRC,也许是七个)不喜欢由\Program Files
和\Program Files (x86)
下的文件通过安装程序来编写。他们至少有时要做的一件事是“虚拟化”这样的写操作,以隐藏在每个用户%appdata%
下某个地方的另一个文件中。搜索后,您会发现很多类似的问题和沮丧。
调用Security.getProperty()
来检查程序中实际看到的设置。
如果您无法在标准文件中修复此设置,则可以通过设置sysprop(而非secprop)java.security.properties=filename
或通过提前调用Security.setProperty()
在另一个文件中覆盖它(将其放置在更方便的位置)在程序中(在加载JSSE / PKIX类之前)。参见:
Relaxing SSL algorithm constrains programatically
Java - Lock down TLS version in java.security, but allow per app override via launch config?
或者,JDK确实不需要放在\Program Files*
中。我把它放在另一个顶级目录中,没有这些问题。
当然可以告诉谁负责服务器,他们落后于时代了:-)
答案 1 :(得分:0)
@ dave_thompson_085,您好
感谢您的重播。我已通过以下步骤解决了此问题。
我使用了命令“ where java”来检查我真正使用的JDK。
我重新安装了该JDK。
我从“ jdk.certpath.disabledAlgorithms”中删除了MD5,从“ jdk.tls.disabledAlgorithms”中删除了MD5withRSA
已删除“ C:\ Program Files(x86)\ Common Files \ Oracle \ Java \ javapath;”从系统变量的路径开始
重新启动计算机,然后此问题已解决。
谢谢, 福雷斯特