Установка TLS-сессии в Windows
TLS (Transport Layer Security) обеспечивает защищённое соединение между клиентом и сервером. Ниже описан процесс установки TLS-сессии в Windows и логика выбора версии протокола.
Этапы установки TLS-сессии
- Клиент отправляет сообщение ClientHello, в котором указывает:
- Поддерживаемые версии TLS (например, TLS 1.2, 1.3)
- Список шифров (cipher suites)
- Дополнительные расширения (SNI, ALPN и др.)
- Сервер отвечает ServerHello, выбирая:
- Совместимую версию TLS
- Подходящий шифр
- Отправляет сертификат и параметры ключей
- Происходит обмен ключами (например, через ECDHE)
- Стороны производят проверку и устанавливают симметричное шифрование
- Обе стороны отправляют сообщение Finished, после чего начинается защищённая передача данных
Логика выбора версии TLS
Windows действует как клиент, предлагающий серверу список поддерживаемых версий. Выбор осуществляется следующим образом:
- Клиент предлагает — сервер выбирает
-
- TLS 1.2 включён (в Windows 10/11, Server 2016+)
- Более старые версии могут поддерживать только TLS 1.0 и TLS 1.1
- TLS 1.3 поддерживается начиная с Windows 11 и Windows Server 2022. Включение TLS 1.3 в более ранних версиях Windows не является безопасной системной конфигурацией.
- TLS 1.0 и 1.1 рекомендуется отключать
Приоритет TLS-версий
По умолчанию Windows использует такой приоритет:
- TLS 1.3 (если поддерживается)
- TLS 1.2
- TLS 1.1 (устарел)
- TLS 1.0 (устарел)
Настройки в реестре Windows
Путь в реестре:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols
Пример включения TLS 1.2:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client] "Enabled"=dword:00000001 "DisabledByDefault"=dword:00000000
Значения:
- "Enabled" = 1 — протокол включён
- "DisabledByDefault" = 0 — включён по умолчанию
Настройка через групповые политики
Путь:
Computer Configuration → Administrative Templates → Network → SSL Configuration Settings
Поле:
SSL Cipher Suite Order — задаёт приоритет шифров и версий TLS.
Проверка и настройка через PowerShell
Просмотр текущих протоколов:
[Net.ServicePointManager]::SecurityProtocol
Установка конкретной версии:
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
Проверка через браузер
Для проверки используемой версии TLS:
- Перейдите на сайт: https://www.ssllabs.com/ssltest/
- Введите адрес интересующего сервера
- Посмотрите, какая версия TLS и шифр были согласованы
Удалённая проверка версии TLS поддерживаемой сервером
NMAP
nmap --script ssl-enum-ciphers -p 443 host.itvideo.pro
OpenSSL
.\openssl.exe s_client -tls1 -connect 192.168.11.10:443 -msg
Curl
curl --tlsv1.0 --tls-max 1.2 "https://powershellpro.ru"
PowerShell
- Test-ServerSSLSupport.ps1
- function Test-ServerSSLSupport {
- [CmdletBinding()]
- param(
- [Parameter(Mandatory = $true, ValueFromPipeline = $true)]
- [ValidateNotNullOrEmpty()]
- [string]$HostName,
- [UInt16]$Port = 443
- )
- process {
- $RetValue = New-Object psobject -Property @{
- Host = $HostName
- Port = $Port
- SSLv2 = $false
- SSLv3 = $false
- TLSv1_0 = $false
- TLSv1_1 = $false
- TLSv1_2 = $false
- TLSv1_3 = $false
- KeyExhange = $null
- HashAlgorithm = $null
- } | Select-Object Host, Port, SSLv2, SSLv3, TLSv1_0,TLSv1_1,TLSv1_2,TLSv1_3,KeyExhange,HashAlgorithm
- "ssl2", "ssl3", "tls", "tls11", "tls12",, "tls13" | %{
- $TcpClient = New-Object Net.Sockets.TcpClient
- $TcpClient.Connect($RetValue.Host, $RetValue.Port)
- $SslStream = New-Object Net.Security.SslStream $TcpClient.GetStream(),
- $true,
- ([System.Net.Security.RemoteCertificateValidationCallback]{ $true })
- $SslStream.ReadTimeout = 15000
- $SslStream.WriteTimeout = 15000
- try {
- $RetValue.KeyExhange = $SslStream.KeyExchangeAlgorithm
- $RetValue.HashAlgorithm = $SslStream.HashAlgorithm
- $status = $true
- } catch {
- $status = $false
- }
- "ssl2" {$RetValue.SSLv2 = $status}
- "ssl3" {$RetValue.SSLv3 = $status}
- "tls" {$RetValue.TLSv1_0 = $status}
- "tls11" {$RetValue.TLSv1_1 = $status}
- "tls12" {$RetValue.TLSv1_2 = $status}
- "tls13" {$RetValue.TLSv1_3 = $status}
- }
- # dispose objects to prevent memory leaks
- $TcpClient.Dispose()
- $SslStream.Dispose()
- }
- $RetValue
- }
- }
- "itvideo.pro","powershellpro.ru" | Test-ServerSSLSupport
Проверка версии TLS клиентов на Windows-сервере
1. Включение журналирования Schannel
Windows использует Schannel для обработки TLS-сессий. Чтобы видеть, какие версии TLS используют подключающиеся клиенты, нужно включить расширенное логирование событий.
🛠 Настройка через реестр
Откройте редактор реестра regedit
и добавьте/измените ключ:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL] "EventLogging"=dword:00000007
Значение 7
включает все типы логов: успешные и неуспешные подключения, параметры TLS и прочее.
После изменения необходимо перезагрузить сервер.
📋 Просмотр логов
Откройте Просмотр событий
→ Журналы Windows
→ Система
→ фильтруйте по источнику:
- Источник:
Schannel
Обратите внимание на следующие ID событий:
- 36874 — ошибка TLS handshake.
- 36880 / 36881 / 36882 — информация о сертификатах и протоколах.
- 36886 / 36887 — информация о версии TLS, выбранной при соединении.
2. Трассировка с помощью netsh и PowerShell
Можно провести захват сетевого трафика, чтобы увидеть используемые протоколы TLS.
▶ Захват с помощью netsh
netsh trace start capture=yes report=yes persistent=yes tracefile=c:\tls_trace.etl
После запуска трассировки попросите клиента подключиться, затем остановите трассировку:
netsh trace stop
📎 Анализ
Полученный файл tls_trace.etl
можно анализировать:
- В Microsoft Message Analyzer (устаревший)
- Или преобразовать в pcapng и открыть в Wireshark:
etl2pcapng.exe tls_trace.etl tls_trace.pcapng
3. Анализ с помощью Wireshark
Если подключение не зашифровано IPsec и не происходит внутри туннеля:
🔍 Фильтры Wireshark
- Просмотр TLS-версий:
tls.handshake.version
- Или:
ssl.record.version
Будет видно, какая версия TLS использовалась при рукопожатии (TLS 1.0, 1.2, 1.3 и т.д.)
4. Использование Sysmon (опционально)
Если на сервере установлен [https://learn.microsoft.com/en-us/sysinternals/downloads/sysmon Sysmon], и он настроен для аудита сетевых подключений, то можно собирать TLS-сессии через журнал событий Sysmon + анализ в SIEM.
Рекомендации
- Включение событий Schannel — самый простой способ.
- Для продвинутого анализа можно использовать трассировку ETW и Wireshark.
- При запрете TLS 1.0/1.1 — ошибки будут фиксироваться в журналах Schannel.