「SSL Handshake Failed」エラーを簡単に修正する方法

TL;DR: 「SSL Handshake Failed」エラーは、暗号化接続を開くために必要なセキュリティ設定について、ブラウザとサーバーが合意できないときに表示されます。最もよくある原因は、SSL証明書の期限切れ、デバイスの時計の狂い、古いブラウザ、TLSプロトコルバージョンの不一致です。すべてのHTTPSサイトでエラーが出る場合は、方法1(日付と時刻)から始めてください。特定の1サイトだけの場合は、方法2(証明書の確認)から始めてください。

SSL Handshake Failedエラーのよくある原因

SSL/TLSハンドシェイクは、すべてのHTTPS接続の前に行われる短いネゴシエーションです。ブラウザとサーバーは、プロトコルのバージョン、暗号スイート、サーバー証明書の有効性について合意する必要があります。このネゴシエーションのいずれかの部分が破綻すると、接続を確立できません。最もよくある原因は次のとおりです。

  • 日付と時刻の設定の誤り: SSL証明書は、決められた有効期間内でのみ有効です。デバイスの時計が数時間でもずれていると、証明書自体に問題がなくても、ブラウザはその証明書を期限切れ、またはまだ有効でないものとして扱います。
  • 古いブラウザ: 最新のTLSバージョンや暗号スイートに対応していないブラウザは、それらを要求するサーバーに接続できません。トラフィックを傍受するブラウザ拡張機能も、同じ結果を引き起こすことがあります。
  • 期限切れまたは不一致のSSL証明書: 有効期限を過ぎた証明書や、誤ったドメイン向けに発行された証明書は、直ちにハンドシェイクの失敗を引き起こします。
  • プロトコルバージョンの不一致: クライアントとサーバーはTLSのバージョンについて合意する必要があります。いまだにTLS 1.0や1.1で稼働しているサーバーは、少なくともTLS 1.2を要求する現行のすべてのブラウザから拒否されます。WP STAGINGのサポートチケットを見ると、古いサーバーのTLS設定は、私たちが遭遇する最も頻繁なサーバー側の原因の一つです。
  • 暗号スイートの不一致: TLSのバージョンが一致していても、サーバーはブラウザが受け入れる暗号スイートを少なくとも一つ提供する必要があります。暗号スイートのリストが短い、または非推奨の古いサーバーは、サーバー側に明らかなエラーが出ないまま、この障壁に突き当たることがよくあります。
  • ファイアウォールやアンチウイルスの干渉: 一部のセキュリティソフトウェアは、HTTPS接続を傍受して独自の証明書で再署名します。その証明書がブラウザに信頼されていない場合や、検査の過程で暗号スイートが取り除かれる場合、ハンドシェイクは失敗します。

問題を診断する方法

修正を適用する前に、症状を最も可能性の高い原因に照らし合わせておくと、大幅に時間を節約できます。

症状 最も可能性の高い原因 まず試す方法
すべてのHTTPSサイトでエラーが出る デバイスの時計が狂っている、またはブラウザが古い 方法1(日付と時刻)または方法3(ブラウザの更新)
特定の1サイトだけでエラーが出る そのサーバーの証明書が期限切れまたは設定ミス 方法2(証明書の確認)
ブラウザ拡張機能をインストールした後にエラーが出た 拡張機能がSSLトラフィックを傍受している 方法5(拡張機能を無効化)
特定のブラウザだけでエラーが出て、他では出ない ブラウザのTLS設定または古いバージョン 方法3(ブラウザの更新)
WordPressをHTTPSに移行した後にエラーが出る WordPressがHTTPS用に完全に設定されていない 下記のWordPress固有の修正
訪問者があなたのサイトでエラーを報告する サーバー側のTLSまたは証明書の問題 SSLサーバーテストを実行する

サーバー側の問題については、Qualys SSL Labs Server Testがドメインを無料でスキャンし、TLS設定を評価して、見つかった証明書と暗号の問題をすべて一覧表示します。WP STAGINGでのテストでは、このテストを実行することが、問題がサーバー側とクライアント側のどちらにあるかを確認する最も速い方法です。

「SSL Handshake Failed」エラーを解消する最も簡単な5つの方法

  1. 日付と時刻の設定を確認する
  2. SSL証明書がまだ有効か確認する
  3. ブラウザを更新する
  4. TLS/SSLプロトコルの対応を確認する
  5. ブラウザの拡張機能を無効にする

1. 日付と時刻の設定を確認する

「SSL Handshake Failed」エラーは、デバイスの日付と時刻が誤っていることがしばしば原因です。SSL証明書は正確な時刻に依存しているため、時計がずれていると安全な接続が中断されることがあります。修正方法は次のとおりです。

タスクバーの時刻と日付を右クリックし、「日時を調整する」を選びます。

「SSL Handshake Failed」エラーを修正するために日付と時刻を調整

