Microsoftは、トランスポート層セキュリティ(TLS)のベストプラクティスガイダンスを提供します。このドキュメントでは、特定のプロトコルを有効または無効にできるレジストリキーについて説明します。
たとえば、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
DisabledByDefault
とEnabled
の違いは何ですか?それらは冗長に見えます。
SCHANNEL_CRED
構造体 つまり セキュアチャネルのセットアップの一部としてAcquireCredentialsHandle
に渡されます で、サポートするプロトコルをオプションで手動で選択できます。 、grbitEnabledProtocols
ビットマスクフィールド。
したがって、Enabled
はここで有効にできるプロトコルを管理し、DisabledByDefault
はこのフィールドを省略した場合にプロトコルを有効にするかどうかを指定します(つまり、0
のままにします)。
DisabledByDefault
を1
に設定することを推奨しています。また、Enabled
を0
に設定することに加えて、このフィールドの値を自動生成するためにDisabledByDefault
が無条件に使用されるように見えます省略されています。このフィールドのメモには、新しいコードでの使用は推奨されていません。したがって、これらの2つのレジストリ値はほとんど冗長です。
新規開発の場合、アプリケーションは
grbitEnabledProtocols
をゼロに設定し、デフォルトでシステムで有効になっているプロトコルバージョンを使用する必要があります。このメンバーは、Microsoft Unified Security Protocol Providerセキュリティパッケージでのみ使用されます。
グローバルシステムレジストリ設定は、この値よりも優先されます。たとえば、レジストリでSSL3が無効になっている場合、このメンバーを使用してSSL3を有効にすることはできません。
有効になっていないプロトコルを使用しようとするとどうなるかは不明です。最後の段落と この場合に関連するAcquireCredentialsHandle
エラーコードの欠如 から判断すると、おそらく無視されると思います。
DisabledByDefault
フラグが1に設定されている場合、SSL/TLSバージョンXはデフォルトでは使用されません。 SSPIアプリがこのバージョンのSSL/TLSの使用を要求すると、ネゴシエートされます。一言で言えば、DisabledByDefault
フラグを使用してもSSLは無効になりません。
Enabled
フラグが0に設定されている場合、SSL/TLSバージョンXは無効になり、SSPIアプリでネゴシエートできません(DisabledByDefault
フラグが0に設定されていても)。
詳細については、 Microsoftのドキュメント で、SSLバージョンが維持されているかどうか、および無効にする方法が説明されています。