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をサポートしていない
対策:システムのアップグレードを最優先。やむを得ない場合は、隔離されたネットワークで一時的に対応。
