Exchange Server TLS 配置最佳做法
适用于:2016
2019
订阅版
本文档概述了在 Microsoft Exchange Server 上正确配置特定 TLS 版本的必要步骤。 它还详细介绍了如何优化 TLS 使用的密码套件和哈希算法。 与 Microsoft 365 或其他需要特定最低 TLS 标准的系统交互时,TLS 配置不正确可能会导致各种问题。
可以在 传输层安全 协议文档中找到有关 TLS 协议的详细信息。
提示
可以使用 Exchange HealthChecker 脚本检查 Exchange 服务器的当前 TLS 配置。
请仔细阅读,因为某些步骤只能在特定作系统或Exchange Server版本上执行。 每个部分都以矩阵开头,显示设置是否受支持,以及该设置是否已从特定的Exchange Server版本进行预配置,然后是启用或禁用特定 TLS 协议或功能的步骤。
禁用 TLS 版本之前要考虑的事项
请确保每个应用程序都支持保持启用的 TLS 版本。 注意事项,例如 (但不限于) :
- 域控制器和全局编录服务器是否支持仅 TLS 1.2 或 TLS 1.3 配置?
- 例如,合作伙伴应用程序是否支持仅 TLS 1.2 或 TLS 1.3 配置?
- 作系统 (OS) 是否支持 基于 WinHTTP 的最新 TLS 协议版本 TLS 1.2?
- 负载均衡器是否支持使用的 TLS 1.2 或 TLS 1.3?
- 桌面、移动和浏览器应用程序是否支持 TLS 1.2 或 TLS 1.3?
- 多功能打印机等设备是否支持 TLS 1.2 或 TLS 1.3?
- 与 Exchange Server 或 Microsoft 356 集成的第三方或自定义内部应用程序是否支持强大的 TLS 实现?
因此,我们强烈建议先在模拟生产环境的实验室中执行任何步骤,以便过渡到 TLS 1.2 或 TLS 1.3,然后才逐渐在生产环境中推出这些协议。
用于禁用下面所述的特定 TLS 版本的步骤适用于以下Exchange Server功能:
- 简单邮件传输协议 (SMTP)
- Outlook 客户端连接 (Outlook Anywhere/MAPI/HTTP)
- Exchange Active Sync (EAS)
- Outlook 网页版 (OWA)
- Exchange 管理员 Center (EAC) 和 Exchange 控制面板 (ECP)
- 自动发现
- Exchange Web 服务 (EWS)
- REST (Exchange Server 2016/2019)
- Exchange 通过 HTTPS 使用 PowerShell
- POP 和 IMAP
先决条件
WINDOWS SERVER 2022 年和 2025 Windows Server 15 上的 Exchange Server 2019 累积更新 (CU) 15 引入了 TLS 1.3 支持,SMTP 协议除外。 将来的更新将添加对此协议的支持。 TLS 1.2 支持随 Exchange Server 2013 CU19 和 Exchange Server 2016 CU8 一起引入。 默认情况下,Exchange Server 2019 支持 TLS 1.2。
Exchange Server没有Windows Server就无法运行,因此必须安装最新的作系统更新来运行稳定且安全的 TLS 实现。
它还需要安装 CU 支持的最新版本.NET Framework和相关修补程序。
根据你的作系统,确保以下更新也已到位, (在 Windows 汇报) 上安装了服务器时应安装这些更新:
如果作系统Windows Server 2012或Windows Server 2012 R2,必须先安装KB3161949和KB2973337,然后才能启用 TLS 1.2。
警告
Windows Server 2012和Windows Server 2012 R2 扩展支持已于 2023 年 10 月 10 日结束。 如果没有 ESU,这些服务器将不再接收Windows 安全中心 汇报。 强烈建议尽快迁移到受支持的版本!
请确保在应用 TLS 配置后重新启动Exchange Server。 服务器重启后,它将变为活动状态。
准备.NET Framework以从 Schannel 继承默认值
下表显示了默认.NET Framework Schannel 继承配置的Exchange Server/Windows Server组合:
Exchange Server | Windows Server | 支持 | 默认配置 |
---|---|---|---|
Exchange Server 2019 CU14 或更高版本 | 任何 | 是 | 是 (新安装仅) |
Exchange Server 2019 CU13 或更高版本 | 任何 | 是 | 必须手动配置部分 (SchUseStrongCrypto ) |
Exchange Server 2016 | 任何 | 是 | ) 不使用 (OS 默认值 |
Exchange Server 2013 | 任何 | 是 | ) 不使用 (OS 默认值 |
注册表SystemDefaultTlsVersions
值定义 .NET Framework 4.x 使用哪些安全协议版本默认值。 如果值设置为 1
,则 .NET Framework 4.x 继承其默认值, (Schannel) DisabledByDefault
注册表值。 如果值未定义,则其行为就像将值设置为 0
一样。
由 SchUseStrongCrypto
注册表值配置的强加密 () 使用更安全的网络协议 (TLS 1.3、TLS 1.2 和 TLS 1.1) ,并阻止不安全的协议。 SchUseStrongCrypto
仅影响应用程序中的客户端 (传出) 连接。 通过将 .NET Framework 4.x 配置为从 Schannel 继承其值,我们可以使用作系统支持的最新版本 TLS,包括 TLS 1.2 和 TLS 1.3。
启用 .NET Framework 4.x Schannel 继承
从提升的 PowerShell 窗口运行以下命令,配置.NET Framework 4.x Schannel 继承:
Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\.NETFramework\v4.0.30319" -Name "SystemDefaultTlsVersions" -Value 1 -Type DWord
Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\.NETFramework\v4.0.30319" -Name "SchUseStrongCrypto" -Value 1 -Type DWord
Set-ItemProperty -Path "HKLM:\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v4.0.30319" -Name "SystemDefaultTlsVersions" -Value 1 -Type DWord
Set-ItemProperty -Path "HKLM:\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v4.0.30319" -Name "SchUseStrongCrypto" -Value 1 -Type DWord
启用 .NET Framework 3.5 Schannel 继承
Exchange Server 2013 及更高版本不需要此设置。 但是,我们建议以与 .NET 4.x 设置相同的方式对其进行配置,以确保配置一致。
从提升的 PowerShell 窗口运行以下命令,配置.NET Framework 3.5 Schannel 继承:
Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\.NETFramework\v2.0.50727" -Name "SystemDefaultTlsVersions" -Value 1 -Type DWord
Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\.NETFramework\v2.0.50727" -Name "SchUseStrongCrypto" -Value 1 -Type DWord
Set-ItemProperty -Path "HKLM:\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v2.0.50727" -Name "SystemDefaultTlsVersions" -Value 1 -Type DWord
Set-ItemProperty -Path "HKLM:\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v2.0.50727" -Name "SchUseStrongCrypto" -Value 1 -Type DWord
配置 TLS 1.3 的步骤
下表显示了支持 TLS 1.3 的 Exchange Server/Windows Server 组合。 下表还显示了默认配置:
Exchange Server | Windows Server | 支持 | 默认配置 |
---|---|---|---|
Exchange Server 2019 CU15 | Windows Server 2022/2025 | 是 | 是 (enabled ) |
Exchange Server 2019 CU15 | Windows Server 2019 | 否 | 不适用 |
Exchange Server 2019 CU14 或更高版本 | 任何 | 否 | 不适用 |
Exchange Server 2016 | 任何 | 否 | 不适用 |
Exchange Server 2013 | 任何 | 否 | 不适用 |
启用 TLS 1.3
从提升的 PowerShell 窗口运行以下命令,为客户端和服务器连接启用 TLS 1.3:
New-Item -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols" -Name "TLS 1.3" -ErrorAction SilentlyContinue
New-Item -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.3" -Name "Client" -ErrorAction SilentlyContinue
New-Item -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.3" -Name "Server" -ErrorAction SilentlyContinue
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.3\Client" -Name "DisabledByDefault" -Value 0 -Type DWord
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.3\Client" -Name "Enabled" -Value 1 -Type DWord
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.3\Server" -Name "DisabledByDefault" -Value 0 -Type DWord
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.3\Server" -Name "Enabled" -Value 1 -Type DWord
根据 RFC 8446 TLS 1.3 使用与以前版本的 TLS 相同的密码套件空间。 但是,TLS 1.3 密码套件的定义不同,仅指定对称密码,不能用于 TLS 1.2。 同样,TLS 1.2 及更低版本的密码套件不能与 TLS 1.3 一起使用。
从提升的 PowerShell 窗口运行以下命令,以配置 TLS 1.3 密码套件:
Enable-TlsCipherSuite -Name TLS_AES_256_GCM_SHA384 -Position 0
Enable-TlsCipherSuite -Name TLS_AES_128_GCM_SHA256 -Position 1
禁用 TLS 1.3
从提升的 PowerShell 窗口运行以下命令,为客户端和服务器连接显式禁用 TLS 1.3:
New-Item -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols" -Name "TLS 1.3" -ErrorAction SilentlyContinue
New-Item -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.3" -Name "Client" -ErrorAction SilentlyContinue
New-Item -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.3" -Name "Server" -ErrorAction SilentlyContinue
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.3\Client" -Name "DisabledByDefault" -Value 1 -Type DWord
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.3\Client" -Name "Enabled" -Value 0 -Type DWord
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.3\Server" -Name "DisabledByDefault" -Value 1 -Type DWord
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.3\Server" -Name "Enabled" -Value 0 -Type DWord
从提升的 PowerShell 窗口中运行以下命令,以删除 TLS 1.3 密码套件:
Disable-TlsCipherSuite -Name TLS_AES_256_GCM_SHA384
Disable-TlsCipherSuite -Name TLS_AES_128_GCM_SHA256
配置 TLS 1.2 的步骤
下表显示了支持 TLS 1.2 的 Exchange Server/Windows Server 组合。 下表还显示了默认配置:
Exchange Server | Windows Server | 支持 | 默认配置 |
---|---|---|---|
Exchange Server 2019 | 任何 | 是 | 是 (enabled ) |
Exchange Server 2016 | 任何 | 是 | 否 |
Exchange Server 2013 | 任何 | 是 | 否 |
启用 TLS 1.2
从提升的 PowerShell 窗口运行以下命令,为客户端和服务器连接启用 TLS 1.2:
New-Item -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols" -Name "TLS 1.2" -ErrorAction SilentlyContinue
New-Item -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2" -Name "Client" -ErrorAction SilentlyContinue
New-Item -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2" -Name "Server" -ErrorAction SilentlyContinue
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client" -Name "DisabledByDefault" -Value 0 -Type DWord
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client" -Name "Enabled" -Value 1 -Type DWord
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server" -Name "DisabledByDefault" -Value 0 -Type DWord
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server" -Name "Enabled" -Value 1 -Type DWord
禁用 TLS 1.2
从提升的 PowerShell 窗口运行以下命令,为客户端和服务器连接显式禁用 TLS 1.2:
New-Item -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols" -Name "TLS 1.2" -ErrorAction SilentlyContinue
New-Item -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2" -Name "Client" -ErrorAction SilentlyContinue
New-Item -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2" -Name "Server" -ErrorAction SilentlyContinue
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client" -Name "DisabledByDefault" -Value 1 -Type DWord
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client" -Name "Enabled" -Value 0 -Type DWord
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server" -Name "DisabledByDefault" -Value 1 -Type DWord
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server" -Name "Enabled" -Value 0 -Type DWord
配置 TLS 1.1 的步骤
下表显示了支持 TLS 1.1 的 Exchange Server/Windows Server 组合。 下表还显示了默认配置:
Exchange Server | Windows Server | 支持 | 默认配置 |
---|---|---|---|
Exchange Server 2019 | 任何 | 是 | 是 (disabled ) |
Exchange Server 2016 | 任何 | 是 | 否 |
Exchange Server 2013 | 任何 | 是 | 否 |
启用 TLS 1.1
备注
Microsoft TLS 1.1 实现没有已知的安全漏洞。 但由于将来可能会发生协议降级攻击和其他 TLS 漏洞,因此建议仔细规划和禁用 TLS 1.1。 如果不仔细规划,可能会导致客户端失去连接。
从提升的 PowerShell 窗口运行以下命令,为客户端和服务器连接启用 TLS 1.1:
New-Item -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols" -Name "TLS 1.1" -ErrorAction SilentlyContinue
New-Item -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1" -Name "Client" -ErrorAction SilentlyContinue
New-Item -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1" -Name "Server" -ErrorAction SilentlyContinue
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Client" -Name "DisabledByDefault" -Value 0 -Type DWord
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Client" -Name "Enabled" -Value 1 -Type DWord
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Server" -Name "DisabledByDefault" -Value 0 -Type DWord
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Server" -Name "Enabled" -Value 1 -Type DWord
禁用 TLS 1.1
从提升的 PowerShell 窗口中运行以下命令,为客户端和服务器连接显式禁用 TLS 1.1:
New-Item -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols" -Name "TLS 1.1" -ErrorAction SilentlyContinue
New-Item -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1" -Name "Client" -ErrorAction SilentlyContinue
New-Item -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1" -Name "Server" -ErrorAction SilentlyContinue
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Client" -Name "DisabledByDefault" -Value 1 -Type DWord
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Client" -Name "Enabled" -Value 0 -Type DWord
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Server" -Name "DisabledByDefault" -Value 1 -Type DWord
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Server" -Name "Enabled" -Value 0 -Type DWord
配置 TLS 1.0 的步骤
下表显示了支持 TLS 1.0 的 Exchange Server/Windows Server 组合。 下表还显示了默认配置:
Exchange Server | Windows Server | 支持 | 默认配置 |
---|---|---|---|
Exchange Server 2019 | 任何 | 是 | 是 (disabled ) |
Exchange Server 2016 | 任何 | 是 | 否 |
Exchange Server 2013 | 任何 | 是 | 否 |
启用 TLS 1.0
备注
Microsoft TLS 1.0 实现没有已知安全漏洞。 但由于将来可能会有协议降级攻击和其他 TLS 漏洞,因此建议仔细规划和禁用 TLS 1.0。 如果不仔细规划,可能会导致客户端失去连接。
从提升的 PowerShell 窗口运行以下命令,为客户端和服务器连接启用 TLS 1.0:
New-Item -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols" -Name "TLS 1.0" -ErrorAction SilentlyContinue
New-Item -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0" -Name "Client" -ErrorAction SilentlyContinue
New-Item -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0" -Name "Server" -ErrorAction SilentlyContinue
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Client" -Name "DisabledByDefault" -Value 0 -Type DWord
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Client" -Name "Enabled" -Value 1 -Type DWord
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server" -Name "DisabledByDefault" -Value 0 -Type DWord
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server" -Name "Enabled" -Value 1 -Type DWord
禁用 TLS 1.0
从提升的 PowerShell 窗口运行以下命令,为客户端和服务器连接显式禁用 TLS 1.0:
New-Item -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols" -Name "TLS 1.0" -ErrorAction SilentlyContinue
New-Item -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0" -Name "Client" -ErrorAction SilentlyContinue
New-Item -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0" -Name "Server" -ErrorAction SilentlyContinue
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Client" -Name "DisabledByDefault" -Value 1 -Type DWord
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Client" -Name "Enabled" -Value 0 -Type DWord
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server" -Name "DisabledByDefault" -Value 1 -Type DWord
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server" -Name "Enabled" -Value 0 -Type DWord
配置 TLS 重新协商严格模式的步骤
TLS 严格模式是一项安全功能,可确保只有具有必要安全更新的客户端才能与服务器建立和重新协商 TLS 会话。
下表显示了默认 TLS 重新协商严格模式配置的Exchange Server/Windows Server组合:
Exchange Server | Windows Server | 支持 | 默认配置 |
---|---|---|---|
Exchange Server 2019 | 任何 | 是 | 是 (enabled ) |
Exchange Server 2016 | 任何 | 是 | 否 |
Exchange Server 2013 | 任何 | 否 | 不适用 |
启用 TLS 重新协商严格模式
从提升的 PowerShell 窗口运行以下命令,以启用重新协商严格模式:
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL" -Name "AllowInsecureRenegoClients" -Value 0 -Type DWord
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL" -Name "AllowInsecureRenegoServers" -Value 0 -Type DWord
禁用 TLS 重新协商严格模式
从提升的 PowerShell 窗口运行以下命令,以显式禁用重新协商严格模式:
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL" -Name "AllowInsecureRenegoClients" -Value 1 -Type DWord
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL" -Name "AllowInsecureRenegoServers" -Value 1 -Type DWord
验证 TLS 1.2 或 TLS 1.3 使用情况
启用 TLS 1.2 或 TLS 1.3 后,验证工作是否成功可能会有所帮助,并且系统能够协商 TLS 1.2 或 TLS 1.3 的入站 (服务器) 连接和出站 (客户端) 连接。 有几种方法可用于验证 TLS 使用情况,其中一些方法将在以下部分讨论。
Exchange Server中使用的许多协议都是基于 HTTP 的,因此会遍历 Exchange 服务器上的 IIS 进程。 MAPI/HTTP、Outlook Anywhere、Exchange Web Services、Exchange ActiveSync、REST、OWA & EAC、脱机通讯簿下载和自动发现是Exchange Server使用的基于 HTTP 的协议的示例。
IIS 日志记录
Internet Information Services (IIS) 团队添加了Windows Server 2012 R2 或更高版本的功能,以记录与加密协议版本和密码相关的自定义字段。 建议查看博客,获取 有关如何启用这些自定义字段 并开始分析日志的文档,以获取有关环境中与基于 HTTP 的协议相关的传入连接的信息。
Windows Server 2012 R2 之前的 Windows Server 版本不存在这些 IIS 自定义字段。 负载均衡器或防火墙日志可能能够提供此信息。 请向供应商请求指导,以确定其日志是否可提供此信息。
Microsoft Edge 开发人员工具
在连接到 Outlook 网页版 OWA) 或 Exchange (管理员 Center (ECP) 时,可以利用 Developer Tools
Microsoft Edge 提供的 检查用于建立安全连接的 TLS 版本。 为此,请按照下列步骤操作:
-
打开 Microsoft Edge 浏览器,并建立与 OWA 或 ECP 的 HTTPS 连接。
-
按
CTRL + SHIFT + I
打开Developer Tools
。 -
单击
+
右上角的符号。 -
在下拉菜单中单击
Security
。 -
检查 部分中的
Connection - secure connection settings
TLS 版本。
邮件头
Exchange Server 2016 或更高版本中的邮件头数据提供在发送和接收主机交换一封邮件时协商和使用的协议。 可以使用 消息标头分析器 获取每个跃点的清晰概述。
消息标头示例有一个已知异常。 当客户端使用经过身份验证的 SMTP (也称为 SMTP 客户端提交协议) 连接到服务器来发送邮件时,消息标头中的 TLS 版本不会显示客户端使用的正确 TLS 版本。 Microsoft正在调查在未来更新中添加此信息的可能性。
SMTP 日志记录
Exchange Server中的 SMTP 日志包含两个系统之间的电子邮件交换期间使用的加密协议和其他加密相关信息。
当服务器为 时, SMTP receiving system
根据使用的 TLS 版本在日志中搜索 Server value
。 如果服务器是 SMTP sending system
,则根据使用的 TLS 版本在日志中搜索 Client value
。
TLS 版本 | 服务器值 | 客户端值 |
---|---|---|
TLS 1.0 | SP_PROT_TLS1_0_SERVER | SP_PROT-TLS1_0_CLIENT |
TLS 1.1 | SP_PROT_TLS1_1_SERVER | SP_PROT-TLS1_1_CLIENT |
TLS 1.2 | SP_PROT_TLS1_2_SERVER | SP_PROT-TLS1_2_CLIENT |
备注
即将发布的 Exchange 2019 CU15 更新中将包含对 SMTP TLS 1.3 的支持。
以下示例在运行邮箱角色的 Exchange 服务器上搜索日志文件,查找使用 TLS 1.0 协议建立的连接:
Select-String -Path (((Get-TransportService -Identity $env:COMPUTERNAME).ReceiveProtocolLogPath).PathName.Replace("Hub","FrontEnd")+"\*.log") "SP_PROT_TLS1_0"
在运行边缘传输角色的 Exchange 服务器上搜索使用 TLS 1.1 协议建立的连接的日志文件的示例:
Select-String -Path (((Get-TransportService -Identity $env:COMPUTERNAME).ReceiveProtocolLogPath).PathName+"\*.log") "SP_PROT_TLS1_1"
POP 和 IMAP
不存在公开用于 POP 和 IMAP 客户端的加密协议版本的日志记录。 若要捕获此信息,可能需要从服务器捕获 Netmon 跟踪,或者在流量流经负载均衡器或发生 HTTPS 桥接的防火墙时对其进行检查。
密码和哈希算法最佳做法
本部分中的步骤可用于使用与 2019 Exchange Server 相同的一组密码和哈希算法配置 Exchange Server 2016。 Exchange Server 2019 不需要这些步骤,因为它已附带预配置的密码和哈希算法设置。
作为先决条件,必须首先配置 TLS 1.2,然后禁用 TLS 1.0 和 TLS 1.1。 考虑单独应用以下设置,不要禁用 TLS 1.0 和 TLS 1.1,以隔离有问题的客户端的配置问题。
启用建议的密码套件
Windows Server 2012和Windows Server 2012 R2
从提升的 PowerShell 窗口运行以下命令,以配置建议的密码套件:
New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Cryptography\Configuration\Local\SSL\00010002" -Name "Functions" -PropertyType MultiString -Value "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P384,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384_P384,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384_P256,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256_P384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256_P256,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384_P384,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384_P256,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256_P384,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256_P256,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P384,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P256,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA_P384,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA_P256,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA_P384,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA_P256,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256" -Force
Windows Server 2016
从提升的 PowerShell 窗口运行以下命令,以配置建议的密码套件。
备注
可以通过利用 组策略 对象 (GPO) 来配置密码套件。 如果它们已通过 GPO 配置,或者Functions
注册表项已存在于路径下HKLM:\SOFTWARE\Policies\Microsoft\Cryptography\Configuration\SSL\00010002
,则无法使用 Enable-TlsCipherSuite 或 Disable-TLSCipherSuite cmdlet 手动配置它们。
首先,禁用所有密码套件:
foreach ($suite in (Get-TLSCipherSuite).Name) {
if (-not([string]::IsNullOrWhiteSpace($suite))) {
Disable-TlsCipherSuite -Name $suite -ErrorAction SilentlyContinue
}
}
接下来,仅重新启用建议的 TLS 1.2 密码套件:
$cipherSuites = @('TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384',
'TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256',
'TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384',
'TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256',
'TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384',
'TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256',
'TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384',
'TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256')
$suiteCount = 0
foreach ($suite in $cipherSuites) {
Enable-TlsCipherSuite -Name $suite -Position $suiteCount
$suiteCount++
}
禁用过时的密码和哈希
从提升的 PowerShell 窗口运行以下命令,以显式禁用过时的密码和哈希:
New-Item -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL" -Name "Hashes" -ErrorAction SilentlyContinue
New-Item -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL" -Name "Ciphers" -ErrorAction SilentlyContinue
(Get-Item HKLM:).OpenSubKey("SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers", $true).CreateSubKey("DES 56/56")
(Get-Item HKLM:).OpenSubKey("SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers", $true).CreateSubKey("NULL")
(Get-Item HKLM:).OpenSubKey("SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers", $true).CreateSubKey("RC2 40/128")
(Get-Item HKLM:).OpenSubKey("SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers", $true).CreateSubKey("RC2 56/128")
(Get-Item HKLM:).OpenSubKey("SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers", $true).CreateSubKey("RC2 56/56")
(Get-Item HKLM:).OpenSubKey("SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers", $true).CreateSubKey("RC4 40/128")
(Get-Item HKLM:).OpenSubKey("SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers", $true).CreateSubKey("RC4 56/128")
(Get-Item HKLM:).OpenSubKey("SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers", $true).CreateSubKey("RC4 64/128")
(Get-Item HKLM:).OpenSubKey("SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers", $true).CreateSubKey("RC4 128/128")
(Get-Item HKLM:).OpenSubKey("SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers", $true).CreateSubKey("Triple DES 168")
New-Item -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Hashes" -Name "MD5" -ErrorAction SilentlyContinue
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\DES 56/56" -Name "Enabled" -Value 0 -Type DWord
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\NULL" -Name "Enabled" -Value 0 -Type DWord
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\RC2 40/128" -Name "Enabled" -Value 0 -Type DWord
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\RC2 56/128" -Name "Enabled" -Value 0 -Type DWord
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\RC2 56/56" -Name "Enabled" -Value 0 -Type DWord
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\RC4 40/128" -Name "Enabled" -Value 0 -Type DWord
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\RC4 56/128" -Name "Enabled" -Value 0 -Type DWord
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\RC4 64/128" -Name "Enabled" -Value 0 -Type DWord
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\RC4 128/128" -Name "Enabled" -Value 0 -Type DWord
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\Triple DES 168" -Name "Enabled" -Value 0 -Type DWord
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Hashes\MD5" -Name "Enabled" -Value 0 -Type DWord
配置椭圆曲线首选项
建议禁用椭圆曲线, curve25519
因为它在 FIPS 模式下不可用。 有关详细信息,请参阅Windows 10版本 1607 及更高版本中的 TLS 椭圆曲线。
从提升的 PowerShell 窗口运行以下命令,以配置省略号曲线首选项:
Disable-TlsEccCurve -Name "curve25519"
Enable-TlsEccCurve -Name "NistP384" -Position 0
Enable-TlsEccCurve -Name "NistP256" -Position 1