• 診断項目 No.80/127
  • 通信の暗号化(HTTPS・TLS・HSTS)
  • 重大度 重要(high)

ネゴシエートされた暗号スイートとは?推奨される組み合わせ・診断基準・Apache/nginx/IISの設定方法

ネゴシエートされた暗号スイートとは、TLS接続でサーバーが実際に選んだ鍵交換・暗号化方式の組み合わせです。ECDHE+AEADが推奨でCBC・静的RSA・3DES・RC4が避けるべき理由、診断基準、設定例を解説します。

結論(ネゴシエートされた暗号スイート)

ネゴシエートされた暗号スイートとは、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などの専用ツールを使います。
診断項目名ネゴシエートされた暗号スイート
項目IDtransport.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.3TLS_AES_128_GCM_SHA256暗号化(AEAD)とハッシュだけを示す。鍵交換は常に (EC)DHE で前方秘匿性があり、TLS 1.3 で定義される5種類はいずれも AEAD
TLS 1.2TLS_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_SHA256Mozilla Intermediate/Modern の TLS 1.3 スイート
推奨TLS 1.2 の ECDHE+AES-GCM/ChaCha20-Poly1305RFC 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+AEADRFC 9325 は TLS 1.2 の TLS_DHE_* を SHOULD NOT とし、Mozilla v6.0 の Intermediate 構成にも含まれない
不可NULL 暗号、EXPORT、匿名(anon)、RC4、DES/3DES、MD5RFC 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.3TLS_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 のみ)を選択します。

段階的な導入手順

  1. 全スイートを列挙して現状を把握する(下記 nmap・testssl.sh 等)。
  2. アクセスログに暗号スイートを記録(Apache %{SSL_CIPHER}x、nginx $ssl_cipher)し、CBC や静的RSAで接続している利用者がいないか確認する。
  3. 不要な弱いスイートを削除し、再度列挙して確認する。

設定後の確認方法

# 実際にネゴシエートされるスイートを確認
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実行環境などが接続できなくなる場合があります。アクセスログに暗号スイートを記録して利用状況を確認してから外します。

セキュリティAIチェッカーを利用する

この項目を含む127項目を、URLを入れるだけで無料診断します。

参考資料