Безопасность серверов

Hardening TLS: версии протокола, cipher suites и проверка настроек

Как отключить TLS 1.0 и 1.1, настроить TLS 1.2/1.3 и проверить публичный endpoint с учётом SNI, клиентов и плана отката.

16 минут
абстрактная иллюстрация настройки защищённог�о TLS-соединения
Настраивать TLS нужно на том компоненте, который фактически принимает внешнее соединение и завершает TLS: веб-сервере, балансировщике, CDN, HTTP.sys или приложении. Для большинства современных публичных сервисов практический ориентир — разрешить TLS 1.2 и TLS 1.3, но до отключения старых версий нужно учесть реальных клиентов. После изменения проверяйте именно опубликованное DNS-имя с SNI, а не только успешный reload службы.

Сначала найдите TLS-терминатор

TLS-терминатор — компонент, который участвует в TLS handshake, выбирает версию протокола, набор шифров и отдаёт TLS-сертификат. Он может находиться перед приложением: например, на CDN, reverse proxy, L7-балансировщике или отдельном шлюзе API. В таком случае изменение Nginx, Apache или приложения на бэкенде не изменит свойства внешнего endpoint.

Точка настройки определяется не названием сервера, а местом завершения TLS.

НаблюдениеГде менять TLS-политикуКак подтвердить
DNS-имя указывает на CDN или внешний балансировщикВ панели и политике CDN либо балансировщикаВнешняя проверка имени показывает сертификат и параметры, не совпадающие с бэкендом
На сервере Nginx принимает HTTPS и передаёт HTTP или proxy_passВ конфигурации NginxПроцесс Nginx слушает порт, а внешний тест получает его сертификат
Apache HTTP Server слушает HTTPS напрямуюВ VirtualHost и директивах mod_sslВнешний тест получает сертификат соответствующего VirtualHost
Сайт IIS использует HTTPS-привязкуВ Schannel/HTTP.sys и политике cipher suites Windows; IIS задаёт привязку сайтаВнешний тест показывает параметры Schannel и сертификат IIS-привязки
Приложение Java, Go, Node.js или иной сервис слушает порт самостоятельноВ настройках TLS самого приложения и его криптобиблиотекиПроверка endpoint подтверждает параметры приложения

Инвентаризация endpoint и клиентов

Соберите исходные данные до изменения конфигурации. Это позволяет выбрать минимальную версию TLS и подготовить откат.

  1. 1
    Составьте список опубликованных имён
    Зафиксируйте каждое DNS-имя, порт, внешний IP или адрес CDN, назначение сервиса и владельца. Несколько имён на одном IP могут использовать разные сертификаты и TLS-политики из-за SNI.
  2. 2
    Проследите путь соединения
    Сопоставьте DNS, балансировщики, CDN, reverse proxy и бэкенды. Определите первый компонент, который принимает TLS от клиента. Именно его конфигурация определяет внешний endpoint.
  3. 3
    Определите клиентов
    Разделите браузеры, мобильные приложения, API-интеграции, партнёрские системы, агенты, принтеры, сетевые устройства и устаревшие ОС. Используйте журналы TLS-терминатора, телеметрию балансировщика, документацию интеграций и тестовые подключения. Если версия TLS в логах не видна, отсутствие записей не доказывает отсутствие старых клиентов.
  4. 4
    Сохраните исходное состояние
    Сохраните действующую конфигурацию, вывод внешних проверок, цепочку сертификатов, поддерживаемые протоколы и результат подключения критичных клиентов. Это будет эталоном для сравнения и основой отката.
  5. 5
    Назначьте минимальную версию
    Для современного публичного веб-сервиса обычно выбирают TLS 1.2 как минимум и разрешают TLS 1.3 при поддержке стека. Если обязательный клиент не умеет TLS 1.2, не оставляйте TLS 1.0 или 1.1 без формально принятого риска, срока исключения и плана обновления клиента либо изоляции отдельного endpoint.

Совместимость — не причина оставлять устаревший TLS навсегда

SSL 2.0, SSL 3.0, TLS 1.0 и TLS 1.1 устарели; RFC 8996 выводит TLS 1.0 и 1.1 из употребления. Поддержка старых версий увеличивает поверхность атак и сохраняет возможность небезопасного согласования, в том числе downgrade или fallback в сочетаниях клиентов и серверов без эффективной защиты от понижения. Однако отключение без инвентаризации может остановить интеграцию со старым устройством, агентом или библиотекой. Для внутренней системы допустимое исключение определяется её моделью угроз, регулированием и совместимостью, а не универсальным списком.

