0

さらに別の「証明書が見つかりません」という質問についてお詫び申し上げます。

私はWindows 7マシンで開発しています。私は複数の Java バージョンを使用しているため、使用されている Java バージョン (ここでは Java6) へのパスが明示されています。次の 2 行でこれを実現します。

set path=c:\Program Files\Java\jdk1.6.0_45\bin;%path%
set java_home=c:\Program Files\Java\jdk1.6.0_45

certificate.PFX 証明書を提供するサード パーティの Web サービスhttps://service.gov/Service.svc?wsdlを使用する必要があります (サード パーティの利益を保護する方法として、サービス URI と証明書ファイルの両方の名前が変更されます)。Windows で証明書ファイルをインポートした後、ブラウザで WSDL ファイルを開くことができることを確認しました。

まず、キーストアに証明書をインポートします (管理者コマンド プロンプトを使用して、システム フォルダーへの書き込みアクセスを取得します)。

keytool -importkeystore -srckeystore certificate.pfx -srcstoretype pkcs12 -keystore "c:\Program Files\Java\jdk1.6.0_45\jre\lib\security\cacerts"

成功通知が届きます。それでも、次の出力に新しい証明書が存在することを確認します。

keytool -list -keystore "c:\Program Files\Java\jdk1.6.0_45\jre\lib\security\cacerts"

次に、src と classes という空のサブフォルダーを含む新しいフォルダーを作成します。これが完了したら、その新しいフォルダーから wsimport を実行します (バイナリの代わりに Java クラスを使用して、使用されているトラストストアについて明確にします)。

java -classpath "c:\Program Files\Java\jdk1.6.0_45\lib\tools.jar" -Djavax.net.ssl.trustStore="c:\Program Files\Java\jdk1.6.0_45\jre\lib\security\cacerts" -Djavax.net.ssl.trustStorePassword=changeit com.sun.tools.internal.ws.WsImport https://service.gov/Service.svc?wsdl -s src -d classes

出力は次のとおりです。

parsing WSDL...

[ERROR] sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

Failed to read the WSDL document: https://service.gov/Service.svc?wsdl, because 1) could not find the document; /2) the document could not be read; 3) the root element of the document is not <wsdl:definitions>.

[ERROR] failed.noservice=Could not find wsdl:service in the provided WSDL(s):

At least one WSDL with at least one service definition needs to be provided.

Failed to parse the WSDL.

WSDL ファイルには含まれており、他の組織によって使用されているため、問題がサード パーティ側にないことはほぼ確実です。

何か不足していますか?今ではすべてが明らかなように思えますが、それでもうまくいきません。私もJava8でこれを試しましたが、結果はほとんど同じです。唯一の違いは、Java8 では WsImport クラスが存在しなくなったため、wsimport.exe バイナリを使用していることです。

アイデアやヒントをお寄せいただきありがとうございます。

4

1 に答える 1

1

pfx ファイル (証明書と秘密鍵を含む) はクライアント認証用であり、トラストストアはサーバー証明書の検証用です。キーストアトラストストアの違いを理解することが重要です。

クライアント証明書 (および鍵) をデフォルトのトラストストア (cacerts) にインポートしました。代わりにすべきことは次のとおりです。

  1. サーバーの SSL 証明書の発行者 (CA) を cacerts にインポートします。CA 証明書がすでに cacerts にある場合は、この手順をスキップできます。これはおそらくここに当てはまります。
  2. クライアント認証のキーストアとして pfx ファイルを使用します。最も簡単な方法は、jks に変換することです: https://stackoverflow.com/a/3054034/2672392 wsimport に渡すプロパティは " javax.net.ssl.keyStore" と " javax.net.ssl.keyStorePassword" です。

重要な SSL プロパティのリストについては、この回答を参照してください: https://stackoverflow.com/a/5871352/2672392

于 2016-03-31T15:30:51.270 に答える