Web サービスに接続するときの「java.security.cert.CertificateException: No Subject Alternative Names Present」エラーを解決する方法
Java クライアントを使用して HTTPS 経由で接続すると、「java.security.cert.CertificateException: サブジェクトの代替名が存在しません」というエラーが発生する場合があります。この問題は、Web サービスへのアクセスに使用されるホスト名または IP アドレスに一致する、必要なサブジェクト代替名 (SAN) フィールドがサーバー証明書にない場合に発生します。
この問題を解決するには、次の手順を実行します。
1. Certs.txt から証明書を抽出します
certs.txt ファイルの -----BEGIN CERTIFICATE----- と -----END CERTIFICATE------ の間の部分を抽出します。 -。これはサーバー証明書です。
2.証明書名の変更 (オプション)
IP アドレス AAA.BBB.CCC.DDD と等しくなるように証明書名を変更する必要があると述べました。ただし、提供されたドキュメントによると、これは必要ない可能性があります。サーバーを制御できる場合は、証明書に AAA.BBB.CCC.DDD と一致する SAN フィールドが含まれていることを確認する必要があります。それ以外の場合は、ホスト名を SAN フィールドとして使用して、問題が解決するかどうかを確認してください。
3.変更された証明書をインポートします (オプション)
証明書を変更した場合は、keytool -importcert -file fileWithModifiedCertificate.
を使用して証明書をインポートする必要があります。 HTTPS チェックを無効にする (非推奨)
または、提供された応答に記載されている方法に従って、HTTPS チェックを無効にすることもできます。これには、証明書の検証を無視するトラスト マネージャーとホスト名検証ツールの作成が含まれます。ただし、このソリューションは運用環境での使用はお勧めできません。
5.ホスト名を使用する (オプション)
証明書を変更できない場合、または HTTPS チェックを無効にできない場合は、Web サービスに接続するときに IP アドレスの代わりにホスト名 (someSubdomain.someorganisation.com) を使用してみてください。 。これで問題が解決するかどうかを確認してください。
最適な解決策は、特定の状況とアプリケーションに必要なセキュリティのレベルによって異なることに注意してください。
以上がHTTPS 経由で Web サービスに接続すると、「java.security.cert.CertificateException: サブジェクトの代替名が存在しません」エラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。