WebサイトのURLが https:// で始まっているサイトは、SSL/TLS証明書によって通信が暗号化されています。現在はHTTPS化がSEO・セキュリティ・信頼性の面でデファクトスタンダードとなっており、HTTP のままのサイトはブラウザに「保護されていない通信」として警告が表示されます。
SSL証明書の仕組み
SSL証明書には主に2つの役割があります。
- 暗号化: ブラウザとサーバー間の通信を暗号化し、第三者による傍受を防ぐ
- 認証: サーバーが正規のものであることを証明し、なりすましを防ぐ
証明書には「認証局(CA)」が電子署名を付与します。ブラウザはあらかじめ信頼する認証局のリストを持っており、そのリストに含まれる認証局が発行した証明書のみを有効と判断します。
証明書の種類
SSL証明書は認証の厳格さによって3種類に分かれており、用途に応じた選択が重要です。
| 種類 | 認証レベル | 特徴 |
|---|---|---|
| DV(ドメイン認証) | ドメイン所有確認のみ | 取得が簡単・無料(Let's Encrypt等) |
| OV(組織認証) | 法人実在確認 | 企業情報が証明書に記載される |
| EV(拡張認証) | 厳格な法人審査 | かつてはアドレスバーが緑色に |
個人サイトやブログ・中小企業サイトではDV証明書で十分です。Let's Encryptの普及により、無料でSSL証明書を取得できるようになりました。
有効期限と更新
SSL証明書には有効期限があります(現在は最大397日)。期限切れになるとブラウザにエラーが表示され、サイトにアクセスできなくなります。
多くのサーバーでは自動更新が設定できますが、設定漏れや更新失敗で証明書が切れるケースは少なくありません。定期的な監視が重要です。
HSTSとは
ブラウザにHTTPS通信を記憶させることで、SSL剥奪攻撃を防ぐセキュリティ機能です。
HSTS(HTTP Strict Transport Security) は、ブラウザに「このドメインは必ずHTTPSで通信する」と記憶させる仕組みです。一度HSTSを受信したブラウザはHTTPへのリクエストを自動的にHTTPSに変換するため、SSL剥奪攻撃を防げます。
.htaccess での設定例:
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
証明書エラーの種類と原因
ブラウザに「この接続ではプライバシーが保護されません」などの警告が表示される場合、SSL証明書に何らかの問題があります。エラーコードで原因を特定できます。
| エラーコード | 意味 | 主な原因 |
|---|---|---|
NET::ERR_CERT_EXPIRED | 証明書の期限切れ | 自動更新の失敗・更新忘れ |
NET::ERR_CERT_AUTHORITY_INVALID | 認証局が信頼されていない | 自己署名証明書・中間証明書の未設定 |
NET::ERR_CERT_COMMON_NAME_INVALID | ドメイン名が一致しない | 証明書のドメインと実際のURLが違う |
NET::ERR_SSL_PROTOCOL_ERROR | SSLプロトコルエラー | TLSバージョンの非対応・設定ミス |
SSL_ERROR_RX_RECORD_TOO_LONG | HTTPとHTTPSの混在 | HTTPSポートにHTTPでアクセスしている |
中間証明書の設定漏れ
「自分のPCでは表示できるが、他の環境ではエラーになる」という場合は中間証明書(チェーン証明書)の設定漏れが疑われます。サーバー設定ファイルに中間証明書を連結して設定する必要があります。
Mixed content(混在コンテンツ)
HTTPSページ内にHTTPリソース(画像・CSS・JavaScriptなど)が含まれている状態をMixed content(混在コンテンツ)と呼びます。
- Passive mixed content: 画像・動画・音声。ブラウザは警告するが読み込む
- Active mixed content: JavaScript・CSS・iframe。ブラウザがブロックする
HTTPS化した直後に画像が表示されない・レイアウトが崩れる場合は、コンテンツ内のHTTP参照をhttps://または相対パス(//始まり)に書き換える必要があります。
WordPressの場合、プラグイン(Really Simple SSL等)か、データベース内のURL一括置換で対応できます。
Let's Encryptの自動更新
Let's Encrypt(無料SSL)の証明書の有効期限は90日です。更新忘れを防ぐため、certbotなどのツールで自動更新を設定するのが標準です。
# cronで自動更新を登録する例(1日2回チェック)
0 0,12 * * * certbot renew --quiet
多くのレンタルサーバーはコントロールパネルから自動更新を有効にできます。自動更新が設定済みかどうかは定期的に確認する習慣をつけておくと安全です。
HTTPSリダイレクトの設定
HTTP→HTTPSへのリダイレクトは.htaccessで設定します。
# HTTP → HTTPS 強制リダイレクト
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
このリダイレクトを設定しないと、HTTPでアクセスしたユーザーに警告が表示されます。SSLを取得しただけでなく、リダイレクトまで設定して初めてHTTPS化が完了します。
証明書の状態確認
SSL証明書が正しく設定されているか、有効期限はいつかはSSL証明書・HTTPS設定確認ツールで即座に確認できます。HTTPSリダイレクト・www統一・HSTSの設定状況もあわせてチェックできます。