Exchange Server TLS 配置最佳做法

本文档介绍在 Exchange Server 2013、Exchange Server 2016 和 Exchange Server 2019 上正确配置 (启用或禁用) 特定 TLS 版本的所需步骤。 本文还介绍了如何优化 TLS 使用的密码套件和哈希算法。 如果未正确配置 TLS,则与 Microsoft 365 或其他系统交互时,可能会遇到各种问题,这些系统以需要特定的最低 TLS 标准的方式进行配置。

若要详细了解 TLS (和 SSL) 协议,请阅读 传输层安全协议 一文。

重要

请仔细阅读,因为此处所述的某些步骤只能在特定操作系统或特定Exchange Server版本上执行。

每个部分的开头都有一个矩阵,显示设置是否受支持,以及是否已从某个Exchange Server版本预配置。

禁用 TLS 版本之前要考虑的事项

提示

可以使用 Exchange HealthChecker 脚本检查 Exchange 服务器的当前 TLS 配置。

请确保每个应用程序都支持保持启用的 TLS 版本。 注意事项,例如 (但不限于) :

  • 域控制器和全局编录服务器是否支持,例如仅 TLS 1.2 配置?
  • 合作伙伴应用程序是否 ((包括但不限于 SharePoint、Lync、Skype for Business 等)) 支持,例如仅限 TLS 1.2 的配置?
  • 是否使用 Outlook 更新了较旧的 Windows 7 桌面以支持 TLS 1.2 over WinHTTP
  • 负载均衡器是否支持使用的 TLS 1.2?
  • 桌面、移动和浏览器应用程序是否支持 TLS 1.2?
  • 多功能打印机等设备是否支持 TLS 1.2?
  • 与 Exchange Server 或 Microsoft 356 集成的第三方或自定义内部应用程序是否支持强大的 TLS 实现?

因此,我们强烈建议你在过渡到 TLS 1.2 和远离旧版安全协议之前,先在模拟生产环境的实验室中执行任何步骤,然后再慢慢开始在生产环境中推出这些协议。

用于禁用特定 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

先决条件

Exchange Server 2013 CU19 和 Exchange Server 2016 CU8 添加了 TLS 1.2 支持。 默认情况下,Exchange Server 2019 支持 TLS 1.2。

Exchange Server在没有 Windows Server 的情况下无法运行,因此安装最新的操作系统更新以运行稳定且安全的 TLS 实现非常重要。

它还需要安装 CU 支持的最新版本.NET Framework和相关修补程序。

根据你的操作系统,确保以下更新也已到位, (在 Windows 汇报) 上安装了服务器时应安装这些更新:

如果操作系统Windows Server 2012或Windows Server 2012 R2,必须先安装KB3161949KB2973337,然后才能启用 TLS 1.2。

警告

Windows Server 2012Windows 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 任何 必须手动配置部分 (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.2 和 TLS 1.1) 并阻止不安全的协议。 SchUseStrongCrypto 仅影响应用程序中的客户端 (传出) 连接。 通过将 .NET Framework 4.x 配置为从 Schannel 继承其值,我们可以使用操作系统支持的最新版本的 TLS,包括 TLS 1.2。

启用 .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.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 1.2 并完全禁用 TLS 1.0 和 1.1。

请考虑单独应用这些设置来禁用 TLS 1.0 和 TLS 1.1,以隔离有问题的客户端的配置问题。

配置客户端和服务器 TLS 重新协商严格模式

下表显示了具有默认 TLS 重新协商严格模式配置的 Exchange Server/Windows Server 组合:

Exchange Server Windows Server 支持 默认配置
Exchange Server 2019 任何 是 (strict mode enabled)
Exchange Server 2016 任何
Exchange Server 2013 任何 不适用

这些设置用于配置 TLS 重新协商严格模式。 这意味着服务器仅允许应用此 安全更新 的那些客户端来设置和重新协商 TLS 会话。 服务器不允许应用此 安全更新 的客户端设置 TLS 会话。 在这种情况下,服务器会终止来自客户端的此类请求。

同样,如果此 安全更新 应用于客户端,并且客户端处于严格模式,则客户端可以设置并重新协商与应用此安全更新的所有服务器的 TLS 会话。 客户端根本无法设置未应用此安全更新的服务器的 TLS 会话。 客户端无法继续尝试使用此类服务器进行 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

下表显示了具有默认建议的密码套件配置的 Exchange Server/Windows Server 组合:

