Java を使用して HTTPS 経由で Web サービスを利用する場合の「java.security.cert.CertificateException: サブジェクトの代替名が存在しません」エラー
の修正クライアントでは、「java.security.cert.CertificateException: サブジェクトの代替名が存在しません」エラーが発生する可能性があります。この問題を解決するには、次の手順を注意深く実行してください。
-
サーバーの証明書を取得します: openssl s_client -showcerts -connect AAA.BBB.CCC.DDD:9443 > コマンドを実行します。 certs.txt を使用してサーバーの証明書を取得します。
-
証明書の内容を抽出します: 「certs.txt」の -----BEGIN CERTIFICATE----- と - の間のセクションを見つけます。 ----END CERTIFICATE----- を選択し、別のファイルに保存します。
-
証明書を変更する(オプション): 必要に応じて、サーバーの IP アドレス (AAA.BBB.CCC.DDD) と一致するように証明書の名前を更新します。ただし、証明書の変更は、サーバーを制御できる場合にのみ推奨されます。
-
証明書のインポート: keytool コマンドを使用して、変更された証明書をキーストアにインポートします。例: keytool -importcert -file fileWithModifiedCertificate -keystore mykeystore.
-
HTTPS チェックを無効にする (テスト目的のみ): サービスをテストに使用しており、安全な通信を必要としない場合は、証明書の検証とホスト名の検証をバイパスするコードをクライアント クラスに追加することで、HTTPS チェックを一時的に無効にすることができます。このソリューションは運用環境での使用には推奨されません。
あるいは、サーバーを制御しない場合は代わりにそのホスト名を使用する必要があるという同様の質問の提案を使用することもできます。これは、証明書にホスト名と一致する CN (共通名) が含まれている可能性があるためです。
これらの手順は、サーバーの証明書にサブジェクトの代替名が欠落しているという特定の問題を解決することを目的としていることに注意してください。環境や利用している特定のサービスに応じて、バリエーションや追加の構成が必要になる場合があります。
以上が「java.security.cert.CertificateException: サブジェクトの代替名が存在しません」エラーを修正する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。