Протоколы TLS 1.0 и TLS 1.1 признаны устаревшими. Современные системы и приложения требуют использования более безопасных версий TLS 1.2 или TLS 1.3. В этой статье рассматриваются способы включения TLS 1.2 в Windows, а также для приложений на базе WinHTTP и .NET Framework.
Поддержка TLS 1.2 по умолчанию
Во всех современных версиях Windows TLS 1.2 включён изначально:
Windows 11 / 10 / 8.1
Windows Server 2022 / 2019 / 2016 / 2012 R2
Включение TLS 1.2 в Windows 7 и Windows Server 2008 R2 / 2012
Для устаревших систем необходимо выполнить следующие шаги:
1. Обновите ОС
Убедитесь, что установлена Windows 7 SP1 или соответствующий Service Pack.
Установите обновление KB3140245.
2. Примените Microsoft Easy Fix
Скачайте и установите утилиту MicrosoftEasyFix51044.msi — она добавляет необходимые параметры реестра для TLS 1.2.
3. Перезагрузите компьютер
Настройка параметров реестра
Для активации TLS 1.2 добавьте следующие значения:
SCHANNEL (TLS 1.2 клиент/сервер)
[HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client]
"DisabledByDefault"=dword:00000000
"Enabled"=dword:00000001
[HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server]
"DisabledByDefault"=dword:00000000
"Enabled"=dword:00000001
Настройка WinHTTP
Пути для 32- и 64-битных приложений:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttp
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttp
Рекомендуемое значение параметра:
DefaultSecureProtocols = 0x00000800 // только TLS 1.2
Значение Протоколы
0x000000A0 SSL 3.0 + TLS 1.0
0x00000AA0 SSL 3.0 + TLS 1.0–1.2
0x00000A00 TLS 1.1 + TLS 1.2
0x00000800 Только TLS 1.2
PowerShell-скрипт для настройки TLS 1.2
$reg32bWinHttp = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttp"
$reg64bWinHttp = "HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttp"
$regWinHttpDefault = "DefaultSecureProtocols"
$regWinHttpValue = "0x00000800"
$regTLS12Client = "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client"
$regTLS12Server = "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server"
$regTLSDefault = "DisabledByDefault"
$regTLSValue = "0x00000000"
$regTLSEnabled = "Enabled"
$regTLSEnableValue = "0x00000001"
# Для Windows x86
if (-not (Test-Path -Path $reg32bWinHttp)) {
New-Item -Path $reg32bWinHttp -Force
}
New-ItemProperty -Path $reg32bWinHttp -Name $regWinHttpDefault -Value $regWinHttpValue -PropertyType DWORD -Force
# Для Windows x64
if (-not (Test-Path -Path $reg64bWinHttp)) {
New-Item -Path $reg64bWinHttp -Force
}
New-ItemProperty -Path $reg64bWinHttp -Name $regWinHttpDefault -Value $regWinHttpValue -PropertyType DWORD -Force
# Настройка TLS 1.2
New-Item -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2" -Force
New-Item -Path $regTLS12Client -Force
New-Item -Path $regTLS12Server -Force
New-ItemProperty -Path $regTLS12Client -Name $regTLSDefault -Value $regTLSValue -PropertyType DWORD -Force
New-ItemProperty -Path $regTLS12Client -Name $regTLSEnabled -Value $regTLSEnableValue -PropertyType DWORD -Force
New-ItemProperty -Path $regTLS12Server -Name $regTLSDefault -Value $regTLSValue -PropertyType DWORD -Force
New-ItemProperty -Path $regTLS12Server -Name $regTLSEnabled -Value $regTLSEnableValue -PropertyType DWORD -Force
# Перезагрузка системы
Restart-Computer
Включение TLS 1.2 в .NET Framework
Для корректной работы приложений на .NET с TLS 1.2 необходимо принудительно задать использование системных протоколов:
Для .NET 2.0 / 3.5:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v2.0.50727]
"SystemDefaultTlsVersions"=dword:00000001
"SchUseStrongCrypto"=dword:00000001
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v2.0.50727]
"SystemDefaultTlsVersions"=dword:00000001
"SchUseStrongCrypto"=dword:00000001
Для .NET 4.0 – 4.5.2:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319]
"SystemDefaultTlsVersions"=dword:00000001
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v4.0.30319]
"SystemDefaultTlsVersions"=dword:00000001
Для .NET 4.6 и выше:
[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 4.5.1 или 4.5.2 на Windows Server 2012 / R2, обязательно установите последние обновления .NET, иначе TLS 1.2 может не поддерживаться.
Возможные ошибки без настройки
Если не включить TLS 1.2 для .NET, при работе с PowerShell Gallery может возникнуть ошибка:
Install-Module: Unable to download from URI
Unable to resolve package source
Причина — использование TLS 1.0, который больше не поддерживается на PSGallery (с апреля 2020 года).
Альтернатива: настройка через IISCrypto
Вы можете использовать утилиту IISCrypto для управления протоколами TLS/SSL и параметрами Schannel через графический интерфейс.
Выберите версии TLS для включения.
Если флажки недоступны (серые), значит используются стандартные настройки Windows.
Настройки .NET и WinHTTP IISCrypto не изменяет — их нужно настраивать вручную или через PowerShell, как показано выше.