【ITニュース解説】ERR_SSL_PROTOCOL_ERROR: what it means and how to fix it
2026年10月28日に「Dev.to」が公開したITニュース「ERR_SSL_PROTOCOL_ERROR: what it means and how to fix it」について初心者にもわかりやすく解説しています。
ITニュース概要
ERR_SSL_PROTOCOL_ERRORは、Webサイトと安全な接続を確立する「ハンドシェイク」に失敗したエラーだ。他のサイトが見れるかで原因を切り分け、自分のPCなら時計設定やセキュリティソフトを確認。サイト側が原因なら、証明書の設定、TLSバージョンの古さ、ポート443の開放状況などを確認する必要がある。
ITニュース解説
Webサイトにアクセスした際、「このサイトは安全な接続を提供できません」というメッセージとともに「ERR_SSL_PROTOCOL_ERROR」が表示され、ページがまったく表示されないことがある。これは、Webサイトとあなたのブラウザの間でセキュアな接続を確立するための最初の段階で問題が発生したことを示すエラーだ。
HTTPS接続では、ブラウザとWebサーバーが「ハンドシェイク」と呼ばれる最初のやり取りを行う。このハンドシェイクで、どのような暗号化方式(TLSバージョンや暗号スイート)を使うかを取り決め、サーバーが自身の身元を証明するための「証明書」をブラウザに提示する。これらの手順がすべて成功して初めて、Webページのデータが実際に送られてくる。ERR_SSL_PROTOCOL_ERRORは、この最初のハンドシェイクがうまく行かなかったことを意味している。
このエラーが出たら、まず問題が自分のコンピューター側にあるのか、それともアクセスしようとしているWebサイト側にあるのかを切り分ける。他のいくつかのHTTPSサイト(例えば、大手検索エンジンのサイトなど)にアクセスしてみてほしい。もしそれらのサイトが正常に表示されるのであれば、問題はアクセスしようとした特定のサイトにある可能性が高い。あなたのコンピューターの設定をいくらいじっても解決しないだろう。しかし、もし他のHTTPSサイトもすべて同じようにエラーになるのであれば、問題はあなたのコンピューターやネットワーク環境にあると考えて良い。
Chromeブラウザで表示されるこのエラーは、内部的にはエラーコード「-107」として定義され、画面上では「(サイト名)が無効な応答を送信しました」と表示されることが多い。これと似たエラーに「ERR_SSL_VERSION_OR_CIPHER_MISMATCH」がある。これは「クライアントとサーバーが共通のSSLプロトコルバージョンまたは暗号スイートをサポートしていません」と表示され、サーバーが古いTLSバージョンしか提供していないことが原因であることがほとんどだ。SafariやFirefoxといった他のブラウザでも同様の接続失敗は発生するが、根底にあるハンドシェイクの失敗という原因は共通している。
もしあなたがサイト訪問者としてこのエラーに遭遇した場合、以下の対処法を試す。
まず、コンピューターのシステム時計が正確であることを確認する。Webサイトの証明書には有効期間が設定されており、コンピューターの時計が大きくずれていると、たとえ有効な証明書であってもシステムが不正なものと判断してしまうことがある。特に長期間電源を切っていたコンピューターでは、自動時刻設定を有効にしておくことが重要だ。
次に、アンチウイルスソフトが提供する「HTTPSスキャン」といった機能を一時的に無効にしてみる。多くのセキュリティソフトは、セキュリティを強化するために暗号化された通信の内容を検査することがあり、この検査がうまく機能しないとブラウザとサーバー間のハンドシェイクを妨害し、エラーを引き起こすことがある。一時的に無効にしてサイトにアクセスできるか確認し、もし解決すればそのセキュリティソフトの設定が原因である可能性が高い。
三つ目の方法は、異なるネットワークを試すことだ。職場のWi-Fi、VPN接続、ホテルなどの認証が必要なWi-Fiといったネットワーク環境によっては、意図せず通信を傍受したり改変したりすることがある。スマートフォンのモバイルデータ通信を使ってサイトにアクセスできるか試すことで、問題が現在のネットワークにあるのかどうかを簡単に判別できる。
最後に、別のWebブラウザを試すことも有効だ。もしChromeでエラーが発生するがFirefoxではサイトが正常に表示されるといった場合、問題はChrome固有の設定やプロファイルにあると考えられる。その場合、Chromeの新しいプロファイルを作成したり、設定をリセットしたりすることで解決することが多い。
このERR_SSL_PROTOCOL_ERRORが発生した場合、証明書の警告が表示されるような「高度な設定」から接続を続行する、という選択肢は表示されない。なぜなら、接続自体がまだ確立されていないため、先に進むことができないからだ。もし、URLの頭にhttp://と入力すればサイトが表示される場合、サーバー自体は稼働しており、HTTPSの設定に問題があることがわかる。ただし、HTTP接続は暗号化されていないため、個人情報やパスワードなどを入力することは絶対に避けるべきだ。
もしあなたがWebサイトの管理者で、自身のサイトでこのエラーが発生している場合、その原因はサーバー側にあることがほとんどだ。主な原因は以下の五つだ。
最初の原因は、指定されたホスト名に対する証明書がサーバーに存在しないケースだ。これはサイトを新しいサーバーに移行した際に頻繁に発生する。証明書はファイルのコピーと一緒に自動的に移動するものではないため、新しいサーバーにはあなたのドメインに対応する証明書がない状態となり、ハンドシェイクが失敗する。一つのIPアドレスで複数のサイトを運用している場合、ブラウザは「SNI(Server Name Indication)」という仕組みを使って、どのホスト名のサイトにアクセスしたいかをサーバーに伝える。もしサーバーにそのホスト名に一致する証明書がなければ、ハンドシェイクは失敗する。openssl s_client -connect yourdomain.com:443 -servername yourdomain.comというコマンドで、サーバーが提示している証明書があなたのドメインと一致しているか確認できる。
二つ目の原因は、サーバーが古いTLSバージョンしかサポートしていないことだ。TLS 1.0と1.1はセキュリティ上の理由から非推奨となり、主要なブラウザはこれらの古いバージョンをサポートしなくなった。そのため、サーバーが古いバージョンしか提供していないとハンドシェイクは失敗する。多くはこの時「ERR_SSL_VERSION_OR_CIPHER_MISMATCH」エラーが表示される。NginxやApacheの設定ファイルにあるssl_protocolsといった設定を確認し、TLSv1.2 TLSv1.3のように最新のバージョンを指定するように更新すべきだ。
三つ目の原因として、ポート443でHTTPSをサービスしているものがそもそもない、という非常に単純なケースも存在する。Webサーバーがポート80(HTTP)でしかリッスンしていない、ファイアウォールがポート443からの通信をブロックしている、あるいはHTTPSサービスがクラッシュしているなどが考えられる。curl -vI https://yourdomain.comというコマンドで確認できる。まれに、ポート443で本来HTTPSを提供すべきなのに、誤って平文のHTTPを提供しているケースもある。これはWebサーバーの設定でlisten 443にsslフラグが欠けている場合に起こる。
四つ目の原因は、CloudflareなどのCDNサービスを使用している場合に、そのSSLモードがオリジンサーバー(あなたの実際のサーバー)の設定と一致していないことだ。Cloudflareは「Full」「Full (strict)」「Flexible」といったSSLモードを提供する。サイト移行後などに、CloudflareのSSLモードが新しいオリジンサーバーの状況と合っていないとエラーになることがある。Cloudflareのモードを変更する前に、Cloudflareを介さずに直接オリジンサーバーのHTTPSが機能しているか確認すると良い。
五つ目の原因は、不完全な「証明書チェーン」だ。Webサイトの証明書は、通常、ブラウザが信頼するルート証明書によって署名された中間証明書によって署名されている。もしこの中間証明書がサーバーから適切に提供されなかったり、順番が間違っていたりすると、一部のクライアントは証明書を検証できず、接続が失敗する。Nginxの場合、プライマリ証明書の後に中間証明書を記述し、それらを一つのファイルにまとめておく必要がある。openssl s_client -connect yourdomain.com:443 -servername yourdomain.com -showcertsというコマンドで、サーバーが送信する証明書チェーン全体を確認できる。
サイト移行直後にこのエラーが発生した場合、ほとんどの場合、原因1の「ホスト名に対する証明書がない」ケースだと考えられる。新しいサーバーにはまだ有効な証明書がないのが普通だが、多くの認証局は証明書を発行する前に、ドメインがそのサーバーを指していることを確認したがるため、DNSの変更と証明書の発行の間にジレンマが生じやすい。DNSベースの検証を利用して先に証明書を発行するか、またはDNS Previewerのようなツールを使って、DNS変更前に新しいサーバーのサイトが正常に機能するかをプレビューし、証明書の問題を解決してからDNSを切り替えるといった方法がある。
このエラーと混同されやすい他のエラーもある。「502 Bad Gateway」は、ハンドシェイクは成功したがWebサーバーの背後にあるアプリケーションが応答しなかった場合に発生する。また、「データベース接続エラー」は、サイト内部のコンポーネントの問題で発生する。これらはすべて異なる層での問題であり、それぞれ異なる解決策が必要となる。
エラーに遭遇した際の推奨される確認順序は、まず他のHTTPSサイトが正常に表示されるか確認することだ。表示されない場合は、あなたのコンピューターの時刻、アンチウイルスソフトのHTTPSスキャン機能、そしてネットワーク環境を順に確認する。もしサイト管理者であれば、openssl s_clientコマンドでサーバーが提示する証明書を確認し、ホスト名が正しいか、または証明書が存在するかをチェックする。証明書が正しくない、あるいは存在しない場合は、適切な証明書を発行し設定する。何もリッスンしていない場合は、Webサーバーが起動しているか、ポート443がSSL設定でリッスンしているか、ファイアウォールが443を許可しているかを確認する。「ERR_SSL_VERSION_OR_CIPHER_MISMATCH」が表示される場合は、TLSバージョンを1.2および1.3に引き上げる。Cloudflareを使用している場合は、そのSSLモードがオリジンサーバーの設定と合っているかを確認する。ほとんどの場合、要求されたホスト名に対応する証明書がないことが原因であり、解決は比較的容易である。