2

ローカル開発マシンに有効なキーストアがあり、HTTPS 経由で Web サービスにアクセスするための証明書が含まれています。

プロジェクトでこのキーストアにアクセスするには、次の方法を使用します。

System.setProperty("javax.net.ssl.truststore", "C:\\<workspaceprojectPath>\\SIPkeystore\\truststore.jks"); // sollte wohl auch ohne Keystore klappen
System.setProperty("javax.net.ssl.keyStore", "C:\\<workspaceprojectPath>\\SIPkeystore\\SIPkeystore.jks");  
System.setProperty("javax.net.ssl.keyStorePassword", "SECRET");

今、別のプロジェクトからその証明書にアクセスしたいと考えています。そこで、他の (ローカル) プロジェクト ディレクトリにあるキーストアへの同じ (完全な) パスを指定します。

どうやらパスはまだ jvm によって検出され、プロパティが設定されていますが、Web サービスにアクセスすると、キーストアをまったく追加していないかのように同じエラー メッセージが表示されます。

アプリケーションを実行しようとすると、

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

既存のキーストアをコピーする可能性はありますか? これは、アプリケーションをサーバーにデプロイするときにも重要です。アプリケーションはスタンドアロンの jar として実行されます。(ウェブサーバーなし)

編集: OK、元のキーストアファイルのローカルコピーを使用しながら元のアプリケーションを実行できるため、キーストアのコピーは問題ではないようです。構成の問題のようです。

4

3 に答える 3

4

既存のキーストアをコピーする可能性はありますか?

はい。ファイル システムの観点からは、これは単なるファイルです。

問題は次のいずれかだと思います。

  • 関連するプロパティが他のプロジェクトで正しく設定されていません。
  • 他の JVM がキーストア ファイルを見つけることができません (chroot などの理由で)。
  • 他の JVM には、キーストア ファイルへのアクセス/読み取りに必要な権限がありません。
  • 読み取りアクセスが (たとえば) SELinux によってブロックされています。
于 2012-11-07T10:44:50.303 に答える
2

まず第一に、Web サービスがクライアント証明書を必要としない場合 (つまり、自己紹介の場合)、キーストアは必要ありません。必要なのはトラストストアだけです。

他のプロジェクトがトラストストアにアクセスできない可能性があるため、演習のためにC:\<workspaceprojectPath>\SIPkeystore\truststore.jksそこを開いて最初の数バイトを読み取ってみてください。成功した場合は、他のプロジェクトに他のトラストストアがデフォルトとして設定されていることを意味するため、その場合は次を試してください。

System.out.println(System.getProperty("javax.net.ssl.trustStore"));

また、Java では大文字と小文字が区別され、javax.net.ssl.truststoreの代わりにプロパティを指定したことに注意してくださいjavax.net.ssl.trustStore。これも修正してみてください。

于 2012-11-19T12:18:42.510 に答える
0

valicert クラス 3 CA 証明書がデフォルトのトラストストアにありません (これはおそらく JRE lib/security ディレクトリの cacerts ファイルですが、詳細についてはJSSE ドキュメントを参照してください)。

独自のトラストストア ファイル (cacerts ファイルのコピーでもかまいません) を作成し、これに valicert ルート ca を追加する必要があると思います。次に、javax.net.ssl.trustStore システム プロパティでこのファイルを指定します。

于 2012-11-20T10:02:58.930 に答える