Какие версии TLS разрешить

Краткий ответ на вопрос «TLS или SSL»: для рабочих конфигураций выбирают TLS, а SSL — устаревшее семейство протоколов. На вопрос «TLS 1.2 или TLS 1.3» ответ обычно «TLS 1.2 и TLS 1.3»: первая версия нужна для совместимости с ещё поддерживаемыми клиентами, вторая — предпочтительна там, где поддержана сервером и клиентом. Принцип работы сертификатов, цепочек доверия и mTLS разобран в статье «TLS-сертификаты на сервере: как работают и какой выбрать».

ПолитикаКогда уместнаЧто проверить до включения
Только TLS 1.3Контролируемый сервис с известными современными клиентамиВсе браузеры, SDK, API-клиенты, прокси и устройства поддерживают TLS 1.3
TLS 1.2 и TLS 1.3Типичный современный публичный сайт или APIПоддержку TLS 1.3 сервером и криптобиблиотекой; работу критичных TLS 1.2-клиентов
TLS 1.2 без TLS 1.3Стек не поддерживает TLS 1.3 либо его внедрение отложено после оценкиЧто TLS 1.2 использует современные допустимые наборы шифров и нет старых протоколов
Временное исключение для TLS 1.0/1.1Только при документированной неизбежной зависимостиВладельца риска, срок отмены, возможность выделить отдельный endpoint и компенсирующие меры

TLS cipher suites: почему TLS 1.2 и TLS 1.3 настраиваются отдельно

Набор шифров TLS 1.2 описывает больше параметров согласования, чем TLS 1.3. В TLS 1.3 наборы имеют другую модель и ограниченный современный состав; обмен ключами и аутентификация согласуются отдельно. Поэтому список cipher suites, заданный для TLS 1.2, обычно не управляет наборами TLS 1.3. Доступность TLS 1.3 и методы его настройки определяют версия веб-сервера, сборка и используемая криптобиблиотека, в частности OpenSSL.

  • Не составляйте политику копированием «идеального» списка из блога: синтаксис и доступные алгоритмы различаются между Nginx, Apache, OpenSSL и Schannel.
  • Исключайте анонимные (aNULL), экспортные (EXPORT), NULL-наборы (eNULL), RC4 и иные устаревшие либо запрещённые вашим стеком алгоритмы.
  • Для TLS 1.2 обычно оставляют современные AEAD-наборы с AES-GCM или ChaCha20-Poly1305 и обменом ключами, который поддерживает прямую секретность, например ECDHE при наличии поддержки клиентом и сервером.
  • Проверяйте не только перечень в конфигурации, но и реально согласуемые параметры. Успешный reload не означает, что слабый набор перестал предлагаться.
  • При выборе учитывайте корпоративную криптополитику, требования регулятора, тип сертификата, состав клиентов и версию библиотеки.

О Perfect Forward Secrecy

Согласование с эфемерными ключами может давать Perfect Forward Secrecy: компрометация долгосрочного закрытого ключа сама по себе не должна раскрывать ранее записанный трафик без сеансовых ключей. Это полезное свойство не заменяет обновление сервера, защиту закрытого ключа и проверку фактической конфигурации.

Примеры ограничения TLS в Nginx, Apache и IIS

Зависимость от версии

Названия директив, меню, политик, разделов реестра, доступные алгоритмы и уровень применения параметров зависят от модели продукта, версии ОС, веб-сервера, firmware, криптобиблиотеки и обновлений. Перед применением сверяйте синтаксис и семантику с официальным руководством производителя для своей версии. Примеры ниже показывают типичный подход, а не универсальный список шифров.

Nginx

В Nginx версии протокола ограничивают директивой ssl_protocols, а наборы TLS 1.2 и более ранних версий — ssl_ciphers. Если несколько блоков server используют один адрес и порт, ssl_protocols следует задавать на уровне http либо в default_server соответствующего listen: изменение только произвольного виртуального сервера может не определить версию протокола для всего сокета. Параметр TLSv1.3 поддерживается Nginx начиная с 1.13.0 при сборке с OpenSSL 1.1.1 или другой совместимой библиотекой; одна директива ssl_protocols TLSv1.3 не добавит поддержку в старую сборку. ssl_ciphers не управляет наборами TLS 1.3. В поддерживаемых версиях отдельные параметры OpenSSL можно передавать через ssl_conf_command, если это допускают Nginx и используемая криптобиблиотека.