この機能を有効にすると、Windowsがタイムゾーンに応じて時刻を自動設定します。手動で同期する場合は、「時計を同期する」の下にある「今すぐ同期」をクリックします。

「SSL Handshake Failed」エラーを修正するために自動時刻設定を有効化

2. SSL証明書がまだ有効か確認する

期限切れまたは無効なSSL証明書は、「SSL Handshake Failed」エラーの直接的な原因です。ハンドシェイクを成功させるには、証明書が有効で、正しいドメイン向けにインストールされていることを確認してください。確認方法は次のとおりです。

任意のブラウザで問題のサイトを開き、アドレスバーのサイト情報アイコンをクリックし、「接続は安全です」を選びます。

Google Chromeの「接続は保護されています」オプション

次に「証明書は有効です」をクリックします。

「SSL Handshake Failed」エラーを修正するために証明書の有効期限を確認

証明書ビューアで「有効期間」セクションを見つけ、有効期限を確認します。

「SSL Handshake Failed」エラーを修正するためにSSLの有効期間を表示

証明書が期限切れの場合は、SSL証明書のプロバイダーで更新してください。証明書のドメイン名がサイトのURLと一致しない場合は、正しいドメイン向けに証明書を再発行する必要があります。

3. ブラウザを更新する

古いブラウザは、現行のTLSバージョンや暗号スイートに対応していないことがあり、古いプロトコルを廃止したサーバーでハンドシェイクの失敗を引き起こします。ブラウザの設定を開いて更新オプションを探し、利用可能な更新をインストールしてから、ブラウザを再起動してください。

「SSL Handshake Failed」エラーを修正するためにアップデートを確認。

サーバーが最近、最小TLS要件を引き上げたのに、クライアントのブラウザがそれに合わせて更新されていなかったケースで、この修正がエラーを解消するのを私たちは確認しています。

4. TLS/SSLプロトコルの対応を確認する

「SSL Handshake Failed」エラーは、ブラウザやサーバーが互換性のないTLSバージョン向けに設定されている場合に発生することがあります。TLS 1.2とTLS 1.3が現行の標準であり、最新のブラウザの多くはこれらを自動でサポートしています。

古いバージョンのFirefoxを使用している場合は、アドレスバーにabout:configと入力し、security.tls.version.minを検索して、値が3(TLS 1.2に対応)になっていることを確認します。

「SSL Handshake Failed」エラーを修正するためにTLS/SSLプロトコルの対応を確認。

自分でサーバーを管理している場合は、ホスティングのコントロールパネルのSSL/TLS設定で、TLS 1.2と1.3が有効になっており、TLS 1.0と1.1が無効になっていることを確認してください。不明な場合は、ホスティング事業者に確認してください。

5. ブラウザの拡張機能を無効にする

セキュリティやプライバシーを扱うブラウザ拡張機能は、暗号化トラフィックを傍受または改変することで、SSL接続を妨げることがあります。拡張機能が問題の原因かどうかを確認するには、次の手順を行います。

ブラウザの設定を開き、拡張機能やアドオンのセクションへ進みます。

ブラウザで拡張機能を見つける。

すべての拡張機能をオフに切り替えて一時的に無効化します。

「SSL Handshake Failed」エラーを修正するために拡張機能を無効化。

問題のサイトにアクセスします。エラーが消えた場合は、拡張機能を一つずつ有効に戻し、それぞれ確認しながら、競合しているものを特定します。HTTPS検査を行うVPN拡張機能や広告ブロッカーが最もよくある原因です。

サーバー側のSSL設定の問題

サーバーを管理していて、5つのクライアント側の修正でエラーが解決しなかった場合、問題はサーバーのTLS設定にある可能性が高いです。最もよくあるサーバー側の原因は次のとおりです。

古いTLSバージョンのみのサポート。 TLS 1.0または1.1のみを受け入れるよう設定されたサーバーは、現行のすべてのブラウザから拒否されます。Apacheでは、SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1で最新のプロトコルを有効にします。Nginxでは、ssl_protocols TLSv1.2 TLSv1.3;を使用します。マネージドホスティングのコントロールパネルの多くには、SSL/TLSセクションにこれを設定するGUIのトグルがあります。

脆弱または互換性のない暗号スイート。 サーバーが非推奨の暗号スイート(RC4、3DES、輸出グレードの暗号)しか提供していない場合、ブラウザはリスト全体を拒否し、明確なエラーが出ないままハンドシェイクが失敗します。サーバーの暗号スイート設定を更新し、現行のAEADスイートを優先させてください。ドメインでQualys SSL Labsのテストを実行すると、サーバーが現在提供している内容と、削除すべき項目の具体的な一覧が得られます。

