Windows Server 2019 で証明書バインドごとに TLS バージョンの適用機能を使用できるようになりました
この投稿は以下によって作成されています。
Andrew Marshall、カスタマーセキュリティ & トラスト部門のプリンシパルセキュリティプログラムマネージャー
ガブリエル モンテネグロ コア ネットワーキングプリンシパル プログラム マネージャー
Niranjan Inamdar、Core Networking のシニア ソフトウェア エンジニア
Michael Brown、インターネット インフォメーション サービスのシニア ソフトウェア エンジニア
イワン・パショフ、主要ソフトウェアエンジニアリングリーダー、コアネットワーキング
2019 年 8 月
世界中のエンジニアが、TLS 1.0に対する独自の依存関係を排除するために取り組んでいるため、お客様の移行準備と独自のセキュリティ ニーズのバランスを取るという複雑な課題に直面しています。 これまでは、古いオペレーティング システムの に TLS 1.2 のサポートを追加、クライアントによる脆弱な TLS 使用状況 を検出するための IIS の新しいログ形式 配布し、TLS 1.0 の依存関係 を排除するための最新の技術ガイダンスを提供することで、お客様がこれらの問題に対処できるように支援してきました。
Microsoft は、TLS 1.2 以降の世界への移行を容易にするために、Windows の強力な新機能を発表することを嬉しく思います。 KB4490481以降、Windows Server 2019 では、指定した個々の証明書で脆弱な TLS バージョンが使用されないようにすることができます。 この機能を "レガシ TLS を無効にする" と呼び、選択した証明書に TLS バージョンと暗号スイート のフロアが効果的に適用されます。
また、従来の TLS を無効にすると、オンライン サービスは、同じハードウェア上でエンドポイントの 2 つの異なるグループを提供できます。1 つは TLS 1.2 以降のトラフィックのみを許可し、もう 1 つはレガシ TLS 1.0 トラフィックに対応します。 変更は HTTP.sysに実装され、追加の証明書の発行により、適切な TLS バージョンで新しいエンドポイントにトラフィックをルーティングできます。 この変更の前に、このような設定はレジストリ経由でのみシステム全体で構成可能であったため、このような機能を展開するには追加のハードウェア投資が必要でした。
機能シナリオの詳細
一般的な展開シナリオでは、ニーズが混在するデータセンター内のハードウェアのセットが 1 つあり、現在は TLS 1.2 が適用されている必要があり、TLS 1.0 の依存関係の削除が行われていないものもあります。 図 1 は、TLS バージョンの選択と証明書のバインドを個別のアクションとして示しています。 これは既定の機能です。
図 1: 既定の TLS バージョンの選択と証明書バインド機能
secure.contoso.com は、TLS 1.2 以降のみをサポートするサービス エンドポイントに顧客を誘導します。
legacy.contoso.com は、従来の TLS 1.0 のニーズ (TLS 1.2 への移行など) を持つお客様を、限られた期間 TLS 1.0 をサポートするエンドポイントに誘導します。 これにより、お客様は、サービスの中断や TLS 1.2 の準備ができている他の顧客をブロックすることなく、TLS 1.2 の準備テストを完了できます。
従来は、すべてのトラフィックを処理し、TLS バージョンの適用を提供するために、物理的に分離された 2 つのホストが必要でした。最小プロトコル バージョンで TLS 要求を処理するには、システム全体のレジストリ設定を使用して弱いプロトコルを無効にする必要があります。 この機能は、TLS セッションが証明書にバインドされているスタックの上位で使用できるようにしました。そのため、次の図 2 に示すように、特定の最小 TLS バージョンを割り当てることができます。
の最小 TLS バージョンの適用
図 2: 選択した証明書の TLS の最小バージョンを適用するレガシ TLS 機能を無効にする (Secure.contoso.com)。
機能の展開ガイダンス
従来の TLS の無効化機能は、PowerShell コマンドまたは C++ HTTP.sys API を使用して、インターネット インフォメーション サービス (IIS) サーバー UI を介して展開できます。
オプション 1: IIS UI の構成 (Windows 10 バージョン 2004 および Windows Server バージョン 2004 以降で使用可能)
次に示すように、SSL 証明書 "secure.contoso.com" のサイト バインドを作成し、[レガシ TLS を無効にする] をオンにして [OK] をクリックします。
オプション 2: PowerShell (Windows 10 バージョン 2004 および Windows Server バージョン 2004 以降で使用可能)
PowerShell では、次のような SSL フラグを参照できます。
[Microsoft.Web.Administration.SslFlags]::DisableLegacyTLS
短い名前付き変数を作成すると便利です。
$Sni = [Microsoft.Web.Administration.SslFlags]::Sni
$Sni\_CCS = [Microsoft.Web.Administration.SslFlags]::Sni + [Microsoft.Web.Administration.SslFlags]::CentralCertStore
$CCS = [Microsoft.Web.Administration.SslFlags]::CentralCertStore
$DisableLegacyTLS = [Microsoft.Web.Administration.SslFlags]::DisableLegacyTLS
$storeLocation = "Cert:\\LocalMachine\\My"
新しいサイトへのサイト バインドを作成し、レガシ TLS を無効にする例を次に示します。
$BindingInformation = "\*:443:"
$siteName = "contoso"
$Thumbprint = $certificate.ThumbPrint
Sslflag DisableLegacyTLS プロパティ値が指定された New-IISSite
New-IISSite $siteName "$env:systemdrive\\inetpub\\wwwroot" "\*:443:secure.contoso.com" https $certificate.Thumbprint $DisableLegacyTLS $storeLocation -passthru
既存のサイトにサイト バインドを追加し、レガシ TLS を無効にする例を次に示します。
New-IISSiteBinding -Name "Default Web Site" -BindingInformation $BindingInformation -CertificateThumbPrint $certificate.Thumbprint -Protocol https -SslFlag $DisableLegacyTLS, $CCS -Force -verbose
さらに、Netsh を使用してこの機能のトラブルシューティングとテストを行うことができます。
新しいバインドの追加:
netsh http add sslcert <通常のパラメーター> disablelegacytls=enable
既存のバインドの更新:
netsh http update sslcert <通常のパラメーター> disablelegacytls=enable
バインディングに設定されているかどうかの確認:
netsh http show sslcert <通常のパラメーター>
従来の TLS バージョンを無効化するかを監視する: 設定済み/未設定
オプション #3: C++ HTTP.sys API (現在使用可能)
レガシ TLS の無効化に加えて、HTTP.sysには次の追加が行われています。
HTTP_SERVICE_CONFIG_SSL_PARAM.DefaultFlags では、次の新しい値がサポートされるようになりました。
HTTP_SERVICE_CONFIG_SSL_FLAG_ENABLE_SESSION_TICKET: 特定の SSL エンドポイントのセッション チケットを有効または無効にします。
HTTP_SERVICE_CONFIG_SSL_FLAG_LOG_EXTENDED_EVENTS: 特定の SSL エンドポイントの拡張イベント ログを有効または無効にします。 追加のイベントは Windows イベント ログに記録されます。 現在サポートされているイベントは 1 つだけで、SSL ハンドシェイクが失敗したときにログに記録されます。
HTTP_SERVICE_CONFIG_SSL_FLAG_DISABLE_LEGACY_TLS: 特定の SSL エンドポイントのレガシ TLS バージョンを有効または無効にします。 このフラグを設定すると、そのエンドポイントの TLS1.0/1.1 が無効になり、HTTP2 暗号スイートに使用できる暗号スイートが制限されます。
HTTP_SERVICE_CONFIG_SSL_FLAG_DISABLE_TLS12: 特定の SSL エンドポイントに対して TLS1.2 を有効または無効にします。
HTTP_SERVICE_CONFIG_SSL_FLAG_DISABLE_HTTP2: 特定の SSL エンドポイントに対して HTTP/2 を有効または無効にします。
C++ で証明書ごとにこの機能を有効または無効にする最も簡単な方法は、HttpSetServiceConfiguration HTTP.sys API によって提供されるHTTP_SERVICE_CONFIG_SSL_FLAG_DISABLE_LEGACY_TLS フラグを使用することです。
[レガシ TLS を無効にする] が設定されている場合は、次の制限が適用されます。
SSL2、SSL3、TLS1.0、TLS1.1 のプロトコルを無効にします。
暗号化暗号 DES、3DES、RC4 を無効にします (そのため、AES のみが使用されます)。
CBC チェーン モードで暗号化暗号 AES を無効にします (そのため、AES GCM のみが使用されます)。
RSA キー交換を無効にします。
2048 未満のキー サイズで DH キー交換を無効にします。
キー サイズが 224 未満の ECDH キー交換を無効にします。
docs.Microsoft.com に関するこれらの変更に関する公式ドキュメントが近日公開予定です。
TLS バージョンの適用の次の手順
レガシ TLS を無効にすると、特定の証明書/エンドポイント バインドに TLS バージョン/暗号スイートのフロアを適用するための強力な新機能が提供されます。 また、この機能を有効にして発行された証明書の名前付けも計画する必要があります。 考慮事項の一部を次に示します。
TLS 1.2 を今すぐ適用するために既定のパスを自分のサービス エンドポイントに設定する必要があるか。また、TLS 1.0 を必要とするユーザーのバックアップ "レガシ" アクセス ポイントとして別の証明書を提供するか。
既に使用中の既定の Contoso 証明書でレガシ TLS を無効化する必要がありますか? その場合は、legacy.contoso.com 証明書を指定し、TLS 1.0 を許可するエンドポイントにバインドする必要があります。
これらの証明書の推奨される使用方法を顧客に最もよく伝える方法
この機能を利用して、TLS 1.2 以降を使用する義務があり、TLS 1.0 から移行に取り組んでいるユーザーなど、大規模な顧客グループのニーズを満たすことができます。これらはすべて、追加のハードウェア支出を必要としません。 Microsoft では、Windows Server 2019 での証明書ごとの TLS バージョン バインドの現在の可用性に加えて、顧客の要求に基づいて、オンライン サービス全体でレガシ TLS を無効にすることを確認します。