конфигурация HTTPS-сервера Nginx
server {
    listen 443 ssl;
    server_name api.example.com;

    ssl_protocols TLSv1.2 TLSv1.3;

    # Пример принципа для TLS 1.2 и ниже.
    # Точный список выбирают по версии OpenSSL и требованиям клиентов.
    ssl_ciphers 'ECDHE+AESGCM:ECDHE+CHACHA20';
    ssl_prefer_server_ciphers on;

    # Настройка TLS 1.3 не задаётся через ssl_ciphers.
    # При поддержке версии Nginx/OpenSSL может потребоваться
    # отдельная настройка OpenSSL через ssl_conf_command.

    ssl_certificate     /path/to/fullchain.pem;
    ssl_certificate_key /path/to/privkey.pem;
}
Проверьте синтаксис и загрузку конфигурации до reload. Ожидаемый результат — сообщение об успешной проверке. Если команда сообщает о неизвестной директиве или неподдерживаемом протоколе, не перезагружайте сервис: проверьте версию Nginx, вывод `nginx -V` и документацию сборки.
nginx -t

Apache HTTP Server с mod_ssl

В Apache HTTP Server с mod_ssl версии обычно ограничивают директивой SSLProtocol, например запрещая все и явно разрешая TLS 1.2 и TLS 1.3. Наборы TLS 1.2 и более ранних версий задаёт SSLCipherSuite. В выпусках Apache, поддерживающих протокольный параметр этой директивы, наборы TLS 1.3 задают отдельно через SSLCipherSuite TLSv1.3 ...; некоторые сочетания Apache и OpenSSL также позволяют передать параметр Ciphersuites через SSLOpenSSLConfCmd. Возможность использовать TLS 1.3 и конкретный синтаксис зависят от версии Apache, mod_ssl и библиотеки с поддержкой TLS 1.3, обычно OpenSSL 1.1.1 или совместимой.

VirtualHost с mod_ssl
<VirtualHost *:443>
    ServerName api.example.com
    SSLEngine on

    SSLProtocol -all +TLSv1.2 +TLSv1.3

    # Пример принципа для TLS 1.2 и более ранних версий.
    SSLCipherSuite ECDHE+AESGCM:ECDHE+CHACHA20

    # Применяйте только если ваша версия Apache документирует
    # протокольный параметр SSLCipherSuite.
    # SSLCipherSuite TLSv1.3 TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256

    SSLCertificateFile /path/to/cert.pem
    SSLCertificateKeyFile /path/to/key.pem
</VirtualHost>
Проверьте конфигурацию Apache до graceful reload или перезапуска. Ожидаемый результат — `Syntax OK`. Ошибка в `SSLProtocol`, протокольно квалифицированной `SSLCipherSuite` или `SSLOpenSSLConfCmd` означает, что сначала нужно сверить возможности конкретных версий Apache, mod_ssl и OpenSSL, а не заменять параметры случайным списком.
apachectl configtest

IIS, HTTP.sys и Schannel в Windows Server

IIS принимает HTTPS через HTTP.sys, а криптографические протоколы и cipher suites предоставляет Schannel. Поэтому настройки TLS не сводятся к параметрам сайта IIS: разрешённые протоколы Schannel обычно задаются на уровне ОС в ветви SCHANNEL\Protocols, а порядок cipher suites — политикой SSL Cipher Suite Order. Эти изменения могут затрагивать и другие службы Windows, использующие Schannel.

типовая структура параметров Schannel
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\
  TLS 1.0\Server
  TLS 1.0\Client
  TLS 1.1\Server
  TLS 1.1\Client
  TLS 1.2\Server
  TLS 1.2\Client
  TLS 1.3\Server
  TLS 1.3\Client

Типичные значения DWORD для конкретного протокола и роли:
  Enabled
  DisabledByDefault

Для серверной роли важен подраздел Server; Client влияет на исходящие соединения самого сервера. Не создавайте ключи TLS 1.3 по шаблону, если выпуск Windows Server и Schannel не документируют такую настройку: поддержка TLS 1.3 и её управляемость различаются между версиями Windows. Доменные GPO, обновления Windows, локальная криптографическая политика и порядок cipher suites могут переопределить локальные значения. После изменения Schannel обычно требуется перезагрузка системы, а не только restart IIS.

