一尘不染

为 SQL Server 2016 数据库邮件启用 TLS 1.2

sql-server

这个问题让我困惑了将近 1 周。希望我们社区中有人遇到过同样的问题并且已经找到了解决方案。

所以这是我的问题:

根据我们公司的政策,我们希望数据库邮件能够在启用 TLS 1.2 并禁用 TLS 1.0 和 TLS 1.1 的情况下通过端口 25 发送电子邮件。

我们的邮件服务器是 Exchange Server 2010,我们的 SQL Server 2016(开发版和企业版)盒子有 Windows Server 2016 标准版的操作系统。

我们的 SQL Server 版本是:

select @@version
----------------------------------------
Microsoft SQL Server 2016 (SP1-CU7-GDR) (KB4057119) - 13.0.4466.4 (X64) 
    Dec 22 2017 11:25:00 
    Copyright (c) Microsoft Corporation
    Developer Edition (64-bit) on Windows Server 2016 Datacenter 10.0 <X64> (Build 14393: ) (Hypervisor)

我们有如下所示的数据库邮件配置。

在此处输入图像描述

问题是每当我们打开 SSL

use msdb
exec dbo.sysmail_update_account_sp @account_id=2, @enable_ssl = 1;

我们不能发送数据库邮件(无论我们的 SMTP 身份验证是 Windows 身份验证、基本身份验证还是匿名身份验证)。db mail log中报错信息如下:

信息

由于邮件服务器故障,无法将邮件发送给收件人。(使用帐户 2(2018-07-30T10:52:41)发送邮件。异常消息:无法将邮件发送到邮件服务器。(发送邮件失败。)。)

但是如果我们把这个SSL关掉,db邮件发出去就没有问题了。

那么我们如何启用 SSL 并将 TLS 1.2 用于数据库邮件呢?

我通过添加注册表启用了 TLS 1.2,如下所示

在此处输入图像描述


阅读 170

收藏
2022-11-21

共1个答案

一尘不染

TLS1.2 是目前(2019 年 3 月)唯一被认为安全的 TLS 版本。花了相当多的时间和精力才发现有 2 个基本的、额外的设置是使这个工作所需的,这些设置不是众所周知的,也没有很好地记录在 Microsoft 或网络上。 以下内容可以为您节省大量时间和精力

这些是为我们解决问题的 2 个新注册表设置:

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319]
"SchUseStrongCrypto"=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v4.0.30319]
"SchUseStrongCrypto"=dword:00000001

这是对我们最终找到此信息的线程的引用,隐藏在线程的中途:.NET Framework 4.0 中的 TLS 1.2

下面是我放在一起的一个简单的可执行注册表文件的内容,它将进行 2 个新设置和上面线程中已经显示的设置(即这会进行所有必要的注册表设置*):

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319]
"SchUseStrongCrypto"=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v4.0.30319]
"SchUseStrongCrypto"=dword:00000001

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2]

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client]
"DisabledByDefault"=dword:00000000
"Enabled"=dword:00000001

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server]
"DisabledByDefault"=dword:00000000
"Enabled"=dword:00000001

注意 1:需要重新启动 SQL 才能使这些设置生效,但最好重新启动 Windows,因为新设置通常会影响 .NET 4.x。

注意 2:在 SQL 中,必须在邮件配置文件中勾选 SSL 复选框才能使用 TLS1.2。

*注意 3:仅供参考,我们运行了免费工具 Crypto V2,并在开始运行之前启用了“最佳实践”选项。之后我们使用新的 Crypto 版本 3 验证了我们的更改。

希望这会为其他人节省大量时间、精力和挫败感;)

2022-11-21