Возможности принудительного применения версии TLS теперь доступны для привязки сертификата в Windows Server 2019

Авторы статьи:

Эндрю Маршалл (Andrew Marshall), главный руководитель программы безопасности, служба обеспечения безопасности и доверия клиентов

Габриэль Монтенегро (Gabriel Montenegro), главный руководитель программы, служба основных сетей

Нираньян Инамдар (Niranjan Inamdar), старший инженер по программному обеспечению, служба основных сетей

Майкл Браун (Michael Brown), старший инженер по программному обеспечению, службы IIS

Иван Пашов (Ivan Pashov), ведущий специалист по проектированию программного обеспечения, служба основных сетей

Август 2019

Работая над удалением своих зависимостей от TLS 1.0, технические специалисты всего мира сталкиваются со сложной задачей: необходимость совместить собственные требования к уровню безопасности с готовностью клиентов к миграции. На сегодняшний день мы помогли клиентам устранить эти проблемы, добавив поддержку TLS 1.2 в старые операционные системы, отправив новые форматы ведения журнала в IIS для обнаружения слабого использования TLS клиентами и предоставления последних технических рекомендаций по устранению зависимостей TLS 1.0.

Сегодня корпорация Майкрософт представляет новый мощный инструмент Windows, позволяющий упростить переход на TLS версии 1.2 и выше. С момента выпуска обновления KB4490481 Windows Server 2019 позволяет запрещать использование ненадежных версий TLS с назначенными вами индивидуальными сертификатами. Мы называем эту функцию "Отключить устаревшую версию TLS", и она эффективно применяет версию TLS и пол набора шифров для любого выбранного сертификата.

Отключение устаревшего TLS также позволяет онлайн-службе предлагать две разные группы конечных точек на одном оборудовании: один позволяет только TLS 1.2+ трафик, а другой — устаревший трафик TLS 1.0. Изменения реализуются в HTTP.sys и при выпуске дополнительных сертификатов позволяют направлять трафик в новую конечную точку с соответствующей версией TLS. До этого изменения развертывание таких возможностей потребовало бы дополнительных инвестиций в оборудование, поскольку настроить такие параметры для всей системы можно было бы только с помощью реестра.

Сценарий работы функции в подробностях

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

Default TLS Version selection

Рис. 1. Выбор версии TLS по умолчанию и функциональные возможности привязки сертификатов

  • secure.contoso.com направляет клиентов к конечной точке службы, поддерживающей только TLS 1.2 и более поздних версий.

  • legacy.contoso.com направляет клиентов с устаревшими потребностями TLS 1.0 (например, которые по-прежнему переносятся на TLS 1.2) в конечную точку, которая поддерживает TLS 1.0 в течение ограниченного времени. Это позволяет клиентам завершить проверку готовности к переходу на TLS 1.2, не прерывая обслуживание и не создавая помехи другим клиентам, уже готовым к использованию TLS 1.2.

Традиционно вам потребуется два физически отдельных узла для обработки всего трафика и обеспечения применения версий TLS, так как для обслуживания запросов TLS с минимальной версией протокола требуется отключение более слабых протоколов с помощью параметров реестра на уровне системы. Мы сделали эту функциональность доступной на уровне выше стека, в котором сеанс TLS привязывается к сертификату, поэтому для назначения конкретной минимальной версии TLS можно использовать процесс, показанный ниже на рис. 2.

Enforcing minimum TLS version for a selected certificate

Рис. 2. Отключение устаревшей функции TLS, применяющей минимальную версию TLS для выбранного сертификата, Secure.contoso.com.

Руководство по развертыванию функции

Функцию отключения устаревшей версии TLS можно развернуть с помощью пользовательского интерфейса сервера служб IIS, команд PowerShell или API-интерфейсов HTTP.sys на C++.

Вариант 1. Конфигурация пользовательского интерфейса IIS (доступна в Windows 10 версии 2004 и Windows Server версии 2004 и более поздней версии)

Создайте привязку к сайту для SSL-сертификата "secure.contoso.com", как показано ниже, установите флажок "Отключить устаревшую версию TLS" и нажмите "ОК".

IIS UI

Вариант 2. PowerShell (доступно в Windows 10 версии 2004 и Windows Server версии 2004 и более поздних версиях)

В PowerShell можно сослаться на флаги SSL следующим образом:

[Microsoft.Web.Administration.SslFlags]::DisableLegacyTLS

Удобнее создавать для них переменные с короткими именами:

$Sni = [Microsoft.Web.Administration.SslFlags]::Sni
    
$Sni\_CCS = [Microsoft.Web.Administration.SslFlags]::Sni + [Microsoft.Web.Administration.SslFlags]::CentralCertStore
    
$CCS = [Microsoft.Web.Administration.SslFlags]::CentralCertStore
    
$DisableLegacyTLS = [Microsoft.Web.Administration.SslFlags]::DisableLegacyTLS
    
 $storeLocation = "Cert:\\LocalMachine\\My"

Пример создания привязки к новому сайту и отключения устаревшей версии TLS:

$BindingInformation = "\*:443:"

