1

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

4

3 に答える 3

5

最後に、すべてのトラブルとメンバーからの助けの後、私はこの問題を修正しました. 将来誰かが同じ問題に直面した場合に備えて、私は答えを提供しています。

サーバーservices.example.comはワイルドカード証明書を使用しており(私の場合)、SSLハンドシェイク中に完全な証明書を送信していなかったため(私の最善の理解によると)、この問題が発生しました。

この種の問題を修正するには、証明書を Java トラストストア「cacerts」に追加する必要があります。

1: URL http://nodsw.com/blog/leeland/2006/12/06-no-more-unable-find-valid-certification-path-requested-targetから Java コードをダウンロードし、 このファイルを配置しました場所「$JAVA_HOME/jre/lib/security/cacerts」にあるサーバー</p>

2: クラス ファイルを作成する「javac InstallCerts.java」を使用してコードをコンパイルしました。

3: 次に、次のコマンドを実行して、サーバー「services.example.com」の証明書を追加します。</p>

java InstallCert services.example.com

Enter certificate to add to trusted keystore or 'q' to quit: [1]
1

トラストファイル「jssecacerts」に証明書を追加するため、「1」を入力しました。

4: 最後に、「cacerts」ファイルを「jssecacerts」ファイルに置き換えました。(注: 置き換える前に、両方のファイルのバックアップを取ってください)

mv cacerts cacerts-bkp-12-Feb-2013
cp –p  jssecacerts cacerts

5: cacerts ファイルに証明書が追加されていることを確認します。確認するには、次のコマンドを実行します。

keytool -list -keystore $JAVA_HOME/jre/lib/security/cacerts | grep example
Enter keystore password:

services.example.com-1, Feb 12, 2013, trustedCertEntry,

6: 関連サービスを再起動し、問題をテストした結果、修正されました。

于 2013-02-12T17:05:36.797 に答える
1

トラストストアがサーバー証明書を信頼していません。自己署名ですか?サーバーからトラストストアにエクスポートする必要がある場合があります。

于 2013-01-31T07:40:00.363 に答える