Windows Server TLS hardening влияет шире IIS

Отключение протокола или изменение cipher suite order в Schannel способно повлиять на другие службы и исходящие подключения Windows. До изменения проверьте эффективные доменные политики, подготовьте окно обслуживания и протестируйте зависимые приложения. Полный разбор baseline, GPO и их приоритета — в статье «Hardening Windows Server 2019, 2022 и 2025: базовая защита».

Безопасный порядок изменения TLS-политики

Отключение TLS 1.0 и TLS 1.1 без неожиданного отказа

  1. 1
    Зафиксируйте текущую внешнюю картину
    Проверьте каждый публичный hostname с SNI: доступные версии TLS, выбранные наборы шифров, предъявляемый сертификат и ответ приложения. Сохраните результаты вместе с временем проверки.
  2. 2
    Подготовьте изменение и откат
    Сделайте резервную копию конфигурации либо зафиксируйте предыдущее состояние в системе управления конфигурациями. Определите команду проверки синтаксиса, способ reload/перезапуска, ответственного за откат и наблюдение за ошибками клиентов.
  3. 3
    Проверьте в тестовой среде или контролируемом окне
    Примените минимальное изменение: запретите SSL 2.0, SSL 3.0, TLS 1.0 и TLS 1.1, оставив согласованные TLS 1.2 и при поддержке TLS 1.3. Не меняйте одновременно сертификат, сеть, proxy-маршруты и TLS-политику без необходимости: иначе трудно найти причину отказа.
  4. 4
    Проверьте конфигурацию до применения
    Для Nginx используйте nginx -t, для Apache — apachectl configtest; для Windows проверьте планируемые значения, эффективную GPO и документацию используемого выпуска. При ошибке синтаксиса или неизвестном алгоритме верните конфигурацию к сохранённой версии до reload.
  5. 5
    Примените по правилам компонента
    Выполните reload или restart веб-сервера по его документации. Для Schannel спланируйте перезагрузку Windows, если она требуется для применения политики. Успешный запуск службы — только признак корректного запуска, а не подтверждение TLS-политики.
  6. 6
    Проверьте endpoint извне
    С независимого узла протестируйте DNS-имя с SNI: TLS 1.2 должен согласоваться, TLS 1.3 — согласоваться при заявленной поддержке, а TLS 1.0 и 1.1 — завершиться отказом. Сверьте сертификат и имя виртуального хоста.
  7. 7
    Проверьте критичные клиенты и журналы
    Запустите штатные сценарии браузера, мобильного приложения, SDK, партнёрского API и устройств. Просмотрите ошибки handshake на терминаторе и обращения в поддержку. Ошибка ssl handshake failed сама по себе не доказывает проблему с cipher suite: причиной также бывают SNI, клиентский сертификат, цепочка, имя хоста или сетевой посредник.
  8. 8
    Откатите при подтверждённом неприемлемом влиянии
    Верните сохранённую конфигурацию или согласованный временный вариант, примените его и повторите внешнюю проверку. Затем устраните причину: обновите клиент, выделите совместимый endpoint или оформите ограниченное по сроку исключение.

Как проверить TLS-версию, SNI, сертификат и cipher suite через OpenSSL

Утилита OpenSSL позволяет принудительно предложить конкретную версию TLS и передать имя через SNI. Ключ -servername особенно важен на общих IP: без него сервер может выбрать сертификат и политику default virtual host. Доступные флаги, наборы шифров и формат вывода зависят от версии OpenSSL; сначала посмотрите локальную справку openssl s_client -help.

