私は以前にこの問題に直面し、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に追加されていることを示しています。今、これはもっと面白くなってきています。