基礎 | SSL/TLS
- 対応するOSIの階層
- 役割
- 必要ファイル
- 証明書作成手順
- SSL/TLS通信の流れ
- 認証局の分類
- OpenSSL
- 暗号化方式およびハッシュアルゴリズム
- ワイルドカード証明書
- AWSへの導入
- 英語表現・用語比較
対応するOSIの階層
OSI参照モデルとTCP/IPモデルでの位置づけは以下の通りです。
- OSI参照モデル: セッション層(第5層) に分類(トランスポート層のTCPとアプリケーション層の間に位置)
- TCP/IPモデル: セッション層が存在しないため、アプリケーション層 に分類
HTTPをTLSで保護したプロトコルが HTTPS、FTPをTLSで保護したプロトコルが FTPS です。
役割
- サーバー(およびクライアント)の認証: 通信相手が本物であることを証明する
- 通信の暗号化: 第三者による盗聴を防ぐ
- 改ざんの検出: 通信データが途中で変更されていないことを保証する(データ完全性)
必要ファイル
- 秘密鍵(Private Key /
.key,.pem) サーバー側で厳重に保管する鍵。データの復号やデジタル署名の生成に使用。 - 証明書署名要求(CSR: Certificate Signing Request /
.csr) 認証局(CA)へ証明書の発行を申請するためのデータ。公開鍵や組織情報(ディスティンギッシュネーム)が含まれる。 - SSL/TLS証明書(Server Certificate /
.crt,.pem) 認証局のデジタル署名が施された証明書。公開鍵を内包する。 - 中間証明書(Intermediate Certificate) ルート認証局とサーバー証明書の間を鎖(証明書チェーン)として繋ぐ証明書。現在のWebサービスでは中間認証局から証明書が発行されるのが一般的であるため、導入が必須。
秘密鍵からSSL/TLS証明書を作成する手順
- サーバーで秘密鍵を作成
openssl genrsa -out server.key 2048 - 秘密鍵からCSR(証明書署名要求)を作成
openssl req -new -key server.key -out server.csr※ CSRには公開鍵が含まれますが、秘密鍵自体は含まれません。
- 認証局(CA)へCSRを提出し、デジタル署名を受ける
- 認証局から発行された証明書(
.crt)を受け取る - Webサーバー(Apache / Nginx 等)に秘密鍵・証明書・中間証明書を設定する
※ テスト用証明書(オレオレ証明書)を自己署名で作成する場合:
openssl x509 -req -signkey server.key -in server.csr -out server.crt -days 365
SSL/TLS通信の流れ
- ハンドシェイク(鍵交換・認証):
- クライアントがサーバーに接続を要求。
- サーバーはSSL/TLS証明書を送信。
- クライアントは端末に保持している「信頼されたルート認証局」の公開鍵を使って、証明書の正当性(署名およびチェーン)を検証。
- 鍵交換(Diffie-Hellman等) を行い、その通信セッション限定の「共通鍵」を安全に共有する。
- データ通信(暗号化通信):
- ハンドシェイクで共有した「共通鍵」を用いて高速に通信データを暗号化・復号する。
認証局の分類
- パブリック認証局(公開認証局): ブラウザやOSにデフォルトでルート証明書が組み込まれている信頼された第三者機関(Let’s Encrypt, DigiCert等)。
- プライベート認証局(自己認証局): 社内Webシステムや開発環境などで独自に構築・運用する認証局。
OpenSSL
SSL/TLSプロトコルの実装および、暗号化・鍵作成・証明書管理などを行うための標準的なオープンソース・ツールキット。
暗号化方式およびハッシュアルゴリズム
現代のSSL/TLS(特にTLS 1.2 / 1.3)では、目的ごとに異なる暗号技術を組み合わせて利用します。
RSA / ECC
- RSA: 素因数分解の困難性を利用した公開鍵暗号方式。主にサーバーの「認証(署名)」に使用される。
- ECC(楕円曲線暗号): RSAより短い鍵長で同等以上の安全性を実現できる方式(ECDSAなど)。
HMAC / SHA-256
- HMAC (Hash-based Message Authentication Code): 秘密鍵とハッシュ関数を組み合わせてデータの改ざんを検知する仕組み。
- SHA-256: Cryptographic Hash(暗号学的ハッシュ関数)の一種。HMACの内部アルゴリズムやデジタル署名の生成に使われる。
AES
- AES (Advanced Encryption Standard): 米国標準規格の共通鍵暗号方式。実際のデータ通信の暗号化に使用される(現在では認証付き暗号である AES-GCM が標準的)。
ワイルドカード証明書
- 1枚の証明書で同一ドメインの任意のサブドメイン(
*.example.com)を保護できる証明書(例:app.example.com,api.example.com)。 - 注意: 単体ドメイン(
example.com)とwww.example.comの両方を保護したいだけであれば、ワイルドカード証明書を使わなくても SANs(Subject Alternative Names) 機能により1枚の通常証明書で対応可能。
AWSへの導入
AWS環境でSSL/TLS証明書を利用する場合、AWS Certificate Manager (ACM) を使うことで証明書の無料発行および自動更新が可能。自前で取得した Let’s Encrypt 等の証明書を ACM にインポートして利用することもできる。
英語表現・用語比較
- Certificate: (名詞)証明書 ※SSL証明書は通常 Certificate と呼ぶ
- Certification: (名詞)証明、認証行為、または資格認定(Qualification)
- Certificate Authority (CA): 認証局
- Authentication: 認証(本人であるかを確認すること)
- Authorization: 認可(権限を与えること)
- Confidentiality: 機密性(許可された者だけが情報にアクセスできること)
- Confidential: (形容詞)機密の、秘密の
- Cipher / Cryptography:
- Cipher: 暗号記号、暗号化アルゴリズムそのもの(例: Cipher Suite)
- Cryptography: 暗号学、暗号技術全般