Проверяет подключение с TLS 1.2, передаёт SNI и запрашивает проверку имени хоста. В успешном выводе ищите `Protocol : TLSv1.2`, строку `Cipher : ...` и ожидаемый Subject/SAN сертификата. Ошибка проверки цепочки может быть особенностью trust store локальной OpenSSL; отдельно проверьте, какой сертификат сервер предъявил. Подробная диагностика chain incomplete, expired и hostname mismatch приведена в [«Ошибки SSL/TLS-сертификатов: expired, chain incomplete и mismatch»](/baza-znaniy/resheniya/oshibki-ssl-sertifikatov).
openssl s_client -connect api.example.com:443 -servername api.example.com -tls1_2 -verify_hostname api.example.com -verify_return_error
Проверяет TLS 1.3. Если TLS 1.3 заявлен в политике и поддержан endpoint, в выводе будет `Protocol : TLSv1.3`. Отказ может означать отсутствие поддержки на терминаторе, CDN либо в используемой сборке OpenSSL; сначала установите, какой компонент завершает внешнее соединение.
openssl s_client -connect api.example.com:443 -servername api.example.com -tls1_3
Пытается подключиться с TLS 1.0. Успешное рукопожатие означает, что TLS 1.0 принимается внешним терминатором либо проверяется другой маршрут или DNS-адрес. Неуспех подтверждает серверный запрет только тогда, когда вывод показывает ответ удалённой стороны, например alert о неподдерживаемой версии. Локальные ошибки вроде отсутствия допустимых шифров или запрета TLS 1.0 политикой самой OpenSSL не характеризуют endpoint; в таком случае повторите проверку разрешённым совместимым клиентом или внешним сканером.
openssl s_client -connect api.example.com:443 -servername api.example.com -tls1
Пытается подключиться с TLS 1.1. Успешное рукопожатие означает, что версия всё ещё принимается на проверяемом маршруте. При отказе отличайте alert, полученный от сервера, от локального запрета или отсутствия подходящих шифров в OpenSSL. Неоднозначный результат подтвердите другим поддерживаемым клиентом или внешним сканером и фиксируйте отдельно от проверки TLS 1.0.
openssl s_client -connect api.example.com:443 -servername api.example.com -tls1_1
Пытается согласовать конкретный TLS 1.2 cipher suite. Используйте только имя, которое распознаёт ваша OpenSSL. Если соединение успешно, набор разрешён и согласован; если нет — это может означать запрет на сервере, отсутствие подходящего сертификата или неподдерживаемость со стороны клиента.
openssl s_client -connect api.example.com:443 -servername api.example.com -tls1_2 -cipher 'ECDHE-RSA-AES128-GCM-SHA256'
Пытается использовать конкретный TLS 1.3 cipher suite. Для TLS 1.3 применяется `-ciphersuites`, а не `-cipher`. Если локальная OpenSSL не знает этот флаг, она слишком старая для такой проверки либо собрана с иными возможностями.
openssl s_client -connect api.example.com:443 -servername api.example.com -tls1_3 -ciphersuites 'TLS_AES_128_GCM_SHA256'

Что означает успешное подключение

Успешный s_client доказывает возможность конкретного рукопожатия с точки запуска команды. Он не заменяет проверку прикладного ответа, проверки имени хоста в реальном клиенте, требований mTLS и доступа из сетей пользователей. Для HTTP-проверки после handshake можно отправить запрос GET / HTTP/1.1 с заголовком Host, но тестируйте только разрешённые endpoint.

SSL Labs и другие внешние сканеры: как читать результат

Qualys SSL Labs SSL Server Test удобен для публично доступного HTTPS-сервиса: он проверяет endpoint снаружи и показывает поддерживаемые протоколы, cipher suites, свойства сертификата, параметры обмена ключами и ряд известных проблем TLS-конфигурации. Он не подходит для внутренних endpoint, недоступных из интернета, и не показывает политику бэкенда, скрытого за CDN или балансировщиком.

  • Используйте отчёт как снимок реально доступного endpoint: найдите включённые TLS 1.0/1.1, слабые наборы, неожиданный сертификат, отсутствие SNI-ожидаемого virtual host и предупреждения по известным атакам.
  • Сверяйте hostname, IP и время проверки: CDN, геораспределение и разные IPv4/IPv6-маршруты могут давать неодинаковый результат.
  • Не считайте буквенный рейтинг единственным критерием безопасности. Высокая оценка не подтверждает отсутствие уязвимостей приложения, корректность логирования, защиту закрытого ключа или применимость всех предупреждений к вашей архитектуре.
  • Каждую находку подтвердите вручную: конфигурацией TLS-терминатора, OpenSSL-тестом, журналами и документацией компонента. Проверка CVE и приоритизация исправлений относятся к статье «Управление уязвимостями сервера: CVE, сканирование и приоритизация».
  • Для внутренних систем используйте сканер, который разрешено запускать из нужного сегмента, либо независимый клиент в той же сети. Сам факт недоступности SSL Labs не является ошибкой TLS.

Если проверка и конфигурация расходятся

Проблема

Старый TLS всё ещё принимается после изменения Nginx или Apache

