我之前遇到过这个问题,并通过更新我的 JDK 来解决这个问题。早些时候,当我遇到这个问题时,我使用的是使用 Yum 进行的默认安装,后来我从 oracle 下载了 JDK 并安装了它,并根据新的安装目录更改了默认的 $JAVA_HOME 路径。现在同样的问题又出现了,我查了网上的相关帖子,找不到任何解决办法。
我们使用的示例代码只是通过 http 或 https 进行的简单身份验证。
//Http client object
HttpClient client = new HttpClient();
HostConfiguration config = client.getHostConfiguration();
client.getParams().setParameter("http.socket.timeout", new Integer(100000));
String Url = 'https://example.com/';
PostMethod method = new PostMethod(Url);
//Handler to try for 3 attempt in case of network failure
method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
new DefaultHttpMethodRetryHandler(3, false));
//Here we are trying to connect through Httpclient method
int statusCode = client.executeMethod(method);
不知道是什么导致了这个问题。
keytool -list -keystore $JAVA_HOME/jre/lib/security/cacerts
Enter keystore password:
Keystore type: JKS
Keystore provider: SUN
Your keystore contains 76 entries
2013 年 2 月 11 日编辑
我做了一些更多的测试并重新安装了我的 jdk 和 tomcat,但仍然得到同样的错误。
Failure-Fatal transport error:
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
我按照URL上的说明进行操作:
java InstallCert services.example.com
Loading KeyStore jssecacerts...
Opening connection to services.example.com:443...
Starting SSL handshake...
No errors, certificate is already trusted
Server sent 1 certificate(s):
1 Subject CN=*.example.com, OU=Domain Control Validated, O=*.example.com
Issuer SERIALNUMBER=04343339, CN=Go Daddy Secure Certification Authority, OU=http://certificates.godaddy.com/repository, O="GoDaddy.com, Inc.", L=Scottsdale, ST=Arizona, C=US
这表明证书已经添加到 cacerts 中。现在这变得越来越有趣了。