Windows サーバー 2019 上で証明書バインドごとに使用できるようになった TLS バージョン適用機能

この投稿の作成者

Andrew Marshall、主席セキュリティ プログラム マネージャー、顧客セキュリティおよび信頼

Gabriel Montenegro、主席プログラム マネージャー、コア ネットワーク

Niranjan Inamdar、シニア ソフトウェア エンジニア、コア ネットワーク

Michael Brown、シニア ソフトウェア エンジニア、インターネット インフォメーション サービス

Ivan Pashov、主席ソフトウェア エンジニアリング リード、コア ネットワーク

2019年 8月

世界中のエンジニアが TLS 1.0 への依存を排除する作業を行うときに、自身のセキュリティ ニーズと顧客の移行の準備状況のバランスをとるという複雑な課題が発生します。 これまで、古いオペレーティング システムに TLS 1.2 サポートを追加したり、クライアントによる弱い TLS 使用を検出するための新しいログ形式をIIS に提供したり、TLS 1.0の依存関係を排除するための最新の技術ガイダンスを提供したりすることで、お客様がこれらの問題に対処できるよう支援してきました。

今回、Microsoft では、TLS 1.2 以上への移行を簡単にする Windowsの強力な新機能を発表しました。 KB4490481 以降、Windows サーバー 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 バージョンの選択と証明書バインドを示しています。 これは既定の機能です。

Default TLS Version selection

図 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 バージョンを割り当てることができます。

Enforcing minimum TLS version for a selected certificate

図 2: 選択した証明書 (Secure.contoso.com) に最小 TLS バージョンを強制するレガシ TLS 機能を無効にします。

機能配置 ガイダンス

レガシ TLSの無効化機能は、インターネット インフォメーション サービス (IIS) サーバー UI、PowerShell コマンドまたは C++ HTTP.sys APIを使用して配置できます。

オプション 1: IIS UIの構成 (Windows 10 バージョン 2004 および Windows サーバー バージョン 2004 以降で使用可能)

次に示すように、SSL 証明書 "secure.contoso.com"のサイト バインドを作成し、[Disable Legacy TLS]\(レガシ TLSを無効にする\)をオンにして、[OK]をクリックします。

IIS UI

オプション 2: PowerShell (Windows 10 バージョン 2004 および Windows サーバー バージョン 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 <regular parameters> disablelegacytls=enable

  • 既存のバインドの更新:

    netsh http update sslcert <regular parameters> disablelegacytls=enable

  • バインディングに設定されているかどうかを確認します。

    netsh http show sslcert <通常のパラメーター>

    レガシー TLS バージョンの無効化に注意: 設定/未設定

オプション #3: C++ HTTP.sys API (現在利用可能)

レガシ TLSの無効化と共に、HTTP.sys には次の追加が行われています。

  • HTTP_SERVICE_CONFIG_SSL_PARAM.DefaultFlags は、次の新しい値をサポートするようになりました。

  • HTTP_Standard EditionRVICE_CONFIG_SSL_FLAG_ENABLE_Standard EditionSSION_TICKET: 特定の SSL エンドポイントのセッション チケットを有効または無効にします。

  • HTTP_Standard EditionRVICE_CONFIG_SSL_FLAG_LOG_EXTENDED_EVENTS: 特定の SSL エンドポイントの拡張イベント ログを有効または無効にします。 追加のイベントは Windows イベント ログに記録されます。 現時点でサポートされているイベントは1つだけで、SSL ハンドシェイクが失敗したときにログに記録されます。

  • HTTP_Standard EditionRVICE_CONFIG_SSL_FLAG_DISABLE_LEGACY_TLS: 特定の SSL エンドポイントのレガシ TLS バージョンを有効または無効にします。 このフラグを設定すると、そのエンドポイントの TLS1.0/1.1 が無効になり、使用できる暗号スイートが HTTP2 暗号スイートに制限されます。

  • HTTP_Standard EditionRVICE_CONFIG_SSL_FLAG_DISABLE_TLS12: 特定の SSL エンドポイントに対して TLS1.2を有効または無効にします。

  • HTTP_Standard EditionRVICE_CONFIG_SSL_FLAG_DISABLE_HTTP2: 特定の SSL エンドポイントに対して HTTP/2を有効または無効にします。

C++ で証明書ごとにこの機能を有効または無効にする最も簡単な方法は、HttpSetServiceConfiguration HTTP.sys API によって提供される HTTP_SERVICE_CONFIG_SSL_FLAG_DISABLE_LEGACY_TLS フラグを使用することです。

[Disable Legacy TLS]\(レガシ TLSを無効にする\) が設定されている場合は、次の制限が適用されます。

  • SSL2、SSL3、TLS 1.0、および TLS 1.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 サーバー 2019 での証明書ごとの TLS バージョン バインドの現在の可用性に加えて、お客様の要求に基づいて、オンライン サービス全体でレガシ TLSの無効化を使用可能にすることを検討しています。