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
有什么区别?它们似乎是多余的。
答案 0 :(得分:8)
将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
structure的passed to AcquireCredentialsHandle
as part of setting up a secure channel中,您可以选择在grbitEnabledProtocols
位掩码字段中手动选择要支持的协议。
因此, Enabled
控制着您可以在此处启用哪些协议,而DisabledByDefault
指定了如果忽略此字段,则是否启用了协议(即,将其保留为{{1} }。
0
设置为DisabledByDefault
以外,Managing SSL/TLS Protocols and Cipher Suites for AD FS | Microsoft Docs文章还建议将禁用协议的1
设置为Enabled
。因此,好像0
被无条件地用于自动生成该字段的值(如果省略了该值)。 该字段的注释说,不建议在新代码中使用它。因此,这两个注册表值几乎是 多余的:
对于新开发,应用程序应将
DisabledByDefault
设置为 零,并默认使用系统上启用的协议版本。此成员仅由Microsoft统一安全协议使用 提供者安全软件包。
全局系统注册表设置优先于此值。 例如,如果注册表中禁用了SSL3,则无法启用它 使用该成员。
目前还不清楚如果尝试使用未启用的协议会发生什么。从最后一段和a lack of any relevant AcquireCredentialsHandle
error code for this case来看,我的猜测是它可能被忽略了。