この記事では、主に SSL/TLS ハンドシェイク失敗エラーの考えられるすべての原因と修正方法を紹介します。参考までに、原因ごとに解決策を分析します。 1. SSL/TLSハンドシェイク失敗エラーの原因理由 | TLSハンドシェイクエラーの説明 | 修理済み | システム時刻が正しくありません | クライアント デバイスの時刻と日付が正しくありません。 | クライアント | ブラウザエラー | ブラウザの設定によりエラーが発生しました。 | クライアント | 仲介人 | 第三者が接続を傍受/操作しています。 | クライアント | プロトコルの不一致 | サーバーはクライアントが使用するプロトコルをサポートしていません。 | サーバ | 暗号スイートの不一致 | サーバーはクライアントが使用する暗号スイートをサポートしていません。 | サーバ | 証明書が正しくありません | .URLホスト名がサーバー証明書のホスト名と一致しません。 | サーバ | 2. クライアントに提示された証明書チェーンが不完全です/無効。 | 3. 取り消し/期限切れTLS/SSLについて証明書はクライアントまたはサーバーに送信されます。 | 4. 内部ネットワークでの自己署名証明書の置き換えにより、パス構築エラーが発生しました。 | SNI対応サーバー | クライアントは SNI 対応サーバーと通信できません。 | サーバ | 2. SSL/TLSハンドシェイク失敗の原因と解決策システム時刻が正しくありません システム時刻が正しくないために SSL/TLS ハンドシェイクが失敗します。システム クロックを誤って削除したことが原因であると思われます。これは主に、SSL/TLS 証明書の有効期間が限られているため、時間が重要になるからです。実際、SSL 証明書の有効期限切れが注目を集めたいくつかのケースでは、インターネット ユーザーが接続を継続できるように、意図的にシステム時間を有効期限前の日付に設定していました。 システム時刻を変更する必要がないのに、SSL/TLS ハンドシェイク失敗エラーが発生し、システム時刻が正しい場合は、ブラウザ エラーに問題がある可能性があります。 2. ブラウザエラー 場合によっては、ブラウザの設定が誤っていたり、プラグインによってブラウザの動作が若干異なっていたりして、正当な Web サイトに接続できない問題が発生することがあります。現在のブラウザで何を調整する必要があるかを正確に診断するのは少し難しいかもしれませんが、問題を特定のブラウザのバグに絞り込むのは非常に簡単です。別のブラウザを試して、何が起こるかを確認するだけです。 Google Chrome ブラウザを使用している場合は、オペレーティング システムのネイティブ ブラウザに切り替えてください。 基本的には、電源を入れてサイトに接続してみるだけです。同じ SSL/TLS ハンドシェイク失敗エラーが表示される場合、問題はブラウザに原因がありません。ただし、接続できる場合は、プラグインまたは設定に問題があることがわかります。 この SSL/TLS ハンドシェイク エラーを修正する最も簡単な方法は、ブラウザをデフォルト設定にリセットし、すべてのプラグインを無効にすることです。そこから、ブラウザを必要に応じて設定し、調整しながらサイトへの接続をテストできます。これには多少時間がかかる場合がありますが、ブラウザの設定ミスやエラーを修正するにはこれが唯一の方法です。 3. 仲介人 中間者 (MITM) は通常、情報を盗んだり危害を加えようとする悪意のあるハッカーとして表されます。実際には必ずしもそうとは限りません。多くのプログラムやデバイスは、トラフィックをアプリケーション サーバーに送信する前に、検査やその他の悪意のない目的 (負荷分散など) でトラフィックを傍受します。技術的には、このプロセスも MITM を構成します。 これらのデバイスに問題が発生すると、TLS ハンドシェイクが失敗することがあります。これは、接続をブロックするネットワーク ファイアウォールのようなものである場合もあれば、サーバー側ネットワーク上のエッジ デバイスの構成である場合もあります。したがって、この問題は、状況に応じて、実際にはクライアント側で修正することも、サーバー側で修正することもできます。 問題は、この問題がクライアント側の問題である場合、ウイルス対策設定を使用しているときにリスクにさらされる可能性があることです。通常、問題のあるサイトをホワイトリストに追加したり、例外を作成したりする方法があるはずです。ただし、ファイアウォールやウイルス対策ソフトウェアを破棄せず、Web サイトに接続するだけです。問題がサーバー側にある場合、エッジ デバイスの構成の問題である可能性が最も高くなります。 4. サーバー側のエラー ほとんどの場合、SSL/TLS ハンドシェイクの失敗はサーバー側の問題が原因です。これらの問題の中には簡単に修正できるものもあれば、より複雑なものもあり、修正する価値がまったくないものもあるかもしれません。次に、具体的な状況を見てみましょう。 ) プロトコルの不一致 これは実際にはクライアント側とサーバー側の両方で発生する可能性があるバグであり、状況によっては実際には修正する価値のないバグである可能性があります。プロトコルと暗号をサポートする上で最も重要な知恵は、常に前を向き、決して後ろを振り返らないことです。 TLS .2 は 10 年以上前にリリースされましたが、これをサポートしていない Web サイトはまだ少数存在します。 IETF は最終的に 208 年に TLS .3 を RFC 8446 として公開しました。 2020 年 8 月現在、Qulys SSL Lbs は、Alex の上位 50,000 サイトのうち 98.4% が TLS .2 をサポートし、32.8% が TLS .3 をサポートしていると報告しています。 一方、PCI DSS では、支払いカード情報を収集するすべての Web サイトが SSL 3.0 および TLS 3.0 のサポートを終了することが義務付けられています。 4大ブラウザメーカーであるGoogle、Firefox、Apple、Microsoftは共同で、TLSが2020年に廃止されることを発表しました。 プロトコルの不一致により SSL/TLS ハンドシェイク失敗エラーが発生した場合は、クライアントとサーバーが同じ TLS バージョンを相互にサポートしていないことを意味します。次に例を示します。 この場合、相互にサポートされている TLS プロトコルはなく、サーバーは下位バージョンをサポートしていない可能性があります。質問される前に言っておきますが、いいえ、サーバーはこれを修正するべきではありません。この例では、クライアントはブラウザをアップグレードするか、ブラウザが最新である場合は最新の TLS バージョンをサポートするように構成する必要があります。 この時点では、TLS .2 または TLS .3 を使用する必要があります。そうでない場合は、それらのサポートを追加します。しかし、決して後戻りしてはいけないことを覚えておいてください。 2) 暗号スイートの不一致 暗号スイートの不一致はプロトコルの不一致に似ていますが、より細かいレベルです。 SSL/TLS は、すべてを処理する 1 つのアルゴリズムではありません (ECC はそれに近いですが)。実際には、さまざまな機能を提供し、SSL/TLS を構成するアルゴリズムのグループです。 SSL/TLS は Megazod のようなもので、Cipher Suites は Powe Rnges のようなものです。いずれにせよ、TLS .3 で使用される暗号スイートは改良されていますが、従来、暗号スイートには次のものを処理するアルゴリズムがあります。 - 対称公開鍵暗号化
- 対称セッションキー暗号化
- キー生成
- 署名ハッシュ
業界や政府機関によって暗号化標準が異なり、それぞれ異なる暗号スイートの使用が推奨されています。一般的に、そこには多くの重複があり、ほとんどのサイトは少数の暗号スイートをサポートしているため、クライアントにはさまざまな選択肢があり、通常は相互に同意できるものを見つけることができます。当然のことながら、サイトが単一の暗号スイートのみをサポートしている場合、ネゴシエーションが成功する可能性は大幅に減少します。 通常、SSL ブリッジングが実行される場合、これはネットワーク内で発生し、エッジ デバイスが HTTPS トラフィックを受信して復号化し、アプリケーション サーバーに送信する前に再暗号化します。エッジ デバイスとアプリケーション サーバーが相互にサポートされている暗号スイートを共有していない場合、エラーが発生します。 プロトコル バージョンと同様に、暗号スイートは前進のみに進み、後退はしないでください。プロトコル バージョンまたは暗号スイートが非推奨になる理由は、業界が難しい問題の解決に取り組んでいるからではなく、問題が発見されたか、差し迫っているためであることに留意してください。したがって、後方に移動すると、接続の安全性が低下するだけです。 5. SSL/TLS 証明書が正しくない ブラウザが SSL/TLS 証明書を不正なものとして扱い、ハンドシェイクが正常に完了しない原因となるさまざまな要因が存在します。次のように: 質問 | 説明する | ホスト名の不一致 | 証明書内の CN がホスト名と一致しません。 | 証明書チェーンが正しくありません | 証明書チェーンに中間証明書がありません。 | 証明書の有効期限が切れた/取り消された | サーバーは、期限切れ、失効、または信頼されていない証明書を提示しました。 | 自己署名による交換 | (内部ネットワーク) 証明書の置換パスが間違っています。 | ) ホスト名が正しくありません: これは、サイトの WWW バージョンと非 WWW バージョンの両方で問題となっていました。ただし、証明機関コミュニティは、SAN (Subject Alternative Name) ドメインとして無料でリストできるようにすることで、この問題を大幅に軽減しました。この問題は通常、証明書を再発行するか、場合によってはワイルドカード証明書を使用することで解決できます。 2) 証明書チェーンが正しくない: SSL/TLS および PKI の信頼モデルは通常、慎重に管理されたルート プログラムに依存します。これらは、コンピュータ システムに実際に存在する、信頼された CA ルート証明書のコレクションです。 市場には多数の CA が存在するため、証明機関は中間ルートをローテーションし、それらの中間ルートを使用して SSL/TLS (エンドユーザー) 証明書に署名することができますが、これはリスクを伴います。ここでチェーンが現れ始めます。ルート CA 証明書は、中間ルートにデジタル署名するために使用されます。これらの中間証明書は、他の中間証明書またはエンドユーザーの SSL/TLS 証明書に署名するために使用されます。 ブラウザが SSL/TLS 証明書を受信すると、その信頼性を確認するために行われることの 1 つが署名です。 SSL/TLS 証明書のデジタル署名を確認し、署名した中間ルートに送り返します。 次に、Web サイトのデジタル署名を確認し、Web サイトに署名した証明書に返します。このように繰り返して、最終的には、信頼ストア内のルート CA 証明書の 1 つに到達します。 これができない場合、証明書チェーンは通常不完全であり、ブラウザが中間証明書の 1 つを見つけることができず、SSL/TLS ハンドシェイクが失敗することを意味します。この問題を解決するには、不足している中間証明書を見つけてインストールする必要があります。証明書を購入した CA に応じて、その Web サイトで中間証明書が公開されているはずです。 したがって、米国は、GeoTust、Comodo、DigiCetなどの国際的に信頼されているSSL証明書を購入するようすべての人に注意を促しています。 3) 期限切れ/失効した証明書: 現在の SSL/TLS エコシステムにおける証明書の失効には多くの改善の余地がありますが、ブラウザが証明書が失効したことを認識して、それに基づいてハンドシェイクに失敗するケースが依然として存在します。通常、これは証明書の有効期限が切れたことが原因です。 SSL/TLS 証明書は一定期間のみ有効です。 関連するおすすめ読書: 《期限切れのSSL証明書の危険性》 4) 自己署名の置き換え: パブリック インターネットでは、クライアントがルート ストアにプライベート ルートを手動でインストールしていない場合、自己署名証明書は 00% の確率でエラーを返します。ただし、内部ネットワークでは、自己署名証明書が非常に一般的です。頻繁に交換すると、問題が発生する可能性があります。 ほとんどのブラウザは証明書をキャッシュするため、Web サイトに戻ったときにハンドシェイクがより速く実行されます。ただし、定期的に新しい証明書を生成する場合、新しく生成されたすべての証明書をローカル データベースに継続的に追加すると混乱が生じます。最終的にブラウザはパスの構築に問題を抱え、クラッシュすることになります。 6. SNI対応サーバー これはデバイス間の内部的な問題ですが、SNI が有効になっていない Server Name Indication サーバーと通信するクライアントが SSL/TLS ハンドシェイクの失敗の原因となる場合があります。 最初に行う必要があるのは、問題のサーバーのホスト名とポート番号を決定し、SNI が有効になっていて、必要なものがすべて通信されていることを確認することです。繰り返しになりますが、これは通常、公開される問題ではありませんが、時々社内で取り上げられることがあります。 |