
В этой статье мы рассмотрим, как включить Transport Layer Security (TLS 1.2) протокол на различных версиях Windows, включая случаи для приложений .Net и WinHTTP. TLS 1.0 и TLS 1.1 являются устаревшими версиями протокола. Если вы перевели все свои службы на TLS 1.2 или TLS 1.3, вы можете отключить поддержку устаревших версий TLS на своих серверах и клиентах Windows (How to Disable TLS 1.0 and TLS 1.1 Using GPO). Однако прежде чем делать это, убедитесь, что все ваши клиенты поддерживают TLS 1.2.
В современных версиях Windows (Windows 11/10/8.1 или Windows Server 2022/2019/2016/2012R2) TLS 1.2 включен по умолчанию. В предыдущих версиях Windows (Windows 7, Windows Server 2008R2/2012) вам придется настроить некоторые параметры, прежде чем вы сможете включить TLS 1.2.
Например, чтобы включить TLS 1.2 в Windows 7 и Windows Server 2008 R2:
- Убедитесь, что установлен пакет обновления Windows 7 Service Pack 1;
- Загрузите и вручную установите обновление MSU KB3140245 из каталога обновлений Microsoft (https://www.catalog.update.microsoft.com/search.aspx?q=kb3140245);
- Затем загрузите и установите MicrosoftEasyFix51044.msi (патч добавляет параметры реестра, позволяющие включить поддержку TLS 1.2 в Windows 7/2008R2/2012);
Без этих обновлений Outlook на Windows 7 не сможет подключиться к современному почтовому серверу с ошибкой: 0x800CCC1A — Ваш сервер не поддерживает указанный вами тип шифрования соединения. Кроме того, при открытии некоторых веб-сайтов вы можете увидеть ошибку SSL This site can’t provide a secure connection.
- Перезагрузите компьютер.
Эти параметры реестра описаны в статье Обновление для включения TLS 1.1 и TLS 1.2 в качестве безопасных протоколов по умолчанию в WinHTTP в Windows (https://support.microsoft.com/en-us/topic/update-to-enable-tls-1-1-and-tls-1-2-as-default-secure-protocols-in-winhttp-in-windows-c4bd73d2-31d7-761e-0178-11268bb10392).
Следующие элементы реестра REG_DWORD появятся на вашем компьютере в HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client\
и HKLM\...Protocols\TLS 1.2\Servers
:
- DisabledByDefault = 0
- Включено = 1
Чтобы использовать TLS 1.2 по умолчанию для приложений WinHttp API, добавьте параметр DefaultSecureProtocols = 0x00000A00
параметр REG_DWORD в HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttp
(в Windows x64: HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttp
).
Вот возможные значения опции DefaultSecureProtocols, которая определяет разрешенные протоколы для WinHTTP-соединений:
- 0x00000A0 — значение по умолчанию, позволяющее использовать SSL 3.0 и TLS 1.0 только для WinHTTP
- 0x0000AA0 — позволяет использовать TLS 1.1 и TLS 1.2 в дополнение к SSL 3.0 и TLS 1.0
- 0x00000A00 — разрешает только TLS 1.1 и TLS 1.2
- 0x00000800 — позволяет использовать только TLS 1.2
Для создания этих параметров реестра можно использовать следующий сценарий PowerShell:
$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"
# for Windows x86
New-ItemProperty -Path $reg32bWinHttp -Name $regWinHttpDefault -Value $regWinHttpValue -PropertyType DWORD
# for Windows x64
New-ItemProperty -Path $reg64bWinHttp -Name $regWinHttpDefault -Value $regWinHttpValue -PropertyType DWORD
New-Item -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2”
New-Item -Path $regTLS12Client
New-Item -Path $regTLS12Server
New-ItemProperty -Path $regTLS12Client -Name $regTLSDefault -Value $regTLSValue -PropertyType DWORD
New-ItemProperty -Path $regTLS12Client -Name $regTLSEnabled -Value $regTLSEnableValue -PropertyType DWORD
New-ItemProperty -Path $regTLS12Server -Name $regTLSDefault -Value $regTLSValue -PropertyType DWORD
New-ItemProperty -Path $regTLS12Server -Name $regTLSEnabled -Value $regTLSEnableValue -PropertyType DWORD
Перезагрузите компьютер с помощью команды:
Restart-Computer
Затем необходимо включить поддержку TLS 1.2 для приложений .NET Framework. Для этого нужно включить системные протоколы шифрования для приложений .NET 3.5 и 4.x в реестре. Если вы используете старые версии .NET Framework, например 4.5.1 или 4.5.2 на Windows Server 2012 R2/2012 или Windows 8.1, сначала установите последние обновления для .Net Framework 4.5.1 (они добавят поддержку TLS 1.2 для .NET).
Ниже приведены параметры реестра, которые необходимо настроить для разных версий .Net:
для .Net 3.5 или 2.0:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v2.0.50727] "SystemDefaultTlsVersions"=dword:00000001 [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v2.0.50727] "SystemDefaultTlsVersions"=dword:00000001 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v2.0.50727] "SchUseStrongCrypto"=dword:00000001 [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v2.0.50727] "SchUseStrongCrypto"=dword:00000001
для .Net 4.x:
[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
- Install-Module: Unable to download from URI
- Невозможно определить источник пакета
Проблема заключается в том, что по умолчанию PowerShell пытается использовать TLS 1.0 для подключения к PSGallery. Начиная с апреля 2020 года, галерея PowerShell принимает только соединения TLS 1.2.
Кроме того, существует бесплатный IISCrypto инструмент, позволяющий включать/выключать различные версии TLS/SSL и настройки Schannel через графический интерфейс (https://www.nartac.com/Products/IISCrypto/). Здесь вы можете выбрать версии TLS, которые хотите включить. Если все флажки рядом с протоколами Schannel неактивны (выделены серым цветом), Windows использует настройки по умолчанию. В моем примере я включил TLS 1.2 для сервера и клиента с помощью сценария PowerShell, показанного выше. Теперь IISCrypto показывает, что TLS 1.2 был включен вручную.