Microsoft Windows上的DisabledByDefault和Enabled SSL/TLS注册表项之间有什么区别?

Tim*_*ver 11 windows ssl schannel

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
Run Code Online (Sandbox Code Playgroud)

DisabledByDefault和之间有什么区别Enabled?他们似乎多余.

Tre*_*r65 11

DisabledByDefault和Enabled不是多余的

DisabledByDefault标志设置为1时,默认情况下不使用SSL / TLS版本X。如果SSPI应用程序请求使用此版本的SSL / TLS,则将对其进行协商。简而言之,使用DisabledByDefault标志时不会禁用SSL 。

Enabled标志设置为0时,SSL / TLS版本X被禁用,并且任何SSPI应用程序都不能对其进行协商(即使DisabledByDefault标志设置为0)。

有关更多信息,Microsoft文档描述了是否维护什么SSL版本以及如何禁用它。


iva*_*eev 6

作为设置安全通道的一部分而传递给SCHANNEL_CRED结构中,可以选择在bitmask字段中手动选择要支持的协议。AcquireCredentialsHandlegrbitEnabledProtocols

因此,Enabled控制您可以在此处启用哪些协议,同时DisabledByDefault指定如果您忽略此字段(即,将其保留为0则是否启用该协议

该字段的注释说,不建议在新代码中使用它。因此,这两个注册表值几乎是多余的:

对于新开发,应用程序应设置grbitEnabledProtocols为零,并默认使用系统上启用的协议版本。

该成员仅由Microsoft统一安全协议提供程序安全软件包使用。

全局系统注册表设置优先于此值。例如,如果在注册表中禁用了SSL3,则无法使用此成员启用它。

目前尚不清楚如果尝试使用未启用的协议会发生什么。从最后一段判断,并且AcquireCredentialsHandle这种情况下没有任何相关的错误代码,我想这很可能被忽略了。