Exchange Server Windows Server 支持 默认配置
Exchange Server 2019 任何
Exchange Server 2016 任何
Exchange Server 2013 Windows Server 2012 (R2)

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或更高版本

注意

可以通过利用 组策略 对象 (GPO) 来配置密码套件。 如果已通过 GPO 进行配置,或者Functions注册表项已存在于以下路径下,则无法通过 Enable/Disable-TLSCipherSuite cmdlet 手动配置它们:HKLM:\SOFTWARE\Policies\Microsoft\Cryptography\Configuration\SSL\00010002

从提升的 PowerShell 窗口运行以下命令,以配置建议的密码套件。

第一个任务是禁用所有现有密码套件:

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++
}

禁用过时的密码和哈希

下表显示了具有默认过时密码和哈希配置的 Exchange Server/Windows Server 组合:

Exchange Server Windows Server 支持 默认配置
Exchange Server 2019 任何
Exchange Server 2016 任何
Exchange Server 2013 Windows Server 2012 (R2)

从提升的 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

配置椭圆曲线首选项

下表显示了具有默认椭圆曲线首选项配置的 Exchange Server/Windows Server 组合:

Exchange Server Windows Server 支持 默认配置
Exchange Server 2019 任何
Exchange Server 2016 Windows Server 2016
Exchange Server 2013 任何 不适用

注意

建议禁用椭圆曲线, curve25519 因为它在 FIPS 模式下不可用。 有关详细信息,请参阅:Windows 10版本 1607 及更高版本中的 TLS 椭圆曲线

从提升的 PowerShell 窗口运行以下命令,以配置省略号曲线首选项:

Disable-TlsEccCurve -Name "curve25519"
Enable-TlsEccCurve -Name "NistP384" -Position 0
Enable-TlsEccCurve -Name "NistP256" -Position 1

验证是否使用了 TLS 1.2

启用 TLS 1.2 后,验证工作是否成功非常有用,并且系统能够协商 TLS 1.2 的入站 (服务器) 连接和出站 (客户端) 连接。 有几种方法可用于验证 TLS 使用情况,其中一些方法将在以下部分讨论。

Exchange Server中使用的许多协议都是基于 HTTP 的,因此会遍历 Exchange 服务器上的 IIS 进程。 MAPI/HTTP、Outlook Anywhere、Exchange Web Services、Exchange ActiveSync、REST、OWA & EAC、脱机通讯簿下载和自动发现是Exchange Server使用的基于 HTTP 的协议的示例。

Internet Information Services (IIS) 日志

IIS 团队添加了Windows Server 2012 R2 或更高版本的功能,以记录与加密协议版本和密码相关的自定义字段。 建议查看博客,获取 有关如何启用这些自定义字段 并开始分析日志的文档,以获取有关环境中与基于 HTTP 的协议相关的传入连接的信息。

Windows Server 2012 R2 之前的 Windows Server 版本不存在这些 IIS 自定义字段。 负载均衡器或防火墙日志可能能够提供此信息。 请向供应商请求指导,以确定其日志是否可提供此信息。

使用 Microsoft Edge 开发人员工具检查 TLS 版本

在连接到 Outlook 网页版 OWA) 或 Exchange 管理员 Center ( (ECP) 时,可以利用 Developer ToolsMicrosoft Edge 提供的 ,检查用于建立安全连接的 TLS 版本。 为此,请按照下列步骤操作:

  1. 打开 Microsoft Edge 浏览器并建立与 OWA 或 ECP 的 HTTPS 连接。
  2. CTRL + SHIFT + I 打开 Developer Tools
  3. 单击 + 右上角的符号。
  4. 在下拉菜单中单击 Security
  5. 检查 部分中的 Connection - secure connection settings TLS 版本。

邮件头 (Exchange Server 2016 或更高版本)

Exchange Server 2016 或更高版本中的邮件头数据提供在发送和接收主机交换一封邮件时协商和使用的协议。 可以使用 消息标头分析器 获取每个跃点的清晰概述。

注意

消息标头示例有一个已知异常。 当客户端使用经过身份验证的 SMTP (也称为 SMTP 客户端提交协议) 连接到服务器来发送邮件时,消息标头中的 TLS 版本不会显示客户的客户端或设备使用的正确 TLS 版本。 Microsoft 正在调查在将来的更新中添加此信息的可能性。

通过 SMTP 日志记录的邮件流

Exchange Server 2013 及更高版本中的 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 服务器上搜索日志文件,查找使用 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 桥接的防火墙时对其进行检查。