自己署名証明書を使用してサーバーにアクセスしようとしている Java クライアントがあります。
サーバーに投稿しようとすると、次のエラーが発生します。
要求されたターゲットへの有効な認証パスが見つかりません
この問題について少し調査した後、私は次のことを行いました。
サーバーのドメイン名を
root.cer
ファイルとして保存しました。私の Glassfish サーバーの JRE では、これを実行しました:
keytool -import -alias example -keystore cacerts -file root.cer
証明書が cacert に正常に追加されたことを確認するために、次の操作を実行しました。
keytool -list -v -keystore cacerts
証明書が存在していることがわかります。
その後、Glassfish を再起動して「投稿」を再試行しました。
まだ同じエラーが発生します。
cacert
これは、Glassfish が実際には私が修正したファイルではなく、おそらく他のファイルを読み取っているためではないかと感じています。
この問題に遭遇した方、私を正しい方向に導いてくれる方はいらっしゃいますか?
ベストアンサー1
残念ながら、原因はさまざまですが、多くのアプリケーション サーバーやその他の Java ラッパーは、プロパティやキーチェーンに対する独自の解釈などを操作する傾向があります。そのため、まったく異なるものを検討している可能性があります。
トラスを組む以外に、次のことを試してみます:
java -Djavax.net.debug=all -Djavax.net.ssl.trustStore=trustStore ...
それが役立つかどうかを確認してください。 'all' の代わりに 'ssl'、キー マネージャー、および信頼マネージャーに設定することもできます。これは、あなたのケースに役立つ可能性があります。 'help' に設定すると、ほとんどのプラットフォームで以下のようなリストが表示されます。
いずれにせよ、キーストア (自分の ID を証明する秘密鍵と証明書が格納されているストア) と信頼ストア (誰を信頼するかを決定するストア) の違いを完全に理解し、自分の ID にもルートへの信頼の「チェーン」があること (これは、信頼する「相手」を判断するために必要なルートへのチェーンとは別のものである) を理解してください。
all turn on all debugging
ssl turn on ssl debugging
The following can be used with ssl:
record enable per-record tracing
handshake print each handshake message
keygen print key generation data
session print session activity
defaultctx print default SSL initialization
sslctx print SSLContext tracing
sessioncache print session cache tracing
keymanager print key manager tracing
trustmanager print trust manager tracing
pluggability print pluggability tracing
handshake debugging can be widened with:
data hex dump of each handshake message
verbose verbose handshake message printing
record debugging can be widened with:
plaintext hex dump of record plaintext
packet print raw SSL/TLS packets
出典: # 参照http://download.oracle.com/javase/1.5.0/docs/guide/security/jsse/JSSERefGuide.html#デバッグ