$siteName = "contoso"

$Thumbprint = $certificate.ThumbPrint

New-IISSite со значением свойства DisableLegacyTLS для Sslflag:

New-IISSite $siteName "$env:systemdrive\\inetpub\\wwwroot" "\*:443:secure.contoso.com" https $certificate.Thumbprint $DisableLegacyTLS $storeLocation -passthru

Пример добавления привязки к существующему сайту и отключения устаревшей версии TLS:

New-IISSiteBinding -Name "Default Web Site" -BindingInformation $BindingInformation -CertificateThumbPrint $certificate.Thumbprint -Protocol https -SslFlag $DisableLegacyTLS, $CCS -Force -verbose

Кроме того, можно устранить неполадки и проверить эту функцию с помощью Netsh:

  • Добавление новой привязки:

    netsh http add sslcert <стандартные параметры> disablelegacytls=enable

  • Изменение существующей привязки:

    netsh http update sslcert <стандартные параметры> disablelegacytls=enable

  • Проверьте, задано ли оно в привязке:

    netsh http show sslcert <стандартные параметры>

    Контроль за отключением устаревших версий TLS: set/Not Set

Вариант 3. API HTTP.sys C++ (доступно сейчас)

Наряду с отключением устаревшей версии TLS в HTTP. sys были внесены следующие дополнения:

  • HTTP_SERVICE_CONFIG_SSL_PARAM. DefaultFlags теперь поддерживает следующие новые значения:

  • HTTP_SERVICE_CONFIG_SSL_FLAG_ENABLE_SESSION_TICKET. Включение и отключение запроса сеанса для конкретной конечной точки SSL.

  • HTTP_SERVICE_CONFIG_SSL_FLAG_LOG_EXTENDED_EVENTS. Включение и отключение расширенного ведения журнала событий для определенной конечной точки SSL. Дополнительные события записываются в журнал событий Windows. Существует только одно событие, поддерживаемое по состоянию на данный момент, которое регистрируется при сбое подтверждения SSL.

  • HTTP_SERVICE_CONFIG_SSL_FLAG_DISABLE_LEGACY_TLS. Включение и отключение устаревших версий TLS для конкретной конечной точки SSL. Установка этого флага отключает TLS1.0/1.1 для этой конечной точки и ограничивает наборы шифров, которые можно использовать для наборов шифров HTTP2.

  • HTTP_SERVICE_CONFIG_SSL_FLAG_DISABLE_TLS12. Включение и отключение TLS1.2 для конкретной конечной точки SSL.

  • HTTP_SERVICE_CONFIG_SSL_FLAG_DISABLE_HTTP2. Включение и отключение HTTP/2 для конкретной конечной точки SSL.

Самый простой способ включения и отключения этой функции для каждого сертификата в C++ — это флаг HTTP_SERVICE_CONFIG_SSL_FLAG_DISABLE_LEGACY_TLS, предоставляемый API HTTP.sys HttpSetServiceConfiguration.

Если задано отключение устаревшей версии TLS, применяются следующие ограничения.

  • Отключите протоколы SSL2, SSL3, TLS1.0 и TLS1.1.

  • Отключите шифры DES, 3DES и RC4 (будет использоваться только AES).

  • Отключите шифрование AES в режиме CBC (будет использоваться только AES GCM).

  • Отключите обмен ключами RSA.

  • Отключите обмен ключами по протоколу DH для ключей длиной меньше 2048 бит.

  • Отключите обмен ключами по протоколу ECDH для ключей длиной меньше 224 бит.

Официальная документация по этим изменениям скоро появится на сайте docs.Microsoft.com.

Дальнейшие действия по применению версии TLS

Отключение устаревшей версии TLS открывает новые широкие возможности, позволяющие задать определенную версию TLS и минимальный уровень комплекта шифров для конкретных привязок к сертификатам и конечным точкам. Вам также потребуется разработать правила именования сертификатов, при выпуске которых эта функция использовалась. Рекомендуем для начала задать себе следующие вопросы.

  • Хочу ли я уже сейчас в обязательном порядке использовать TLS 1.2 на заданном по умолчанию пути к конечной точке службы и предоставлять другой сертификат в качестве резервной точки доступа для пользователей, которым требуется TLS 1.0?

  • Следует ли использовать сертификацию Contoso по умолчанию с использованием устаревшей версии TLS? Если да, то мне, возможно, придется предоставлять сертификат legacy.contoso.com, привязанный к конечной точке, допускающей использование TLS 1.0.

  • Как лучше сообщить моим клиентам о рекомендуемом использовании этих сертификатов?

Эту функцию можно использовать для удовлетворения потребностей больших групп клиентов, которые обязаны использовать TLS 1.2+ и те, которые по-прежнему работают над миграцией с TLS 1.0, все без дополнительных расходов на оборудование. Помимо текущей доступности привязки версий TLS для каждого сертификата в Windows Server 2019, корпорация Майкрософт будет искать, чтобы отключить устаревший ПРОТОКОЛ TLS на его веб-службы в зависимости от спроса клиента.