Как включить TLS 1.2 в Windows

В этой статье мы рассмотрим, как включить 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.

Windows XP и Vista не поддерживают TLS 1.2.

Например, чтобы включить TLS 1.2 в Windows 7 и Windows Server 2008 R2:

  1. Убедитесь, что установлен пакет обновления Windows 7 Service Pack 1;
  2. Загрузите и вручную установите обновление MSU KB3140245 из каталога обновлений Microsoft (https://www.catalog.update.microsoft.com/search.aspx?q=kb3140245); Загрузите и установите KB3140245, чтобы включить TLS 1.2Загрузите и установите KB3140245 для включения TLS 1.2
  3. Затем загрузите и установите MicrosoftEasyFix51044.msi (патч добавляет параметры реестра, позволяющие включить поддержку TLS 1.2 в Windows 7/2008R2/2012);
    Без этих обновлений Outlook на Windows 7 не сможет подключиться к современному почтовому серверу с ошибкой: 0x800CCC1A — Ваш сервер не поддерживает указанный вами тип шифрования соединения. Кроме того, при открытии некоторых веб-сайтов вы можете увидеть ошибку SSL This site can’t provide a secure connection.
  4. Перезагрузите компьютер.

Эти параметры реестра описаны в статье Обновление для включения 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
Начиная с Windows 10 и Windows Server 2016, все версии Windows поддерживают TLS 1.2 для WinHTTP.

Для создания этих параметров реестра можно использовать следующий сценарий 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 на клиентах через реестрКак включить TLS 1.2 на клиентах через реестр

Затем необходимо включить поддержку 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
Например, без этих параметров вы не сможете подключиться к репозиториям PSGallery из консоли PowerShell на Windows Server 2012 R2 со следующими ошибками:

  • 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 был включен вручную.

IISCrypto не позволяет изменять настройки TLS для .NET или WinHTTP.

Включение и отключение TLS 1.2 на Windows Server с помощью IISCrypto Включение и отключение TLS 1.2 на Windows Server с помощью IISCrypto

На Windows Server 2022 необходимо включить TLS 1.3 для поддержки HTTP/3 для веб-сайтов IIS.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *