我正在呼叫一个拥有自签名证书的网络服务。
我已使用以下命令将证书添加到JAVA_HOME
"%JAVA_HOME%/bin/keytool" -import -alias emoney -file C:\Users\l.young\certificates\srv03.wpay.co.crt -keystore "C:\Program Files\Java\jdk1.8.0_45\jre\lib\security\cacerts"
在此之后,我将以下两行添加到我的myeclipse.ini
文件
-Djavax.net.ssl.trustStore=C:\Program Files\Java\jdk1.8.0_45\jre\lib\security\cacerts
-Djavax.net.ssl.trustStorePassword=changeit
设置我在MyEclipse中的tomcat配置来运行%JAVA_HOME%
下的java而不是AppData
完成所有这些后,我仍然得到以下异常
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
我的配置错过了什么?为什么这仍然失败?
编辑 - 问题 别名有所不同吗?
编辑2 使用SOAPUI进行测试并且它可以工作 - 没有证书问题。有任何建议如何让它在MyEclipse中运行?
答案 0 :(得分:1)
其中一个原因可能是Eclipse正在使用不同的JRE,请尝试:
"%JAVA_HOME%/bin/keytool" -import -alias emoney -file C:\Users\l.young\certificates\srv03.wpay.co.crt -keystore "%JAVA_HOME%\jdk1.8.0_45\jre\lib\security\cacerts"
编辑:根据评论中的讨论,最后的方法是忽略证书验证。请注意,这会让你在中间攻击中容易受到攻击。 将这两行添加到您的代码中以忽略证书验证:
SSLUtilities.trustAllHostnames();
SSLUtilities.trustAllHttpsCertificates();
答案 1 :(得分:1)
为什么你认为在运行Tomcat时会使用myeclipse.ini中设置的属性?尝试在Tomcat的运行配置中设置它们。 Tomcat在单独的JVM中运行。您还可以在运行配置中指定要用于Tomcat的JRE。