Overview
SSL(Secure Sockets Layer)およびTLS(Transport Layer Security)は、インターネット上の通信を暗号化し、データの盗聴・改ざん・なりすましを防止するためのプロトコルです。WebブラウザでURLが「https://」で始まるサイトにアクセスする際、SSL/TLSによる暗号化通信が行われています。
SSLはNetscape Communications社が1990年代に開発したプロトコルで、SSL 3.0まで進化しましたが、深刻な脆弱性(POODLE攻撃等)が発見されたため、現在は非推奨です。SSLの後継として標準化されたのがTLSであり、現在はTLS 1.2およびTLS 1.3が広く使用されています。ただし、慣用的に「SSL」という名称が今でも広く使われており、「SSL証明書」「SSL化」といった表現が一般的です。
SSL/TLSは、Webブラウジングだけでなく、メール通信(SMTPS、IMAPS)、VPN、VoIP、IoTデバイス間通信など、インターネット上のあらゆる通信の安全性を支える基盤技術です。2018年以降、主要ブラウザがHTTPSでないサイトに対して「保護されていない通信」という警告を表示するようになり、Webサイトの常時SSL化が事実上の標準となっています。
Details
SSL/TLSハンドシェイクの仕組み
SSL/TLS通信は、データの送受信に先立って「ハンドシェイク」と呼ばれる手順を行います。この過程で、サーバーの認証、暗号アルゴリズムの合意、セッション鍵の生成が行われます。
- ClientHello:クライアントが対応するTLSバージョン、暗号スイート一覧、ランダム値をサーバーに送信
- ServerHello:サーバーが使用するTLSバージョン、暗号スイート、ランダム値を応答
- 証明書の送信:サーバーがSSL/TLS証明書をクライアントに提示
- 鍵交換:公開鍵暗号を用いてセッション鍵(共通鍵)を安全に共有
- 暗号化通信の開始:合意したセッション鍵を使って対称暗号化による高速な通信を開始
SSL/TLS証明書の種類
- DV(Domain Validation)証明書:ドメインの所有権のみを検証。自動発行が可能で、Let's Encryptなどで無料取得できる。
- OV(Organization Validation)証明書:ドメイン所有権に加え、組織の実在性を認証局が審査。企業サイトで一般的。
- EV(Extended Validation)証明書:最も厳格な審査を経て発行される証明書。以前はブラウザのアドレスバーが緑色に表示されたが、現在は廃止されている。
- ワイルドカード証明書:「*.example.com」のように、特定ドメインのすべてのサブドメインに対応する証明書。
TLS 1.3の主な改善点
2018年に策定されたTLS 1.3は、以前のバージョンから大幅に改善されています。
- ハンドシェイクの高速化:1-RTT(1往復)でハンドシェイクが完了(TLS 1.2は2-RTT)。0-RTTモードも対応。
- 脆弱な暗号の廃止:RC4、DES、3DES、MD5、SHA-1など脆弱な暗号アルゴリズムをすべて排除。
- 前方秘匿性(Forward Secrecy)の必須化:セッションごとに異なる鍵を使用し、秘密鍵が漏洩しても過去の通信は復号できない。
- ハンドシェイクの暗号化:サーバー証明書を含むハンドシェイクメッセージの大部分が暗号化される。
Security Measures
- 01TLS 1.2以上を使用する:SSL 3.0、TLS 1.0、TLS 1.1は深刻な脆弱性があるため無効化する。可能であればTLS 1.3の導入を推奨。
- 02安全な暗号スイートのみを有効化:AES-GCM、ChaCha20-Poly1305などの強力な暗号スイートのみを有効にし、RC4、DES、CBC モードの暗号スイートを無効化する。
- 03証明書の適切な管理:証明書の有効期限を監視し、自動更新の仕組みを導入する。ACME(Automated Certificate Management Environment)プロトコルの活用が推奨。
- 04HSTS(HTTP Strict Transport Security)の設定:ブラウザに対してHTTPS接続のみを強制するHTTPヘッダーを設定し、HTTPからのダウングレード攻撃を防止する。
- 05証明書の透明性(Certificate Transparency)の活用:CT Logを監視し、自社ドメインに対して不正に発行された証明書を早期に検知する。
- 06定期的なSSL/TLS設定の監査:SSL Labs Server Testなどのツールを使用して、サーバーのSSL/TLS設定を定期的に評価し、脆弱な設定を発見・修正する。
Incidents
📋 Heartbleed脆弱性(2014年)
2014年4月、OpenSSLライブラリにHeartbleed(CVE-2014-0160)と呼ばれる重大な脆弱性が発見されました。TLSのHeartbeat拡張機能の実装バグにより、サーバーのメモリ内容(秘密鍵、ユーザーのパスワード、セッション情報など)が外部から読み取れる状態でした。全世界のWebサーバーの約17%(約50万台)が影響を受け、インターネット史上最大級のセキュリティ問題となりました。
📋 DigiNotar認証局のハッキング(2011年)
2011年、オランダの認証局DigiNotarがハッキングされ、google.comを含む500以上のドメインに対して不正なSSL証明書が発行されました。この不正証明書はイランの政府関係者によるGmailユーザーの通信傍受に使用されたとされています。この事件を契機にCertificate Transparency(証明書の透明性)の仕組みが整備されました。
📋 POODLE攻撃(2014年)
2014年10月、SSL 3.0にPOODLE(Padding Oracle On Downgraded Legacy Encryption)攻撃の脆弱性(CVE-2014-3566)が発見されました。攻撃者がTLS接続をSSL 3.0にダウングレードさせることで、暗号化された通信内容を解読できる問題でした。この発見により、SSL 3.0は完全に廃止され、TLSへの移行が加速しました。