1. ホーム

[解決済み】要求されたターゲットへの有効な証明書パスが見つからない - 証明書をインポートしてもエラーが発生する

2022-04-07 07:17:30

質問

自己署名証明書を持つサーバーにアクセスしようとするJavaクライアントがあります。

サーバーにPostしようとすると、以下のエラーが発生します。

要求されたターゲットへの有効な認証パスが見つかりません

この問題について少し調べてから、次のようにしました。

  1. 自分のサーバーのドメイン名を root.cer ファイルを作成します。
  2. GlassfishサーバーのJREで、これを実行しました。

    keytool -import -alias example -keystore cacerts -file root.cer
  3. 証明書が正常にcacertに追加されたことを確認するために、次のようにしました。

    keytool -list -v -keystore cacerts

    certが存在することが確認できます。
  4. その後、Glassfishを再起動し、「投稿」をリタイアさせました。

まだ同じエラーが出ています。

これは、私のGlassfishが、私が修正したcacertファイルを実際には読んでおらず、おそらく他のものであることが原因だと感じています。

この問題に直面したことのある方で、私を正しい方向へ導いてくれる方はいらっしゃいますか?

解決方法は?

アプリサーバーやその他のJavaの「ラッパー」は、プロパティやキーチェーンなどを独自の方法で操作する傾向があります。だから、まったく別のものを見ているのかもしれません。

Truss-ingを試してみてください。

java -Djavax.net.debug=all -Djavax.net.ssl.trustStore=trustStore ...

をクリックして、それが役に立つかどうか見てみましょう。all」の代わりに「ssl」、キーマネージャ、トラストマネージャに設定することもできます - これはあなたのケースに役立つでしょう。help」に設定すると、ほとんどのプラットフォームで以下のようなリストが表示されます。

また、自分のアイデンティティはルートへの「信頼の連鎖」を持っており、これは「誰」を信頼するかを判断するために必要なルートへの連鎖とは別のものであるという事実です。

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#Debug