web-dev-qa-db-ja.com

Microsoft WindowsのDisabledByDefaultとEnabled SSL / TLSレジストリキーの違いは何ですか?

Microsoftは、トランスポート層セキュリティ(TLS)のベストプラクティスガイダンスを提供します。このドキュメントでは、特定のプロトコルを有効または無効にできるレジストリキーについて説明します。

https://docs.Microsoft.com/en-us/dotnet/framework/network-programming/tls#configuring-schannel-protocols-in-the-windows-registry

たとえば、TLS 1.2を有効にするには、次のレジストリキーを追加できます。

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client]
"DisabledByDefault"=dword:00000000
"Enabled"=dword:FFFFFFFF

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server]
"DisabledByDefault"=dword:00000000
"Enabled"=dword:FFFFFFFF

DisabledByDefaultEnabledの違いは何ですか?それらは冗長に見えます。

11

SCHANNEL_CRED構造体 つまり セキュアチャネルのセットアップの一部としてAcquireCredentialsHandleに渡されます で、サポートするプロトコルをオプションで手動で選択できます。 、grbitEnabledProtocolsビットマスクフィールド。

したがって、Enabledはここで有効にできるプロトコルを管理し、DisabledByDefaultはこのフィールドを省略した場合にプロトコルを有効にするかどうかを指定します(つまり、0のままにします)。

  • ADのSSL/TLSプロトコルと暗号スイートの管理FS | Microsoft Docs の記事では、無効なプロトコルに対してDisabledByDefault1に設定することを推奨しています。また、Enabled0に設定することに加えて、このフィールドの値を自動生成するためにDisabledByDefaultが無条件に使用されるように見えます省略されています。

このフィールドのメモには、新しいコードでの使用は推奨されていません。したがって、これらの2つのレジストリ値はほとんど冗長です。

新規開発の場合、アプリケーションはgrbitEnabledProtocolsをゼロに設定し、デフォルトでシステムで有効になっているプロトコルバージョンを使用する必要があります。

このメンバーは、Microsoft Unified Security Protocol Providerセキュリティパッケージでのみ使用されます。

グローバルシステムレジストリ設定は、この値よりも優先されます。たとえば、レジ​​ストリでSSL3が無効になっている場合、このメンバーを使用してSSL3を有効にすることはできません。

有効になっていないプロトコルを使用しようとするとどうなるかは不明です。最後の段落と この場合に関連するAcquireCredentialsHandleエラーコードの欠如 から判断すると、おそらく無視されると思います。

6
ivan_pozdeev

DisabledByDefaultとEnabledは冗長ではありません

DisabledByDefaultフラグが1に設定されている場合、SSL/TLSバージョンXはデフォルトでは使用されません。 SSPIアプリがこのバージョンのSSL/TLSの使用を要求すると、ネゴシエートされます。一言で言えば、DisabledByDefaultフラグを使用してもSSLは無効になりません。

Enabledフラグが0に設定されている場合、SSL/TLSバージョンXは無効になり、SSPIアプリでネゴシエートできません(DisabledByDefaultフラグが0に設定されていても)。

詳細については、 Microsoftのドキュメント で、SSLバージョンが維持されているかどうか、および無効にする方法が説明されています。

11
Trevor65