SSL 接続での「重大なアラートを受信しました: SSLHandshakeException によるハンドシェイク失敗」エラーについて
SSL 接続でのハンドシェイク失敗エラーは、次の原因で発生する可能性があります。様々な要因:
潜在的な原因:
-
暗号スイートの不一致: クライアントとサーバーは互換性のある暗号スイートを利用していない可能性があるため、クライアントは、サポートされているものを調整または有効にしますserver.
-
バージョンの非互換性: サーバーとクライアントが異なる SSL バージョンで動作している可能性があり、バージョンの不一致が発生する可能性があります。クライアントは、サーバーのバージョンとの互換性を確認する必要があります。
-
不完全な証明書信頼パス: サーバーの証明書は、発行 CA がクライアントの信頼ストアに存在しないため、クライアントによって信頼されない可能性があります。これを解決するには、サーバーの CA 証明書をトラスト ストアにインポートする必要があります。
-
証明書ドメインが正しくありません: サーバー証明書は、アクセスされているドメインとは異なるドメインに対して発行されている可能性があります。この場合、サーバーは正しい証明書を取得する必要があります。
ハンドシェイク失敗のデバッグ:
ハンドシェイク失敗の原因を特定するには、SSL デバッグを有効にします。 -Djavax.net.debug=all フラグを使用します。これにより、SSL 接続確立アクティビティの詳細なログが提供されます。
更新:
さらなる調査により、問題は不完全な証明書の信頼パスに起因することが示唆されています。サーバーの証明書の CA がクライアントの信頼ストアに存在しません。これを解決するには、JVM が使用するトラスト ストア (通常は cacerts ファイル) に CA 証明書をインポートする必要があります。
JSSE トレース出力について:
JSSEトレースは、キーストア、トラストストア、およびハンドシェイクに関する情報を提供します。 process:
-
キーストアとトラストストア: これらはトレースの先頭にリストされ、使用されるキーストアとトラストストアの場所とタイプを示します。
-
信頼できる証明書: トレースには、トラスト ストアの信頼できる証明書をリストするセクションが含まれています。サーバーの CA がリストされていない場合、これが信頼パスの問題の原因である可能性があります。
-
ハンドシェイク ステージ: トレースには、ClientHello、ServerHello、および証明書交換を説明するエントリが含まれます。エラーは、選択された暗号スイートとサーバー証明書が受け入れられたかどうかを指定する ServerHello で示される場合があります。
以上がSSL 接続が「重大なアラートを受け取りました: handshake_failure」エラーで失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。