SSLとは
SSL(Secure Sockets Layer)は、1990年代にNetscape社が開発したインターネット通信を暗号化するプロトコルです。SSL 2.0(1995年)、SSL 3.0(1996年)がリリースされましたが、重大な脆弱性が発見されたため、現在はすべてのバージョンが非推奨です。
現在「SSL証明書」「SSL/TLS」と呼ばれるものは、実際にはTLS(Transport Layer Security)を指しています。歴史的な理由から「SSL」という名称が残っていますが、新規システムでは必ずTLS 1.2以上を使用してください。
SSLの歴史と脆弱性
| バージョン | リリース年 | 脆弱性 | 状態 |
|---|---|---|---|
| SSL 1.0 | 未公開 | 設計段階で重大な欠陥 | ❌ 未リリース |
| SSL 2.0 | 1995 | DROWN攻撃など多数 | ❌ 非推奨 |
| SSL 3.0 | 1996 | POODLE攻撃 | ❌ 非推奨 |
| TLS 1.0 | 1999 | BEAST攻撃 | ⚠️ 非推奨 |
| TLS 1.2 | 2008 | 適切に設定すれば安全 | ✅ 安全 |
| TLS 1.3 | 2018 | 最新・最も安全 | ✅ 推奨 |
AIエンジニアとしての実体験
AIエンジニアとして、古いSSLプロトコルを使用しているレガシーシステムとの接続で問題に遭遇することがあります。PythonのrequestsライブラリでSSL 3.0のみをサポートするサーバーに接続しようとすると、エラーが発生します:
# 古いSSLサーバーへの接続(非推奨だが必要な場合)
import ssl
import urllib3
# 警告:セキュリティリスクがあります
ssl_context = ssl.create_default_context()
ssl_context.minimum_version = ssl.TLSVersion.TLSv1
SSLからTLSへの移行
移行が必要な理由
- POODLE攻撃:SSL 3.0のパディング処理の脆弱性
- DROWN攻撃:SSL 2.0が有効な場合、TLS通信も解読可能
- PCI DSS要件:クレジットカード情報を扱うシステムではTLS 1.2以上が必須
サーバー設定の確認
# サーバーがサポートするプロトコルを確認
nmap --script ssl-enum-ciphers -p 443 example.com
# OpenSSLでSSL 3.0の無効化を確認
openssl s_client -ssl3 -connect example.com:443
# エラーになれば正しく無効化されている
トラブル事例と対策
⚠️ レガシーシステムとの互換性
症状:古いシステムがTLS 1.2をサポートしていない
対策:システムのアップグレードを最優先。やむを得ない場合は、隔離されたネットワークで一時的に対応。
権威あるリソース
関連用語
📝 関連ブログ記事
よくある質問(FAQ)
Q. SSLとは何ですか?現在も使われていますか?
SSL(Secure Sockets Layer)はNetscapeが開発したWeb通信の暗号化プロトコルです。しかし、SSL 2.0・3.0は深刻な脆弱性(POODLE等)が発見され、現在はすべて廃止されています。現在「SSL証明書」と呼ばれるものは実際にはTLS証明書です。SSL/TLSという表記は歴史的経緯からの通称です。
Q. SSLとTLSの違いは何ですか?
SSLはNetscapeが開発した旧プロトコルで、TLS(Transport Layer Security)はIETFが引き継いで改善した後継プロトコルです。SSL 3.0の後継がTLS 1.0で、現在はTLS 1.3が最新かつ推奨バージョンです。TLS 1.0・1.1はPCI DSS v4.0(2022年)でも使用禁止になっており、TLS 1.2以上が必要です。
Q. PCI DSSに準拠するためにSSL/TLSで何が必要ですか?
PCI DSS v4.0(2022年)では、TLS 1.0・1.1・全SSL版の使用が禁止されています。TLS 1.2以上が必須で、TLS 1.3推奨です。また、弱い暗号スイート(RC4等)の無効化、完全前方秘匿性(PFS)の有効化も要件です。SSL Labsのテスト(ssllabs.com/ssltest)でA+評価を取得することが品質の目安です。
Q. 「SSL証明書」と「TLS証明書」はどう違いますか?
技術的に正しくはどちらも「TLS証明書(X.509証明書)」です。「SSL証明書」という呼び名は業界の慣習から残っているだけで、実際にSSL通信をサポートするわけではありません。証明書自体はSSL/TLS両方で共通の形式(X.509)です。現代のシステムでSSLを使うことはなく、TLSで通信しています。
