14

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

DisabledByDefault和 和有什么不一样Enabled?它们似乎是多余的。

4

2 回答 2

15

DisabledByDefault 和 Enabled 不是多余的

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

Enabledflag 设置为 0 时,SSL / TLS 版本 X 被禁用并且不能被任何 SSPI 应用程序协商(即使DisabledByDefaultflag 设置为 0)。

有关更多信息,Microsoft 文档描述了维护或不维护的 SSL 版本,以及如何禁用它。

于 2018-08-22T08:02:37.600 回答
9

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

因此,Enabled控制您可以在此处启用的协议,同时DisabledByDefault指定如果您省略此字段(即保留为)是否启用协议0

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

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

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

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

如果您尝试使用未启用的协议,目前还不清楚会发生什么。从最后一段来看,并且该案例缺少任何相关的AcquireCredentialsHandle错误代码,我的猜测是它可能被忽略了。

于 2018-08-22T11:00:57.427 回答