SSL(Secure Sockets Layer)とTLS(Transport Layer Security)はどちらもインターネット接続を暗号化する暗号プロトコルです。実用的な違い:すべてのSSLバージョンは非推奨で安全ではありません。TLSが実際に今日Webを保護しています。 「SSL証明書」と言うとき、人々はTLSで使用される証明書を意味しています。
何かする必要があるかどうか知りたい方は、何をすべきかにジャンプしてください。
クイック比較
| SSL | TLS | |
|---|---|---|
| 正式名称 | Secure Sockets Layer | Transport Layer Security |
| 作成者 | Netscape(1994年) | IETF(1999年) |
| 最新バージョン | SSL 3.0(1996年) | TLS 1.3(2018年) |
| ステータス | ⛔ すべてのバージョン非推奨 | ✅ TLS 1.2と1.3が現役 |
| 既知の脆弱性 | POODLE、BEAST、CRIME、DROWN | なし(TLS 1.3)、緩和可能な少数(TLS 1.2) |
| パフォーマンス | 遅い(2回以上のラウンドトリップ) | TLS 1.3:1-RTTハンドシェイク |
| 前方秘匿性 | オプション(ほとんど使用されない) | TLS 1.3で必須 |
| 暗号スイート | 弱い(RC4、DES、輸出暗号) | 強い(AES-GCM、ChaCha20) |
| メッセージ認証 | MD5/SHA-1でMAC | SHA-256以上でHMAC |
| ブラウザサポート | すべてのブラウザから削除 | ユニバーサル |
完全なバージョン履歴
| 年 | プロトコル | 何が起きたか |
|---|---|---|
| 1994 | SSL 1.0 | Netscapeが設計。未リリース — リリース前に内部で深刻な欠陥が見つかった。 |
| 1995 | SSL 2.0 | 最初の公開リリース。初期のHTTPSサイトで使用。すぐに重大な脆弱性が見つかった(弱いMAC、切り捨て攻撃に脆弱)。 |
| 1996 | SSL 3.0 | Paul Kocher + Netscapeによる完全な再設計。18年間広く展開。2014年10月のPOODLE攻撃で破られた。2015年6月にIETFが非推奨(RFC 7568)。 |
| 1999 | TLS 1.0 | SSL 3.0を基にしたIETF標準化プロトコル。わずかな改善。2011年のBEAST攻撃に脆弱。2021年3月に非推奨(RFC 8996)。 |
| 2006 | TLS 1.1 | BEAST脆弱性を修正。CBC暗号に明示的なIVを追加。TLS 1.0とともに2021年3月に非推奨。 |
| 2008 | TLS 1.2 | メジャーアップグレード。AEAD暗号(AES-GCM)を追加、ハンドシェイクからMD5/SHA-1を削除、署名アルゴリズムネゴシエーションを追加。正しく設定すればまだ広く使用されており安全。 |
| 2018 | TLS 1.3 | 現在の標準(RFC 8446)。すべてのレガシーアルゴリズムを削除、1-RTTハンドシェイク、前方秘匿性必須、暗号化されたハンドシェイク。根本的な再設計。 |
まだ「SSL」と言う理由
「SSL」という用語は最初に来たため定着しました。Netscapeが1994年に造語し、1999年にTLSが置き換えた頃には、「SSL」は既に一般的な語彙でした。今日:
- 「SSL証明書」 = TLSで使用される証明書(SSLではない)
- 「SSL/TLS」 = 両方の用語をカバーする表現
- 製品名の「SSL」 = マーケティング、実際のプロトコルではない
- 「無料SSL」 = 無料のTLS証明書
GetHTTPS、Certbot、Let’s Encrypt、ZeroSSL — すべてがTLS接続用の証明書を発行していますが、名前やマーケティングでは「SSL」と言っています。証明書自体はX.509形式であり、どのTLSバージョンでも動作します。
何をすべきか
ほとんどのWebサイト運営者にとって:おそらく何もする必要はありません。 以下の場合:
- 有効なSSL/TLS証明書がある(Let’s Encryptまたは任意の認証局から)
- 合理的に最新のWebサーバーを使用している(Nginx 1.13以上、Apache 2.4.37以上、IIS 10)
- 設定でTLS 1.2/1.3を明示的に無効にしていない
…ならば既にTLSを使用しています。「SSL証明書」はTLS 1.2と1.3で自動的に動作します — 同じ.pemファイルが両方のプロトコルに対応します。
確認すべきこと1つ: TLS 1.0と1.1がサーバーで無効になっていることを確認してください。2021年以降非推奨です。
Nginx:
ssl_protocols TLSv1.2 TLSv1.3;
Apache:
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
現在のTLSバージョンを確認する方法:
# ネゴシエートされたTLSバージョンを表示
echo | openssl s_client -connect yourdomain.com:443 -servername yourdomain.com 2>/dev/null | grep "Protocol"
# 期待値: TLSv1.2 or TLSv1.3
オンラインツール: SSL Labs Server Testでサーバーがサポートするプロトコルを正確に確認できます。
よくある質問
TLSとSSLで異なる証明書が必要ですか?
いいえ。同じ証明書がどのTLSバージョンでも動作します。「SSL証明書」と「TLS証明書」は同じX.509ファイルを指します。GetHTTPSから証明書を取得すると、TLS 1.2と1.3で動作します — 特別な設定は不要です。
TLS 1.2はまだ安全ですか?
はい。AEAD暗号スイート(AES-GCMまたはChaCha20-Poly1305)を使用したTLS 1.2は本番使用に安全です。TLS 1.3の方が優れています(高速、シンプル、前方秘匿性を強制)が、TLS 1.2は安全なままです。推奨設定はTLSv1.2 TLSv1.3です。
TLS 1.3のみを強制すべきですか?
まだです。約38%のサイトがTLS 1.3をサポートしておらず、一部のクライアント(企業環境、組み込みデバイス、Java 8)はTLS 1.2のみをサポートしている場合があります。今日TLS 1.2を廃止すると一部の正当なユーザーをロックアウトします。両方をサポートしてください。
「SSL証明書」は動作しなくなりますか?
いいえ。名前にもかかわらず、「SSL証明書」はどのTLSバージョンでも動作するX.509証明書です。名前はレガシーの遺物です。認証局が信頼され、証明書が有効期限切れでない限り、証明書は動作し続けます。
HTTPSはSSLまたはTLSと同じですか?
HTTPSはHTTP + TLSです。HTTP接続にTLS暗号化を適用した結果です。https://example.comにアクセスすると、ブラウザはTLSプロトコルを使用してHTTPトラフィックを暗号化します。HTTPSはTLSとは別のプロトコルではありません — TLSトンネル内で動作するHTTPです。