我有一个webapp,它向第三方服务器发送SOAP请求。当在我的本地计算机上发出请求时它没有问题,但是当我将我的应用程序部署到我的服务器时,出现以下原因的错误:
com.sun.xml.messaging.saaj.SOAPExceptionImpl:java.security.PrivilegedActionException:com.sun.xml.messaging.saaj.SOAPExceptionImpl:消息发送失败
引起:javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX路径验证失败:java.security.cert.CertPathValidatorException:算法检查失败:MD2withRSA被禁用
我四处寻找,但找不到与我的情况相关的任何内容。值得注意的是,我正在制作的请求是https网址。我的电脑运行的是Windows XP,服务器正在运行Slackware Linux。可能导致服务器拒绝请求的任何想法?
答案 0 :(得分:2)
检查本地计算机和服务器上的Java版本。 从here开始,似乎jvm 6u17禁用了MD2,因为它不安全,无论你连接到什么都使用MD2
答案 1 :(得分:1)
谷歌搜索“MD2withRSA”显示this URL为第一击,似乎指向某个Java版本的更改。可能是本地计算机和服务器上的verasiuons不匹配。
答案 2 :(得分:1)
MD2withRSA非常容易受到攻击,因此在Sun ... Oracle的JVM中停用了。您应该询问远程服务的所有者,他的服务器是否支持更安全的加密方法(我认为,较旧的Apache HTTPd版本默认情况下会提供MD2withRSA ...)。为了在不强制提供程序更改方法的情况下解决此问题,您可以使用自己的接受旧方法的X509TrustManager实现。
答案 3 :(得分:0)
较新的Java 7(1.7版)允许通过$ JAVA_HOME / jre / lib / security / java.security 文件重新启用MD2。下载并安装Java 7并在文本编辑器中修改java.security文件,如下所示
1)从以下属性中删除MD2 jdk.certpath.disabledAlgorithms =#MD2
2)确保以下财产被注释掉 #jdk.tls.disabledAlgorithms = MD5,SHA1,DSA,RSA keySize< 2048
3)重启java应用程序
警告:默认情况下,Jdk 7中禁用了MD2,因为它不安全。但是,可以按上述方法启用它以支持较旧的部署。