javax.net.ssl.SSLHandshakeExceptionの解決:sun.security.validator.ValidatorException:PKIXパスの構築に失敗しましたエラー?

Mザック:

編集:-私のブログで質問と受け入れられた回答をより見やすい方法でフォーマットしようとしました

これが元の問題です。

このエラーが発生しています:

詳細メッセージsun.security.validator.ValidatorException:PKIXパスの構築に失敗しました:
sun.security.provider.certpath.SunCertPathBuilderException:要求されたターゲットへの有効な証明書パスが見つかりません

原因javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIXパスの構築に失敗しました:sun.security.provider.certpath.SunCertPathBuilderException:要求されたターゲットへの有効な証明書パスが見つかりません

Tomcat 6をWebサーバーとして使用しています。2つのHTTPS Webアプリケーションが異なるTomcatの異なるポートにインストールされていますが、同じマシン上にあります。言ってやるApp1(port 8443)App2(port 443)App1に接続しApp2ます。App1接続するApp2と、上記のエラーが発生します。これは非常に一般的なエラーであるため、さまざまなフォーラムやサイトで多くの解決策を見つけました。私はserver.xml両方のTomcatの以下のエントリを持っています

keystoreFile="c:/.keystore" 
keystorePass="changeit"

すべてのサイトが、app2によって提供された証明書がapp1 jvmの信頼できるストアにないという同じ理由を述べています。これは、IEブラウザーで同じURLをヒットしようとしたときにも当てはまるようです(ウォーミングして、このWebサイトのセキュリティ証明書に問題があります。ここでは、このWebサイトに進みます)。しかし、同じURLがJavaクライアントによってヒットされると(私の場合)、上記のエラーが発生します。したがって、トラストストアに配置するために、次の3つのオプションを試しました。

オプション1

System.setProperty("javax.net.ssl.trustStore", "C:/.keystore");
System.setProperty("javax.net.ssl.trustStorePassword", "changeit");

Option2環境変数の以下の設定

CATALINA_OPTS -- param name
-Djavax.net.ssl.trustStore=C:\.keystore -Djavax.net.ssl.trustStorePassword=changeit ---param value

Option3環境変数の以下の設定

JAVA_OPTS -- param name
-Djavax.net.ssl.trustStore=C:\.keystore -Djavax.net.ssl.trustStorePassword=changeit ---param value

しかし、何もうまくいきませんでした

Apache HttpClientを使用して無効なSSL証明書を処理する方法」で提案されているJavaアプローチを実行すると、最終的に何が機能しますか?Pascal Thiventによって、つまりプログラムInstallCertを実行します。

しかし、このアプローチはdevboxのセットアップには問題ありませんが、実稼働環境では使用できません。

3つのアプローチは、上記の理由を私は疑問に思って私は同じ値を記載している時に仕事をしませんでしたserver.xmlapp2設定でトラストストアに、サーバーと同じ値

System.setProperty("javax.net.ssl.trustStore", "C:/.keystore") and System.setProperty("javax.net.ssl.trustStorePassword", "changeit");

app1プログラム。

詳細については、これが私がどのように接続するかです:

URL url = new URL(urlStr);

URLConnection conn = url.openConnection();

if (conn instanceof HttpsURLConnection) {

  HttpsURLConnection conn1 = (HttpsURLConnection) url.openConnection();

  conn1.setHostnameVerifier(new HostnameVerifier() {
    public boolean verify(String hostname, SSLSession session) {
      return true;
    }
  });

  reply.load(conn1.getInputStream());
SimonSez:

App2の証明書を、使用されているJVMのトラストストアファイルに追加する必要があります%JAVA_HOME%\lib\security\cacerts

最初に、次のコマンドを実行して、証明書がトラストストアにすでにあるかどうかを確認できますkeytool -list -keystore "%JAVA_HOME%/jre/lib/security/cacerts"(パスワードを入力する必要はありません)。

証明書がない場合は、ブラウザーでダウンロードして取得し、次のコマンドでトラストストアに追加できます。

keytool -import -noprompt -trustcacerts -alias <AliasName> -file <certificate> -keystore <KeystoreFile> -storepass <Password>

インポート後、最初のコマンドを再度実行して、証明書が追加されたかどうかを確認できます。

Sun / Oracleの情報はこちらにあります

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