結論(ネゴシエートされた暗号スイート)
ネゴシエートされた暗号スイートとは、TLS接続の際にクライアントとサーバーが交渉して決めた、鍵交換・認証・暗号化・完全性保護の方式の組み合わせのうち、実際に選ばれたものです。推奨はTLS 1.3のスイートか、TLS 1.2のECDHE+AES-GCM/ChaCha20-Poly1305です。静的RSA鍵交換やCBCモードは要検討、NULL・RC4・3DESなどは使ってはいけません。
この記事のポイント
- 推奨はTLS 1.3のAES-GCM・ChaCha20-Poly1305、TLS 1.2のECDHE(RSA/ECDSA)+AES-GCM/ChaCha20-Poly1305です。
- 静的RSA鍵交換(TLS_RSA_WITH_…)には前方秘匿性がなく、秘密鍵が漏れると記録済みの通信をまとめて復号されます。
- NULL・EXPORT・匿名・RC4・DES/3DES・MD5は不可で、RFC 9325などで禁止または非推奨とされています。
- セキュリティAIチェッカーは1回の接続で選ばれたスイートを観測し、推奨なら○、CBC・静的RSA・DHEなどは△、明らかに弱いものは×と判定します。
- 1回の観測はサーバーが有効にしている全スイートの一覧ではないため、全列挙にはnmapやtestssl.shなどの専用ツールを使います。
| 診断項目名 | ネゴシエートされた暗号スイート |
|---|---|
| 項目ID | transport.negotiated-cipher |
| 分類 | 通信の暗号化(HTTPS・TLS・HSTS) |
| 重大度・配点の重み | 重要(high) 重み 3 |
| 関連する標準・ガイドライン | OWASP ASVS 5.0.0 V12.1.2(Level 2:推奨暗号スイートのみを有効化し、最も強いものを優先)/RFC 9325(BCP 195:NULL・RC4・112ビット未満の暗号をネゴシエートしてはならない、前方秘匿性のある暗号スイートを優先、静的RSA鍵交換は避ける)/Mozilla Server Side TLS ガイドライン v6.0(Intermediate 構成)/CRYPTREC「TLS暗号設定ガイドライン」第3.1.1版/OWASP WSTG-CRYP-01/CWE-327(Use of a Broken or Risky Cryptographic Algorithm)、CWE-757 |
ネゴシエートされた暗号スイートとは
ネゴシエートされた暗号スイートとは、TLS 接続の際にクライアントとサーバーが交渉(ネゴシエート)して決めた「暗号スイート」、つまり鍵交換・認証・暗号化・完全性保護の方式の組み合わせのうち、実際に選ばれたものです。
Protocol : TLSv1.2
Cipher : ECDHE-RSA-AES128-GCM-SHA256
サーバーが弱い暗号スイートを有効にしていたり、強いものより弱いものを優先していたりすると、通信の秘匿性や前方秘匿性(サーバー秘密鍵が将来漏れても過去の通信が解読されない性質)が損なわれます。セキュリティAIチェッカーは、現代的なクライアントとして接続したときにサーバーが実際に選んだ暗号スイートを1つ観測し、推奨される組み合わせかどうかを評価します。
暗号スイート名の読み方
IANA(IETF)形式の名前で説明します。
| バージョン | 名前の例 | 意味 |
|---|---|---|
| TLS 1.3 | TLS_AES_128_GCM_SHA256 | 暗号化(AEAD)とハッシュだけを示す。鍵交換は常に (EC)DHE で前方秘匿性があり、TLS 1.3 で定義される5種類はいずれも AEAD |
| TLS 1.2 | TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 | 鍵交換(ECDHE)・認証(RSA)・暗号化(AES-128-GCM)・PRF ハッシュ(SHA-256)を示す |
OpenSSL 形式では同じものが ECDHE-RSA-AES128-GCM-SHA256 と表記されます。CBC モードは ECDHE-RSA-AES256-SHA384 のように「CBC」という語が入らない点に注意が必要です。
推奨される暗号スイートと避けるべき暗号スイート
| 区分 | 例 | 根拠 |
|---|---|---|
| 推奨 | TLS 1.3 の TLS_AES_128_GCM_SHA256、TLS_AES_256_GCM_SHA384、TLS_CHACHA20_POLY1305_SHA256 | Mozilla Intermediate/Modern の TLS 1.3 スイート |
| 推奨 | TLS 1.2 の ECDHE+AES-GCM/ChaCha20-Poly1305 | RFC 9325 4.2 の推奨4スイート(ECDHE_RSA/ECDSA × AES_128/256_GCM)、Mozilla Intermediate |
| 要検討 | ECDHE+CBC モード(…_AES_256_CBC_SHA384 等) | AEAD でなく、パディングオラクル系攻撃の歴史がある。Mozilla Intermediate v6.0 には含まれない |
| 要検討 | 静的RSA鍵交換(TLS_RSA_WITH_…) | 前方秘匿性がない。RFC 9325 は SHOULD NOT |
| 要検討 | DHE+AEAD | RFC 9325 は TLS 1.2 の TLS_DHE_* を SHOULD NOT とし、Mozilla v6.0 の Intermediate 構成にも含まれない |
| 不可 | NULL 暗号、EXPORT、匿名(anon)、RC4、DES/3DES、MD5 | RFC 9325 で NULL・RC4・112ビット未満は MUST NOT。RC4 は RFC 7465 で禁止。3DES は Sweet32(CVE-2016-2183) |
1回のネゴシエーション結果が示すもの
暗号スイートは、クライアントが提示した候補の中からサーバーが選びます(サーバー優先設定が無効なら、クライアントの順序が重視されます)。したがって、1回の観測で分かるのは「この候補を提示したとき何が選ばれたか」だけで、サーバーが有効にしている全スイートの一覧ではありません。
弱いスイートが有効でも、強いものが選ばれれば観測されません。ASVS V12.1.2 の「推奨スイートのみ有効化」を完全に確認するには、全スイートを列挙する専用ツールが必要です。
プロトコルのバージョン(TLS 1.0/1.1 が無効か)は「TLS 1.2以上のみを許可」で確認します。この項目は、選ばれた暗号スイートの種類に集中しています。
ネゴシエートされた暗号スイートの診断基準(セキュリティAIチェッカー)
取得対象と方法
- 「TLS 1.2以上のみを許可」の「現行プローブ」(TLS 1.2 以上、証明書検証あり、SNI 指定、Node.js 既定の暗号スイートを提示)で成立した接続から、Node.js の
getCipher()が返すstandardName(IETF 名)を取得します。取得できない場合は OpenSSL 名を使います。 - Node.js 22(OpenSSL 3)が提示する候補は、TLS 1.3 の3スイートに続き ECDHE-GCM、DHE-GCM、CBC 系を含み、
!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!SRP:!CAMELLIAで弱いものを除いた一覧です。そのため、実際の観測結果はほとんどの場合○か△になります。
判定条件
| 判定 | 条件 | 例 |
|---|---|---|
| ○ 問題なし(pass) | TLS 1.3 の AES-128/256-GCM・ChaCha20-Poly1305・AES-128-CCM(TLS_AES_128_CCM_8_SHA256 は含まず△)、または TLS 1.2 の ECDHE(RSA/ECDSA)+AES-128/256-GCM/ChaCha20-Poly1305(IETF 名・OpenSSL 名の両方に対応) | TLS_AES_256_GCM_SHA384、TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 |
| △ 要確認(warn) | 上記以外(CBC、静的RSA、DHE、名前不明など) | TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384、TLS_RSA_WITH_AES_256_GCM_SHA384 |
| × 要改善(fail) | 名前に NULL、EXPORT、anon(_anon_、ADH-/AECDH-)、RC4、DES/3DES、MD5 を含む | TLS_RSA_WITH_3DES_EDE_CBC_SHA |
| 対象外(na) | HTTP サイト、または現行プローブが失敗 | HTTPのため対象外です。/直接TLSプローブを完了できず判定できませんでした。 |
根拠表示には「〇〇をネゴシエートしました。これは有効な全スイートの列挙ではありません。」と、観測したスイート名と限界を併記します。
得点への影響
重み3。○は3点、△は1.35点(3×0.45)、×は0点。対象外は分母から除外します。
自治体サイトでの判定例
| 構成 | 観測されるスイート | 判定 |
|---|---|---|
| CDN・大手ホスティング経由で TLS 1.3 | TLS_AES_128_GCM_SHA256 等 | ○ |
| TLS 1.2 のみ対応の自前サーバーで ECDHE-GCM を優先 | TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 | ○ |
| 古いロードバランサーで CBC を優先 | TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 | △ |
| 鍵交換が RSA のみ | TLS_RSA_WITH_AES_256_GCM_SHA384 | △(前方秘匿性なし) |
弱い暗号スイートが選ばれるとどんなリスクがあるか
攻撃シナリオ
- 前方秘匿性がない場合:通信を長期間記録しておいた攻撃者が、後にサーバー秘密鍵を入手(サーバー侵害、バックアップ流出など)すると、記録済みの静的RSA鍵交換の通信をまとめて復号できます。
- CBC モード:実装の不備と組み合わさると、Lucky Thirteen(CVE-2013-0169)のようなパディング・タイミング系攻撃の対象になってきた歴史があります。
- 3DES:64ビットブロック暗号であり、大量通信で衝突を利用する Sweet32(CVE-2016-2183)の対象です。
- RC4:統計的な偏りにより平文を推定できることが知られ、RFC 7465 で TLS での使用が禁止されています。
想定される被害
- 問い合わせフォームや申請画面の入力内容(氏名、住所、連絡先)の事後的な解読
- 外部診断・監査での指摘、調達要件(ASVS Level 2、CRYPTREC ガイドライン準拠)の不適合
推奨暗号スイートだけを使う設定方法(Apache・nginx・IIS・CDN)
基本方針
Mozilla の Intermediate 構成(TLS 1.2/1.3、ECDHE+AEAD のみ)を基準にし、互換性要件が特に無ければこれに合わせます。設定の生成には Mozilla SSL Configuration Generator が使えます。
Apache(mod_ssl)
SSLProtocol -all +TLSv1.2 +TLSv1.3
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
SSLHonorCipherOrder off
SSLSessionTickets off
SSLCipherSuite の上記指定は TLS 1.2 以下に適用されます。TLS 1.3 のスイートは既定で安全なものだけが有効です(OpenSSL 1.1.1 以降を使う mod_ssl では、TLS 1.3 用に SSLCipherSuite TLSv1.3 … という別指定があります)。
nginx
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 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;
ssl_prefer_server_ciphers off;
Mozilla の Intermediate 構成では、すべての候補が十分に強いことを前提に、サーバー優先を off にしています。弱いスイートを残したまま互換性のため提供する場合は、ssl_prefer_server_ciphers on; と強い順の並びで、弱いものが選ばれないようにします。
IIS(Windows Server)
暗号スイートの順序と有効化は、グループポリシー(「SSL 暗号の順位」)または PowerShell の TLS コマンド(Get-TlsCipherSuite、Disable-TlsCipherSuite 等)で設定します。Microsoft のドキュメントは、暗号やハッシュの制御を個別のレジストリ編集ではなく、暗号スイート順序の構成で行うよう案内しています。
Get-TlsCipherSuite | Format-Table Name
Disable-TlsCipherSuite -Name "TLS_RSA_WITH_3DES_EDE_CBC_SHA"
Next.js(Vercel)・CDN
Vercel は TLS 1.3 の3スイートと、TLS 1.2 の ECDHE+AES-GCM/ChaCha20-Poly1305 のみをサポートしており、前方秘匿性のある強い暗号に限定されています。他の CDN では「セキュリティポリシー」「TLS プロファイル」で推奨プロファイル(例:TLS 1.2 以上・ECDHE+AEAD のみ)を選択します。
段階的な導入手順
- 全スイートを列挙して現状を把握する(下記 nmap・testssl.sh 等)。
- アクセスログに暗号スイートを記録(Apache
%{SSL_CIPHER}x、nginx$ssl_cipher)し、CBC や静的RSAで接続している利用者がいないか確認する。 - 不要な弱いスイートを削除し、再度列挙して確認する。
設定後の確認方法
# 実際にネゴシエートされるスイートを確認
openssl s_client -connect www.example.lg.jp:443 -servername www.example.lg.jp -tls1_2 </dev/null 2>/dev/null | grep -E "Protocol|Cipher"
# 静的RSAやCBCが受け入れられないこと(失敗すれば良い)
openssl s_client -connect www.example.lg.jp:443 -servername www.example.lg.jp -tls1_2 -cipher 'AES256-GCM-SHA384' </dev/null
openssl s_client -connect www.example.lg.jp:443 -servername www.example.lg.jp -tls1_2 -cipher 'ECDHE-RSA-AES256-SHA384' </dev/null
# 有効な全スイートの列挙
nmap --script ssl-enum-ciphers -p 443 www.example.lg.jp
サイトを壊さないためのガードレール
- CBC や静的RSAを外すと、ごく古い端末(Windows 7 の旧ブラウザ、古い組込み機器、古い Java 実行環境)が接続できなくなる場合があります。ログで利用状況を確認してから外します。
- ECDSA 証明書を併用すると、TLS 1.2 で ECDHE_ECDSA スイートが使え、性能面でも有利です。RSA 証明書との併用(デュアル証明書)が可能かは、サーバーソフトウェアと証明書の発行条件を確認してください。
よくある質問(FAQ)
暗号スイートとは何ですか?
TLS接続で使う鍵交換・認証・暗号化・完全性保護の方式の組み合わせです。TLS 1.2では TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 のように4要素を、TLS 1.3では TLS_AES_128_GCM_SHA256 のように暗号化とハッシュだけを名前で示します。
推奨される暗号スイートはどれですか?
TLS 1.3の TLS_AES_128_GCM_SHA256、TLS_AES_256_GCM_SHA384、TLS_CHACHA20_POLY1305_SHA256 と、TLS 1.2のECDHE(RSA/ECDSA)+AES-GCM/ChaCha20-Poly1305です。MozillaのIntermediate構成がこの組み合わせを基準にしています。
前方秘匿性とは何ですか?なぜ必要ですか?
サーバー秘密鍵が将来漏れても、過去の通信が解読されない性質です。静的RSA鍵交換では、通信を記録していた攻撃者が後で秘密鍵を入手すると、記録済みの通信をまとめて復号できます。ECDHEなどの一時鍵交換を使うと防げます。
CBCモードの暗号スイートはなぜ△(要確認)なのですか?
CBCはAEAD(認証付き暗号)ではなく、実装の不備と組み合わさるとLucky Thirteen(CVE-2013-0169)のようなパディング・タイミング系攻撃の対象になってきた歴史があるためです。Mozilla Intermediate v6.0にも含まれていません。
ネゴシエートされた暗号スイートの診断が○なら、弱い暗号スイートは無効になっていますか?
そうとは限りません。観測するのは1回の接続で選ばれたスイートだけで、弱いスイートが有効でも強いものが選ばれれば観測されません。推奨スイートのみが有効かを確かめるには、nmap --script ssl-enum-ciphers などで全スイートを列挙します。
暗号スイートを絞ると古い端末が接続できなくなりますか?
CBCや静的RSAを外すと、Windows 7の旧ブラウザ、古い組込み機器、古いJava実行環境などが接続できなくなる場合があります。アクセスログに暗号スイートを記録して利用状況を確認してから外します。
この項目を含む127項目を、URLを入れるだけで無料診断します。
参考資料
- OWASP ASVS 5.0.0 V12 Secure Communication(V12.1.2)
- RFC 9325 Recommendations for Secure Use of TLS and DTLS(BCP 195)
- Mozilla Server Side TLS ガイドライン(JSON)
- Node.js Documentation: TLS (SSL)
- Vercel Docs「Encryption and TLS」
- nginx Module ngx_http_ssl_module
- Microsoft Learn「Transport Layer Security (TLS) registry settings」
- IPA「TLS暗号設定ガイドライン」(CRYPTREC)