Microsoft Windows 上的 DisabledByDefault 和 Enabled SSL/TLS 注册表项有什么区别?
What is the difference between the DisabledByDefault and Enabled SSL/TLS registry keys on Microsoft Windows?
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
有什么区别?它们似乎是多余的。
DisabledByDefault 和 Enabled 不是多余的
当DisabledByDefault
标志设置为1时,默认不使用SSL/TLS版本X。如果 SSPI 应用程序请求使用此版本的 SSL/TLS,将进行协商。简而言之,当您使用 DisabledByDefault
标志时,SSL 不会被禁用。
当 Enabled
标志设置为 0 时,SSL / TLS 版本 X 被禁用并且无法通过任何 SSPI 应用程序协商(即使 DisabledByDefault
标志设置为 0)。
有关详细信息,Microsoft documentation 描述维护或不维护的 SSL 版本,以及如何禁用它。
在 SCHANNEL_CRED
structure that is passed to AcquireCredentialsHandle
as part of setting up a secure channel 中,您可以选择手动 select 要支持的协议,在 grbitEnabledProtocols
位掩码字段中。
因此,Enabled
控制您可以在此处启用哪些协议,而 DisabledByDefault
指定如果您省略此字段(即保留它如 0
).
- 除了将
Enabled
设置为 0
之外,Managing SSL/TLS Protocols and Cipher Suites for AD FS | Microsoft Docs 文章还建议将 DisabledByDefault
设置为 1
以禁用协议。所以 看起来 DisabledByDefault
被无条件地用于自动生成这个字段的值,如果它被省略的话。
该领域的注释说不建议在新代码中使用它。所以这两个注册表值 almost 是多余的:
For new development, applications should set grbitEnabledProtocols
to
zero and use the protocol versions enabled on the system by default.
This member is used only by the Microsoft Unified Security Protocol
Provider security package.
The global system registry settings take precedence over this value.
For example, if SSL3 is disabled in the registry, it cannot be enabled
using this member.
不清楚如果您尝试使用未启用的协议会发生什么。从最后一段和 a lack of any relevant AcquireCredentialsHandle
error code for this case 来看,我猜它可能被忽略了。
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
有什么区别?它们似乎是多余的。
DisabledByDefault 和 Enabled 不是多余的
当DisabledByDefault
标志设置为1时,默认不使用SSL/TLS版本X。如果 SSPI 应用程序请求使用此版本的 SSL/TLS,将进行协商。简而言之,当您使用 DisabledByDefault
标志时,SSL 不会被禁用。
当 Enabled
标志设置为 0 时,SSL / TLS 版本 X 被禁用并且无法通过任何 SSPI 应用程序协商(即使 DisabledByDefault
标志设置为 0)。
有关详细信息,Microsoft documentation 描述维护或不维护的 SSL 版本,以及如何禁用它。
在 SCHANNEL_CRED
structure that is passed to AcquireCredentialsHandle
as part of setting up a secure channel 中,您可以选择手动 select 要支持的协议,在 grbitEnabledProtocols
位掩码字段中。
因此,Enabled
控制您可以在此处启用哪些协议,而 DisabledByDefault
指定如果您省略此字段(即保留它如 0
).
- 除了将
Enabled
设置为0
之外,Managing SSL/TLS Protocols and Cipher Suites for AD FS | Microsoft Docs 文章还建议将DisabledByDefault
设置为1
以禁用协议。所以 看起来DisabledByDefault
被无条件地用于自动生成这个字段的值,如果它被省略的话。
该领域的注释说不建议在新代码中使用它。所以这两个注册表值 almost 是多余的:
For new development, applications should set
grbitEnabledProtocols
to zero and use the protocol versions enabled on the system by default.This member is used only by the Microsoft Unified Security Protocol Provider security package.
The global system registry settings take precedence over this value. For example, if SSL3 is disabled in the registry, it cannot be enabled using this member.
不清楚如果您尝试使用未启用的协议会发生什么。从最后一段和 a lack of any relevant AcquireCredentialsHandle
error code for this case 来看,我猜它可能被忽略了。