Возможные причины

  • TLS завершается на CDN, балансировщике или reverse proxy перед изменённым сервером
  • Изменён не тот VirtualHost/server block либо действует включаемый конфигурационный файл
  • Конфигурация не прошла reload или проверяется другой IP, IPv6-адрес либо порт

Решение

Сравните DNS-ответы, IP-адрес назначения и цепочку компонентов. Повторите проверку с нужным -servername, проверьте активную конфигурацию и журнал reload. Вносите ограничение на фактическом внешнем TLS-терминаторе, затем повторите тест с независимого узла.

Как избежать

В инвентаризации храните соответствие hostname → внешний терминатор → бэкенд и проверяйте IPv4 и IPv6 отдельно, если оба опубликованы.

Проблема

После отключения TLS 1.0/1.1 клиент получает ssl handshake failed

Возможные причины

  • Клиент не поддерживает TLS 1.2
  • Клиент не поддерживает оставшиеся cipher suites
  • Клиент не передаёт SNI или ожидает другой сертификат
  • Сервис использует mTLS либо проблема связана с цепочкой сертификатов

Решение

Зафиксируйте версию клиента, hostname, время, исходную сеть и ошибку. Проверьте этот путь поддерживаемым клиентом и сопоставьте с журналом терминатора. Предпочтительное исправление — обновление клиента. Если это временно невозможно, рассмотрите отдельный совместимый endpoint с ограниченной областью и документированным сроком исключения, а не возврат старого TLS для всего публичного сервиса.

Как избежать

До изменения включайте владельцев интеграций в инвентаризацию и проводите пилот с наблюдением за ошибками.

Проблема

Сервер отдаёт не тот сертификат или не тот набор параметров

Возможные причины

  • Проверка выполнена по IP без SNI
  • Нет привязки hostname к правильному virtual host
  • На CDN, балансировщике и бэкенде настроены разные сертификаты или политики

Решение

Проверяйте DNS-имя с -servername и сопоставьте результат с конфигурацией каждого уровня. Исправьте привязку имени на фактическом TLS-терминаторе. Не отключайте SNI как способ обхода: современные многодоменные endpoint обычно требуют его для правильного выбора конфигурации.

Как избежать

В тестовом наборе для каждого hostname фиксируйте ожидаемые Subject/SAN, отпечаток сертификата, минимальную TLS-версию и назначение endpoint.

Термины в статье

ECDHE — механизм согласования ключей на эллиптических кривых с эфемерными ключевыми парами, поддерживающий прямую секретность при последующей компрометации долгосрочного ключа.
OpenSSL — программная криптографическая библиотека и набор утилит для реализации TLS, управления сертификатами, ключами, хешированием и другими криптографическими операциями.
Perfect Forward Secrecy — свойство криптосеанса, при котором компрометация долгосрочного ключа не позволяет расшифровать ранее записанный трафик без сеансовых ключей.
SNI — расширение TLS, в котором клиент передаёт имя целевого хоста в ClientHello, позволяя серверу выбрать сертификат и TLS-конфигурацию до HTTP-запроса.
SSL — устаревшее семейство протоколов защиты сетевых соединений, предшествующее TLS; версии SSL 2.0 и SSL 3.0 не следует включать в рабочих конфигурациях.
TLS — криптографический протокол защиты прикладных данных при передаче по сети, обеспечивающий их конфиденциальность и целостность, а также аутентификацию сервера и, при настройке, клиента.
TLS 1.0 — устаревшая версия протокола защиты транспортного соединения, определённая RFC 2246 и выведенная из употребления RFC 8996 из-за известных ограничений безопасности.
TLS 1.1 — версия криптографического протокола защиты транспортных соединений, устаревшая и запрещённая современными рекомендациями из-за известных ограничений безопасности.
TLS 1.2 — версия криптографического протокола защиты транспортных соединений, поддерживающая согласование современных наборов шифров и проверку сертификата сервера.
TLS 1.3 — актуальная версия протокола защиты транспортных соединений, исключающая ряд устаревших алгоритмов и сокращающая число этапов криптографического рукопожатия.
TLS handshake — начальный обмен сообщениями TLS: стороны согласуют версию и криптопараметры, формируют ключи сеанса и обычно аутентифицируют сервер, а при mTLS — также клиента.
Набор шифров — согласуемая спецификация криптографических алгоритмов и параметров защищённого сеанса, определяющая аутентификацию, обмен ключами и защиту данных.
Понижение версии протокола — атака, при которой нарушитель вынуждает стороны перейти на более старую или слабую версию протокола либо набор криптографических параметров.
Проверка имени хоста — этап валидации TLS-сертификата, при котором имя целевого узла сопоставляется с DNS-именем или IP-адресом в SAN сертификата.
Сертификат TLS — цифровой документ X.509, содержащий открытый ключ и идентификаторы субъекта и подписанный издателем; доверие к связи определяется цепочкой и политикой клиента.