不完全な証明書チェーン。 SSL証明書は、すべての中間証明書を正しい順序で一緒に提供する必要があります。中間証明書が欠けていると、一部のブラウザは証明書を検証できず、ハンドシェイクが失敗します。ほとんどの証明書プロバイダーは、完全なチェーンを含むバンドルファイルを提供しています。リーフ証明書だけでなく、そのバンドルをインストールしてください。

移行後のリダイレクトの問題。 最近サイトをHTTPからHTTPSに移行した場合、.htaccessやサーバー設定に残った古いリダイレクトルールがループを引き起こし、ブラウザがそれをリダイレクトエラーではなく接続失敗として表示することがあります。HTTPSへの移行後は、必ずリダイレクトルールを見直してください。

SSL Handshake Failedに対するWordPress固有の修正

エラーがWordPressサイトで特に発生する場合は、次の手順で最もよくあるWordPressレベルの原因に対処します。

wp-config.phpでHTTPSを強制する。 SSL証明書をインストールした後も、WordPressが管理画面やログインページをHTTPで配信し続けることがあります。wp-config.php/* That's all, stop editing! */というコメントの前に、次の行を追加します。

define('FORCE_SSL_ADMIN', true);
define('FORCE_SSL_LOGIN', true);

あわせて、設定 > 一般で、WordPressアドレスとサイトアドレスの両方がhttps://を使うように更新してください。

混在コンテンツを解消する。 HTTPSで配信されるページが、画像、スクリプト、スタイルシートをHTTPで読み込むと、ハンドシェイクエラーのように見えるブラウザの警告が発生します。ブラウザの開発者ツール(ネットワークタブでHTTPをフィルタ)を使って混在コンテンツのリソースを見つけ、それらのURLをHTTPSを使うように更新してください。

SSL管理プラグインを一時的に無効化する。 HTTPSリダイレクトを強制するプラグインは、ホスティング事業者のSSL設定と競合することがあります。一つずつ無効化し、それぞれ確認してください。

移行後にデータベース内のサイトURLを更新する。 WP STAGINGを使ってWordPressを移行し、データベースに古いHTTPアドレスが残っている場合、リダイレクトループが起こることがあります。WP-CLIを使って更新します。

wp search-replace 'http://yoursite.com' 'https://yoursite.com' --skip-columns=guid

WP STAGINGでの私たちの経験では、データベースに残ったhttp://の消し忘れは、移行直後にSSL関連のエラーが起こる最もよくある原因の一つです。

どの修正でも解決しない場合の対処法

上記の修正をすべて試してもエラーが続く場合は、次の判断フローに沿って進めてください。

自分が管理するサーバーでのエラー:

  1. ドメインでQualys SSL Labs Server Testを実行し、レポートで指摘されたすべての項目を確認します。
  2. SSL Labsのレポートを添えてホスティング事業者に連絡します。マネージドホストの多くは、あなたにサーバーアクセスを求めることなく、自社側でTLS設定の問題を解決できます。
  3. サーバーに直接アクセスできる場合は、ウェブサーバーのエラーログでSSL_do_handshakeまたはhandshake failureのエントリを検索します。これらは、ネゴシエートできなかったプロトコルバージョンや暗号スイートを具体的に示します。

自分が所有していないサイトでのエラー:

  1. Wi-Fiからモバイルデータに切り替える、VPNを無効にするなど、別のネットワークでサイトを試します。企業のファイアウォールや傍受するプロキシは、証明書を取り除いたり置き換えたりして、あなた側だけでハンドシェイクを失敗させることがあります。
  2. ブラウザのSSL状態をクリアします。Chromeの場合は、設定 > プライバシーとセキュリティ > セキュリティ > 証明書の管理 > SSL状態をクリア、と進みます。
  3. エラーがあなたのネットワークだけに限られている場合は、ネットワーク管理者やIT管理者に連絡してください。プロキシやファイアウォールが原因の可能性が高いです。
  4. 上記のいずれでも解決しない場合は、サイトの所有者にしか対処できないサーバー側の設定の問題があります。あなたのブラウザのバージョン、オペレーティングシステムのバージョン、そしてエラーメッセージの全文を伝えると、所有者が問題を再現するために必要な情報が揃います。

まとめ

SSLハンドシェイクの失敗には、数分ずれたデバイスの時計、更新されていないブラウザ、期限切れの証明書、現行のTLS標準向けに設定されていないサーバーなど、さまざまな原因があります。このガイドの冒頭にある診断表を確認し、順番に修正を適用していけば、誰かに問い合わせることなく、ほとんどのケースを解決できます。

常にバックアップを保ち、セキュリティのベストプラクティスに従ってトラブルを防ぎ、WordPressサイトを安全かつアクセス可能な状態に保ちましょう。

関連記事

Rene Hermenau

著者: Rene Hermenau

著者について: René Hermenau は WP STAGING の創設者です。WordPress のバックアップ、ステージング、移行、データベース処理、安全なデプロイメントワークフローに取り組んでいます。