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

时间:2018-07-18 15:11:54

标签: 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

DisabledByDefaultEnabled有什么区别?它们似乎是多余的。

2 个答案:

答案 0 :(得分:8)

DisabledByDefault和Enabled不是多余的

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

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

有关更多信息,Microsoft documentation介绍了是否维护什么SSL版本以及如何禁用它。

答案 1 :(得分:4)

SCHANNEL_CRED structurepassed to AcquireCredentialsHandle as part of setting up a secure channel中,您可以选择在grbitEnabledProtocols位掩码字段中手动选择要支持的协议。

因此, Enabled控制着您可以在此处启用哪些协议,而DisabledByDefault指定了如果忽略此字段,则是否启用了协议(即,将其保留为{{1} }。

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

  

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

     

此成员仅由Microsoft统一安全协议使用   提供者安全软件包。

     

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

目前还不清楚如果尝试使用未启用的协议会发生什么。从最后一段和a lack of any relevant AcquireCredentialsHandle error code for this case来看,我的猜测是它可能被忽略了。