Вопросы по теме

Все вопросы и ответы

Можно ли временно оставить TLS 1.0 или 1.1 для старого клиента?

Сначала подтвердите, что зависимость действительно существует: определите конкретный клиент, устройство, библиотеку или интеграцию, которая не поддерживает TLS 1.2. Отсутствие записей о старых версиях в логах само по себе не доказывает, что таких клиентов нет.

Если исключение неизбежно, формально зафиксируйте владельца риска, причину, компенсирующие меры и дату отключения TLS 1.0 или TLS 1.1. Предпочтительный вариант — обновить клиент. Если это невозможно сразу, рассмотрите выделение отдельного endpoint для устаревшей интеграции, а основной публичный сервис оставьте с TLS 1.2 и TLS 1.3. После изменения проверьте рабочие сценарии критичных клиентов и ошибки handshake, затем вернитесь к отключению исключения в установленный срок.

Почему настройки cipher suites для TLS 1.2 не применяются к TLS 1.3?

Потому что в TLS 1.3 используется другая модель согласования: наборы имеют ограниченный современный состав, а обмен ключами и аутентификация выбираются отдельно. Поэтому список cipher suites для TLS 1.2 обычно не управляет TLS 1.3. Для TLS 1.3 нужны отдельные параметры, если их поддерживают версия сервера и криптобиблиотека.

Как понять, что TLS 1.0 отключён на endpoint, а не запрещён моей OpenSSL?

Проверяйте опубликованное DNS-имя, передавая SNI через -servername, иначе на общем IP можно попасть в default virtual host с другой политикой. При попытке TLS 1.0 успешное рукопожатие означает, что внешний TLS-терминатор всё ещё принимает эту версию либо проверяется другой маршрут или DNS-адрес.

Неуспех является доказательством отключения только тогда, когда из вывода видно, что отказ пришёл от удалённой стороны, например alert о неподдерживаемой версии протокола. Локальные сообщения OpenSSL об отсутствии подходящих шифров, запрете TLS 1.0 политикой клиента или неподдерживаемых параметрах не говорят о настройке endpoint. В таком случае повторите тест с разрешённым совместимым клиентом либо внешним сканером и отдельно зафиксируйте результат проверки TLS 1.0.

Почему ошибка `ssl handshake failed` не всегда связана со слабым шифром?

Потому что ошибка handshake описывает сбой согласования в целом, а не конкретно cipher suite. Причиной могут быть SNI, клиентский сертификат, цепочка сертификатов, имя хоста или сетевой посредник. Проверяйте имя и сертификат, фактически согласованную версию TLS и набор шифров, а также журналы TLS-терминатора.

Повлияет ли отключение TLS в IIS на другие службы Windows Server?

Для IIS TLS-политику нельзя рассматривать только как настройку сайта. HTTPS принимает HTTP.sys, а криптографические протоколы и cipher suites предоставляет Schannel. Поэтому отключение протоколов в SCHANNEL\Protocols или изменение политики SSL Cipher Suite Order может изменить поведение других служб Windows, которые используют тот же стек.

Отдельно учитывайте роли Schannel: подраздел Server относится к входящим соединениям, а Client — к исходящим соединениям самого сервера. Локальные значения могут быть переопределены доменными GPO, обновлениями Windows и локальной криптографической политикой. До изменения проверьте эффективные политики, подготовьте резервное состояние и протестируйте зависимые приложения. После изменения Schannel обычно требуется перезагрузка Windows, а не только перезапуск IIS.

Зачем передавать SNI при проверке TLS на общем IP-адресе?

SNI сообщает серверу имя сайта, к которому обращается клиент. Без него на общем IP сервер может выбрать сертификат и TLS-политику default virtual host, а не проверяемого hostname. Поэтому успешная проверка без -servername не подтверждает настройки нужного публичного endpoint.