背景

如果用户使用较旧的 Windows 7 操作系统的电脑,您希望用户能通过 Outlook 2013/2016/2019 连接邮件服务器,并且您的邮件服务器支持 TLS 1.21.3,那么本指南适合您。

本文档介绍如何配置 Microsoft Windows® 7 工作站和 Microsoft Outlook® 2013邮件客户端以使用传输层安全(TLS) 协议版本 1.2。

传输层安全性 (TLS) 1.0 和 1.1 正在慢慢被弃用,因此出于安全原因,最好不要在生产环境中使用。Windows 7 支持 TLS1.1 和 TLS 1.2。但默认情况下,这些协议版本并未启用。在 Windows 8 及更高版本上,这些协议默认启用。

本步骤已在 window 7 上使用 Outlook 2013 版本测试通过,相同的步骤理论上也适用于 Outlook 2016 及更高版本。

步骤:

  1. 首先检查您的 Windows 版本。如果已经打上了 Windows 7 Service Pack (SP1),则可以继续执行步骤 2;否则您需要首先将 Windows 7 升级到 Windows SP1,然后再继续步骤 2;
    windows7-SP1-update
  2. 从 Microsoft 更新网站 下载并安装KB3140245 Windows 更新。
    windows7-KB3140245
  3. 安装 EasyFix:它将设置 DefaultSecureProtocols 的注册表子项。
    EasyFix
  4. 重启系统
  5. 重新打开 Outlook 或进行新的 Outlook 账户配置。

使用脚本自动配置

如果您的电脑是 Windows 7 SP1 并且想要通过 powershell 脚本运行上述步骤 2 和 3,请将如下脚本内容保存为 windows7_tls12.ps1 脚本,该脚本为您下载Windows补丁并在您的注册表中进行修改。

#Note:
#This script downloads and installs the KB3140245 Windows update.

Import-Module BitsTransfer

$arch=(Get-WmiObject -Class Win32_operatingsystem).Osarchitecture

If ($arch -eq "32-bit") {
    $kbUrl32 = "http://download.windowsupdate.com/c/msdownload/update/software/updt/2016/04/windows6.1-kb3140245-x86_cdafb409afbe28db07e2254f40047774a0654f18.msu"
    $kb32 = "windows6.1-kb3140245-x86_cdafb409afbe28db07e2254f40047774a0654f18.msu"
    Start-BitsTransfer -source $kbUrl32
    wusa $pwd/$kb32 /log:install.log
}
Else {
    $kbUrl64 = "http://download.windowsupdate.com/c/msdownload/update/software/updt/2016/04/windows6.1-kb3140245-x64_5b067ffb69a94a6e5f9da89ce88c658e52a0dec0.msu"
    $kb64 = "windows6.1-kb3140245-x64_5b067ffb69a94a6e5f9da89ce88c658e52a0dec0.msu"
    Start-BitsTransfer -source $kbUrl64
    wusa $pwd/$kb64 /log:install.log
}

#Note:
#This script creates registry keys in the following files:
#HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Internet Settings/WinHttp
#HKEY_LOCAL_MACHINE/SOFTWARE/Wow6432Node/Microsoft/Windows/CurrentVersion/Internet Settings/WinHttp
#HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/SecurityProviders/SCHANNEL/Protocols/TLS 1.1
#HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/SecurityProviders/SCHANNEL/Protocols/TLS 1.2

$arch=(Get-WmiObject -Class Win32_operatingsystem).Osarchitecture
$reg32bWinHttp = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttp"
$reg64bWinHttp = "HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttp"
$regWinHttpDefault = "DefaultSecureProtocols"
$regWinHttpValue = "0x00000a00"
$regTLS11 = "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Client"
$regTLS12 = "HKLM:SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client"
$regTLSDefault = "DisabledByDefault"
$regTLSValue = "0x00000000"

Clear-Host
Write-Output "Creating Registry Keys...`n"
Write-Output "Creating registry key $reg32bWinHttp\$regWinHttpDefault with value $regWinHttpValue"

IF(!(Test-Path $reg32bWinHttp)) {
    New-Item -Path $reg32bWinHttp -Force | Out-Null
    New-ItemProperty -Path $reg32bWinHttp -Name $regWinHttpDefault -Value $regWinHttpValue -PropertyType DWORD -Force | Out-Null
}
ELSE {
    New-ItemProperty -Path $reg32bWinHttp -Name $regWinHttpDefault -Value $regWinHttpValue -PropertyType DWORD -Force | Out-Null
}

IF($arch -eq "64-bit") {
    Write-Output "Creating registry key $reg64bWinHttp\$regWinHttpDefault with value $regWinHttpValue"
    IF(!(Test-Path $reg64bWinHttp)) {
        New-Item -Path $reg64bWinHttp -Force | Out-Null
        New-ItemProperty -Path $reg64bWinHttp -Name $regWinHttpDefault -Value $regWinHttpValue -PropertyType DWORD -Force | Out-Null
    }
    ELSE {
        New-ItemProperty -Path $reg64bWinHttp -Name $regWinHttpDefault -Value $regWinHttpValue -PropertyType DWORD -Force | Out-Null
    }
}

Write-Output "Creating registry key $regTLS11\$regTLSDefault with value $regTLSValue"

IF(!(Test-Path $regTLS11)) {
    New-Item -Path $regTLS11 -Force | Out-Null
    New-ItemProperty -Path $regTLS11 -Name $regTLSDefault -Value $regTLSValue -PropertyType DWORD -Force | Out-Null
    }
ELSE {
    New-ItemProperty -Path $regTLS11 -Name $regTLSDefault -Value $regTLSValue -PropertyType DWORD -Force | Out-Null
}

Write-Output "Creating registry key $regTLS12\$regTLSDefault with value $regTLSValue"

IF(!(Test-Path $regTLS12)) {
    New-Item -Path $regTLS12 -Force | Out-Null
    New-ItemProperty -Path $regTLS12 -Name $regTLSDefault -Value $regTLSValue -PropertyType DWORD -Force | Out-Null
    }
ELSE {
    New-ItemProperty -Path $regTLS12 -Name $regTLSDefault -Value $regTLSValue -PropertyType DWORD -Force | Out-Null
}

Write-Output "`nComplete!"

脚本地址:windows7_tls12.ps1

运行脚本 Win + R 搜索 powershell 并以管理员身份运行该脚本

等待脚本运行完毕后,重启您的计算机

确认

现在尝试连接您的 Outlook。如果您通过 wireshark 检查网络流量,那么您可以在 Windows 7 PC 和邮件服务器之间看到TLS 1.2 的握手。
tls1_3_handshake.png

Last modification:October 23, 2023
如果觉得我的文章对你有用,请随意赞赏