TLSとは
TLS(Transport Layer Security)は、インターネットの通信を暗号化し、盗聴、改ざん、なりすましから守る通信プロトコルです。SSLの後継にあたります。URLが https:// で始まるのは、HTTPの通信をTLSの上で行っているという意味です。
TLSの設定が必要な理由
TLSには版があり、古い版は攻撃手法が知られています。サーバーが古い版を受け付けたままだと、通信相手によっては、弱い方式で暗号化されます。SSL 3.0には、通信内容の一部が取り出される「POODLE」と呼ばれる攻撃が2014年に公表されました。
クレジットカード情報を扱うサイトでは、業界基準のPCI DSSも、古い版の無効化を求めています。
TLSの仕組み
- ブラウザが、対応するTLSの版と暗号スイートの一覧をサーバーに送る。
- サーバーが、使う版と暗号スイートを選び、証明書を送る。
- 双方が鍵交換で、その通信だけの共通鍵を作る。
- 以降の通信は、共通鍵で暗号化される。
| 版 | 状況 |
|---|---|
| SSL 2.0、SSL 3.0 | 脆弱性が知られており、使用禁止 |
| TLS 1.0、1.1 | 2021年にRFC 8996で非推奨。主要ブラウザも対応を終了 |
| TLS 1.2 | 現在も広く使われる。設定次第で安全に使える |
| TLS 1.3 | 最新の版(RFC 8446)。弱い方式が仕様から取り除かれ、接続も速い |
TLSの確認方法
サーバーが特定の版を受け付けるかは、版を指定して接続して調べます。
openssl s_client -connect example.com:443 -servername example.com -tls1_2 </dev/null 2>/dev/null | grep -E 'Protocol|Cipher'
openssl s_client -connect example.com:443 -servername example.com -tls1_3 </dev/null 2>/dev/null | grep -E 'Protocol|Cipher'
「Cipher is (NONE)」と出れば、その版は受け付けていません。版と暗号スイートを一覧するには、nmap --script ssl-enum-ciphers -p 443 example.com も使えます。自分のサイトにだけ実行します。
お使いのOpenSSLが古い版での接続自体を無効にしている場合は、結果が「拒否」と区別できません。
TLSの設定例
TLS 1.2と1.3だけを許可する例です。暗号スイートの並びは、手で書かず、MozillaのSSL Configuration Generatorの出力を使うのが確実です。
nginxの例です。
ssl_protocols TLSv1.2 TLSv1.3;
Apacheの例です。
SSLProtocol -all +TLSv1.2 +TLSv1.3
WordPress側には、TLSの設定はありません。レンタルサーバーでは、サーバーの管理画面でTLSの最低バージョンを選ぶのが一般的です。
よくある間違いと注意点
- 「古い端末のために」とTLS 1.0や1.1を残す前に、実際の利用者の割合をログで確かめます。nginxでは変数
$ssl_protocol、Apacheでは%{SSL_PROTOCOL}xでログに残せます。 - 証明書の期限切れや名前の不一致は、TLSの版ではなく証明書の問題です。
- CDNやロードバランサーを使っている場合、TLSを終端する側の設定が、利用者から見える設定になります。
- HTTPのままの入口が残っていると、TLSを設定しても意味がありません。HTTPからHTTPSへの転送も確認します。
Webサイト セキュリティチェッカーで確認する
Webサイト セキュリティチェッカーは、受け付けているTLSの版、弱い暗号スイート、HTTPからHTTPSへの転送の有無を診断します。TLS 1.3に未対応の場合も、参考情報として示します。
関連用語
関連する用語
サイトの設定を無料で確認する
サイトのURLを入力するだけで、TLS などの設定状況を診断できます。Webサイト セキュリティチェッカー「Security Checker X」は、登録なしで使えます。









