SSL/TLSの種類
安全とされているのは、TLSv1.2とTLSv1.3の2種類になる。
SSLv3 … 脆弱性あり(2014年10月14日 SSL 3.0 の脆弱性「POODLE」が公表される)
TLSv1 … 脆弱性あり(2022/02/01 Chrome 98 よりTLS1.0/1.1 が無効化される)
TLSv1.2 … 安全
TLSv1.3 … 安全
参考:TLS暗号設定ガイドライン~安全なウェブサイトのために(暗号設定対策編)~https://www.ipa.go.jp/security/vuln/ssl_crypt_config.html
SSL/TLSハンドシェイク
TLS通信の際、以下のやり取りで、暗号スイートを決定する。
Client:アクセスするパソコンやスマートフォン等に相当
Server:ウェブサーバー
Client(パソコン、スマートフォン等) Server(ウェブサーバー)
ClientHello -------->
クライアントが最初にサーバーに接続
使用可能な暗号スイートをすべて提示
ServerHello
サーバーが暗号スイートを1つに決定
Certificate*
TLSサーバー証明書
ServerKeyExchange*
鍵交換パラメーター
CertificateRequest*
クライアント認証利用時は証明書要求
<-------- ServerHelloDone
サーバーからの送信完了
Certificate*
クライアント認証時はクライアント認証証明書
ClientKeyExchange
鍵交換パラメーター
CertificateVerify*
クライアント認証証明書の検証
[ChangeCipherSpec]
この後に続くデータは保護されていると通知
Finished -------->
鍵交換と認証処理が成功したことを確認
[ChangeCipherSpec]
この後に続くデータは保護されていると通知
<-------- Finished
鍵交換と認証処理が成功したことを確認
Application Data <-------> Application Data
保護された通信のやりとり 保護された通信のやりとり
Fig. 1 - Message flow for a full handshake
* 常に送信されないオプション
参照:
Request for Comments: 5246 The Transport Layer Security (TLS) Protocol Version 1.2
7.3. Handshake Protocol overview
Fig. 1 – Message flow for a full handshake
Request for Comments: 2246 The TLS Protocol Version 1.0
7.3. Handshake Protocol overview
Fig. 1 – Message flow for a full handshake
TLS1.2 までの暗号スイート「鍵交換_認証_暗号化_ハッシュ関数」の見方
以下に、TLS1.2の例を2つ示す。
TLS_[鍵交換 (Kx)][認証 (Au)]_WITH[共通鍵暗号 (Enc)]_[ハッシュ (Hash/Mac)]
TLS_DHE_RSA_WITH_CAMELLIA_256_GCM_SHA384
鍵交換「DHE」
認証「RSA」
暗号化「鍵長 256 ビット GCM モードの Camellia(CAMELLIA_256_GCM)」
ハッシュ関数「SHA-384」
TLS_RSA_WITH_AES_128_CBC_SHA
鍵交換と認証「RSA」
暗号化「鍵長 128 ビット CBC モードの AES(AES_128_CBC)」
ハッシュ関数「SHA-1」
要素 | 安全な設定例 |
---|---|
プロトコル | TLSv1.2, TLSv1.3 |
鍵交換 Kx – Key Exchange | ECDHE, DHE ※最後にEの付くPFS(Perfect Forward Secrity) 特性をもつものが良い。通信の都度、秘密鍵が新たに生成されるので将来にわたり安全。 |
認証 Au – Authentication | ECDSA RSASSA PKCS#1 v1.5(RSA) RSASSA-PSS(TLS1.3のみ) |
暗号化 Enc – Encryption | ブロック暗号:AES, Camellia(TLS1.2のみ) 暗号利用モード:GCM, CCM, CCM_8 ストリーム暗号:ChaCha20-Poly1305 |
ハッシュ関数 Mac – Message Authentication Code | SHA256, SHA384 |
TLS1.3 の暗号スイート「暗号化_ハッシュ関数」の見方
TLS_AES_256_GCM_SHA384
TLS_[AEAD方式 (Enc/Mac)]_[ハッシュ (Hash)]
暗号化「鍵長256ビット GCM モードの AES(AES_256_GCM)」
ハッシュ関数「SHA-384」
※ TLS1.2で項目に含まれていた鍵交換、認証がTLS1.3よりなくなった。
Mozillaが推奨している暗号スイート
推奨構成
mozilla wiki Security/Server Side TLS
https://wiki.mozilla.org/Security/Server_Side_TLS
- Modern(最新):下位互換を必要としない、TLS1.3をサポートする最新構成
- Intermediate(中間):一般用途のサーバー推奨構成
- Old(古い): Internet Explorer 8(Windows XP)、Java 6、OpenSSL 0.9.8などの非常に古いクライアントまたはライブラリによってアクセスされるサービスの構成
構成ごとにサポートするブラウザ等の一覧。
Configuration | Firefox | Android | Chrome | Edge | Internet Explorer | Java | OpenSSL | Opera | Safari |
---|---|---|---|---|---|---|---|---|---|
Modern | 63 | 10.0 | 70 | 75 | — | 11 | 1.1.1 | 57 | 12.1 |
Intermediate | 27 | 4.4.2 | 31 | 12 | 11 (Win7) | 8u31 | 1.0.1 | 20 | 9 |
Old | 1 | 2.3 | 1 | 12 | 8 (WinXP) | 6 | 0.9.8 | 5 | 1 |
Intermediate(一般用途のサーバー推奨構成)に記載の暗号化スイート
各行は左から順に「CipherSuite名」「プロトコル」「鍵交換アルゴリズム(Kx)」「認証アルゴリズム(Au)」「暗号化方式(Enc)」「ハッシュ関数(Mac)」を示す。
0x13,0x01 - TLS_AES_128_GCM_SHA256 TLSv1.3 Kx=any Au=any Enc=AESGCM(128) Mac=AEAD
0x13,0x02 - TLS_AES_256_GCM_SHA384 TLSv1.3 Kx=any Au=any Enc=AESGCM(256) Mac=AEAD
0x13,0x03 - TLS_CHACHA20_POLY1305_SHA256 TLSv1.3 Kx=any Au=any Enc=CHACHA20/POLY1305(256) Mac=AEAD
0xC0,0x2B - ECDHE-ECDSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AESGCM(128) Mac=AEAD
0xC0,0x2F - ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH Au=RSA Enc=AESGCM(128) Mac=AEAD
0xC0,0x2C - ECDHE-ECDSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AESGCM(256) Mac=AEAD
0xC0,0x30 - ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH Au=RSA Enc=AESGCM(256) Mac=AEAD
0xCC,0xA9 - ECDHE-ECDSA-CHACHA20-POLY1305 TLSv1.2 Kx=ECDH Au=ECDSA Enc=CHACHA20/POLY1305(256) Mac=AEAD
0xCC,0xA8 - ECDHE-RSA-CHACHA20-POLY1305 TLSv1.2 Kx=ECDH Au=RSA Enc=CHACHA20/POLY1305(256) Mac=AEAD
0x00,0x9E - DHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=DH Au=RSA Enc=AESGCM(128) Mac=AEAD
0x00,0x9F - DHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=DH Au=RSA Enc=AESGCM(256) Mac=AEAD
mozilla SSL Configuration Generator
「mozilla SSL Configuration Generator」では、暗号スイートを作成できる。
modern configは、最新の暗号スイートで、最新の端末では利用できるが、以前の端末では利用できない。
intermediate configは、一般用途のサーバー向けでmodern configより、利用可能な端末が多い。
apache 2.4.41, modern config, OpenSSL 1.1.1k
サポート対象:Supports Firefox 63, Android 10.0, Chrome 70, Edge 75, Java 11, OpenSSL 1.1.1, Opera 57, and Safari 12.1
# generated 2022-06-20, Mozilla Guideline v5.6, Apache 2.4.41, OpenSSL 1.1.1k, modern configuration
# https://ssl-config.mozilla.org/#server=apache&version=2.4.41&config=modern&openssl=1.1.1k&guideline=5.6
# this configuration requires mod_ssl, mod_socache_shmcb, mod_rewrite, and mod_headers
<VirtualHost *:80>
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/\.well\-known/acme\-challenge/
RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]
</VirtualHost>
<VirtualHost *:443>
SSLEngine on
SSLCertificateFile /path/to/signed_cert_and_intermediate_certs
SSLCertificateKeyFile /path/to/private_key
# enable HTTP/2, if available
Protocols h2 http/1.1
# HTTP Strict Transport Security (mod_headers is required) (63072000 seconds)
Header always set Strict-Transport-Security "max-age=63072000"
</VirtualHost>
# modern configuration
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1 -TLSv1.2
SSLHonorCipherOrder off
SSLSessionTickets off
SSLUseStapling On
SSLStaplingCache "shmcb:logs/ssl_stapling(32768)"
apache 2.4.41, intermediate config, OpenSSL 1.1.1k
サポート対象:Supports Firefox 27, Android 4.4.2, Chrome 31, Edge, IE 11 on Windows 7, Java 8u31, OpenSSL 1.0.1, Opera 20, and Safari 9
# generated 2022-06-20, Mozilla Guideline v5.6, Apache 2.4.41, OpenSSL 1.1.1k, intermediate configuration
# https://ssl-config.mozilla.org/#server=apache&version=2.4.41&config=intermediate&openssl=1.1.1k&guideline=5.6
# this configuration requires mod_ssl, mod_socache_shmcb, mod_rewrite, and mod_headers
<VirtualHost *:80>
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/\.well\-known/acme\-challenge/
RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]
</VirtualHost>
<VirtualHost *:443>
SSLEngine on
# curl https://ssl-config.mozilla.org/ffdhe2048.txt >> /path/to/signed_cert_and_intermediate_certs_and_dhparams
SSLCertificateFile /path/to/signed_cert_and_intermediate_certs_and_dhparams
SSLCertificateKeyFile /path/to/private_key
# enable HTTP/2, if available
Protocols h2 http/1.1
# HTTP Strict Transport Security (mod_headers is required) (63072000 seconds)
Header always set Strict-Transport-Security "max-age=63072000"
</VirtualHost>
# intermediate configuration
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
SSLHonorCipherOrder off
SSLSessionTickets off
SSLUseStapling On
SSLStaplingCache "shmcb:logs/ssl_stapling(32768)"
OpenSSL 1.1.1k FIPS 25 Mar 2021で使用可能な暗号スイート
OpenSSLで使用可能な暗号スイートを以下に示す。
赤字は、TLSv1.2未満(TLS1.2を含まない)の使用しないことが望ましい暗号スイート。
# openssl ciphers -v
TLS_AES_256_GCM_SHA384 TLSv1.3 Kx=any Au=any Enc=AESGCM(256) Mac=AEAD
TLS_CHACHA20_POLY1305_SHA256 TLSv1.3 Kx=any Au=any Enc=CHACHA20/POLY1305(256) Mac=AEAD
TLS_AES_128_GCM_SHA256 TLSv1.3 Kx=any Au=any Enc=AESGCM(128) Mac=AEAD
TLS_AES_128_CCM_SHA256 TLSv1.3 Kx=any Au=any Enc=AESCCM(128) Mac=AEAD
ECDHE-ECDSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AESGCM(256) Mac=AEAD
ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH Au=RSA Enc=AESGCM(256) Mac=AEAD
ECDHE-ECDSA-CHACHA20-POLY1305 TLSv1.2 Kx=ECDH Au=ECDSA Enc=CHACHA20/POLY1305(256) Mac=AEAD
ECDHE-RSA-CHACHA20-POLY1305 TLSv1.2 Kx=ECDH Au=RSA Enc=CHACHA20/POLY1305(256) Mac=AEAD
ECDHE-ECDSA-AES256-CCM TLSv1.2 Kx=ECDH Au=ECDSA Enc=AESCCM(256) Mac=AEAD
ECDHE-ECDSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AESGCM(128) Mac=AEAD
ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH Au=RSA Enc=AESGCM(128) Mac=AEAD
ECDHE-ECDSA-AES128-CCM TLSv1.2 Kx=ECDH Au=ECDSA Enc=AESCCM(128) Mac=AEAD
ECDHE-ECDSA-AES128-SHA256 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AES(128) Mac=SHA256
ECDHE-RSA-AES128-SHA256 TLSv1.2 Kx=ECDH Au=RSA Enc=AES(128) Mac=SHA256
ECDHE-ECDSA-AES256-SHA TLSv1 Kx=ECDH Au=ECDSA Enc=AES(256) Mac=SHA1
ECDHE-RSA-AES256-SHA TLSv1 Kx=ECDH Au=RSA Enc=AES(256) Mac=SHA1
ECDHE-ECDSA-AES128-SHA TLSv1 Kx=ECDH Au=ECDSA Enc=AES(128) Mac=SHA1
ECDHE-RSA-AES128-SHA TLSv1 Kx=ECDH Au=RSA Enc=AES(128) Mac=SHA1
AES256-GCM-SHA384 TLSv1.2 Kx=RSA Au=RSA Enc=AESGCM(256) Mac=AEAD
AES256-CCM TLSv1.2 Kx=RSA Au=RSA Enc=AESCCM(256) Mac=AEAD
AES128-GCM-SHA256 TLSv1.2 Kx=RSA Au=RSA Enc=AESGCM(128) Mac=AEAD
AES128-CCM TLSv1.2 Kx=RSA Au=RSA Enc=AESCCM(128) Mac=AEAD
AES256-SHA256 TLSv1.2 Kx=RSA Au=RSA Enc=AES(256) Mac=SHA256
AES128-SHA256 TLSv1.2 Kx=RSA Au=RSA Enc=AES(128) Mac=SHA256
AES256-SHA SSLv3 Kx=RSA Au=RSA Enc=AES(256) Mac=SHA1
AES128-SHA SSLv3 Kx=RSA Au=RSA Enc=AES(128) Mac=SHA1
DHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=DH Au=RSA Enc=AESGCM(256) Mac=AEAD
DHE-RSA-CHACHA20-POLY1305 TLSv1.2 Kx=DH Au=RSA Enc=CHACHA20/POLY1305(256) Mac=AEAD
DHE-RSA-AES256-CCM TLSv1.2 Kx=DH Au=RSA Enc=AESCCM(256) Mac=AEAD
DHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=DH Au=RSA Enc=AESGCM(128) Mac=AEAD
DHE-RSA-AES128-CCM TLSv1.2 Kx=DH Au=RSA Enc=AESCCM(128) Mac=AEAD
DHE-RSA-AES256-SHA256 TLSv1.2 Kx=DH Au=RSA Enc=AES(256) Mac=SHA256
DHE-RSA-AES128-SHA256 TLSv1.2 Kx=DH Au=RSA Enc=AES(128) Mac=SHA256
DHE-RSA-AES256-SHA SSLv3 Kx=DH Au=RSA Enc=AES(256) Mac=SHA1
DHE-RSA-AES128-SHA SSLv3 Kx=DH Au=RSA Enc=AES(128) Mac=SHA1
PSK-AES256-GCM-SHA384 TLSv1.2 Kx=PSK Au=PSK Enc=AESGCM(256) Mac=AEAD
PSK-CHACHA20-POLY1305 TLSv1.2 Kx=PSK Au=PSK Enc=CHACHA20/POLY1305(256) Mac=AEAD
PSK-AES256-CCM TLSv1.2 Kx=PSK Au=PSK Enc=AESCCM(256) Mac=AEAD
PSK-AES128-GCM-SHA256 TLSv1.2 Kx=PSK Au=PSK Enc=AESGCM(128) Mac=AEAD
PSK-AES128-CCM TLSv1.2 Kx=PSK Au=PSK Enc=AESCCM(128) Mac=AEAD
PSK-AES256-CBC-SHA SSLv3 Kx=PSK Au=PSK Enc=AES(256) Mac=SHA1
PSK-AES128-CBC-SHA256 TLSv1 Kx=PSK Au=PSK Enc=AES(128) Mac=SHA256
PSK-AES128-CBC-SHA SSLv3 Kx=PSK Au=PSK Enc=AES(128) Mac=SHA1
DHE-PSK-AES256-GCM-SHA384 TLSv1.2 Kx=DHEPSK Au=PSK Enc=AESGCM(256) Mac=AEAD
DHE-PSK-CHACHA20-POLY1305 TLSv1.2 Kx=DHEPSK Au=PSK Enc=CHACHA20/POLY1305(256) Mac=AEAD
DHE-PSK-AES256-CCM TLSv1.2 Kx=DHEPSK Au=PSK Enc=AESCCM(256) Mac=AEAD
DHE-PSK-AES128-GCM-SHA256 TLSv1.2 Kx=DHEPSK Au=PSK Enc=AESGCM(128) Mac=AEAD
DHE-PSK-AES128-CCM TLSv1.2 Kx=DHEPSK Au=PSK Enc=AESCCM(128) Mac=AEAD
DHE-PSK-AES256-CBC-SHA SSLv3 Kx=DHEPSK Au=PSK Enc=AES(256) Mac=SHA1
DHE-PSK-AES128-CBC-SHA256 TLSv1 Kx=DHEPSK Au=PSK Enc=AES(128) Mac=SHA256
DHE-PSK-AES128-CBC-SHA SSLv3 Kx=DHEPSK Au=PSK Enc=AES(128) Mac=SHA1
ECDHE-PSK-CHACHA20-POLY1305 TLSv1.2 Kx=ECDHEPSK Au=PSK Enc=CHACHA20/POLY1305(256) Mac=AEAD
ECDHE-PSK-AES256-CBC-SHA TLSv1 Kx=ECDHEPSK Au=PSK Enc=AES(256) Mac=SHA1
ECDHE-PSK-AES128-CBC-SHA256 TLSv1 Kx=ECDHEPSK Au=PSK Enc=AES(128) Mac=SHA256
ECDHE-PSK-AES128-CBC-SHA TLSv1 Kx=ECDHEPSK Au=PSK Enc=AES(128) Mac=SHA1
Windowsで使用可能な暗号スイート
Windowsで使用可能な暗号スイートは以下のサイトに記載されている。
TLS/SSL (Schannel SSP) の暗号スイート
https://docs.microsoft.com/ja-jp/windows/win32/secauthn/cipher-suites-in-schannel
Windows 10 v1607 の TLS 暗号スイート
https://docs.microsoft.com/ja-jp/windows/win32/secauthn/tls-cipher-suites-in-windows-10-v1607
SSL Labs
ウェブサーバーで使用されている証明書、使用可能な暗号スイートを確認できる。