Возможности принудительного применения версии TLS теперь доступны для привязки сертификата в Windows Server 2019TLS version enforcement capabilities now available per certificate binding on Windows Server 2019

Авторы статьи:This post is authored by

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

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

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

Майкл Браун (Michael Brown), старший инженер по программному обеспечению, службы IISMichael Brown, Senior Software Engineer, Internet Information Services

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

Август 2019 г.August 2019

Работая над удалением своих зависимостей от TLS 1.0, технические специалисты всего мира сталкиваются со сложной задачей: необходимость совместить собственные требования к уровню безопасности с готовностью клиентов к миграции.As engineers worldwide work to eliminate their own dependencies on TLS 1.0, they run into the complex challenge of balancing their own security needs with the migration readiness of their customers. До сих пор мы помогали клиентам решать эти проблемы, добавляя поддержку протокола TLS 1.2 в более старые операционные системы, обеспечивая новые форматы входа в службы IIS, помогающие обнаруживать использование ненадежных версий TLS клиентами, и предоставляя новейшие технические руководства по удалению зависимостей TLS 1.0.To date we have helped customers address these issues by adding TLS 1.2 support to older operating systems, by shipping new logging formats in IIS for detecting weak TLS usage by clients, as well as providing the latest technical guidance for eliminating TLS 1.0 dependencies.

Сегодня корпорация Майкрософт представляет новый мощный инструмент Windows, позволяющий упростить переход на TLS версии 1.2 и выше.Now Microsoft is pleased to announce a powerful new feature in Windows to make your transition to a TLS 1.2+ world easier. С момента выпуска обновления KB4490481 Windows Server 2019 позволяет запрещать использование ненадежных версий TLS с назначенными вами индивидуальными сертификатами.Beginning with KB4490481, Windows Server 2019 now allows you to block weak TLS versions from being used with individual certificates you designate. Мы называем эту функцию отключением устаревшей версии TLS. Она позволяет задать версию TLS и минимальный уровень комплекта шрифтов, которые будут использоваться для выбранного вами сертификата.We call this feature “Disable Legacy TLS” and it effectively enforces a TLS version and cipher suite floor on any certificate you select.

Кроме того, отключение устаревшей версии TLS позволяет веб-службе предоставить две различные группы конечных точек на одном оборудовании: одна разрешает передавать только трафик TLS версии 1.2 и выше, а другая предназначается для трафика устаревшего протокола TLS 1.0.Disable Legacy TLS also allows an online service to offer two distinct groupings of endpoints on the same hardware: one which allows only TLS 1.2+ traffic, and another which accommodates legacy TLS 1.0 traffic. Изменения реализованы в HTTP.sys и в сочетании с выпуском дополнительных сертификатов обеспечивают маршрутизацию трафика на новую конечную точку с надлежащей версией TLS.The changes are implemented in HTTP.sys, and in conjunction with the issuance of additional certificates, allow traffic to be routed to the new endpoint with the appropriate TLS version. До этого изменения развертывание таких возможностей потребовало бы дополнительных инвестиций в оборудование, поскольку настроить такие параметры для всей системы можно было бы только с помощью реестра.Prior to this change, deploying such capabilities would require an additional hardware investment because such settings were only configurable system-wide via registry.

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

Для типового сценария развертывания потребуется один набор оборудования в центре обработки данных, обслуживающем клиентов с различными потребностями: одним прямо сейчас требуется протокол не ниже TLS 1.2, а другие еще не избавились от зависимостей TLS 1.0.A common deployment scenario features one set of hardware in a datacenter with customers of mixed needs: some need TLS 1.2 as an enforced minimum right now and others aren’t done removing TLS 1.0 dependencies. На рис. 1 показан выбор версии TLS и привязка сертификата как заведомо отдельные действия.Figure 1 illustrates TLS version selection and certificate binding as distinctly separate actions. Эта функция применяется по умолчанию.This is the default functionality:

Выбор версии протокола TLS по умолчанию

Рисунок 1. Функция выбора версии протокола TLS и привязки сертификата по умолчаниюFigure 1: Default TLS Version selection and Certificate Binding Functionality

  • https://secure.contoso.com направляет клиентов в конечную точку службы, поддерживающую только TLS версии 1.2 и выше.https://secure.contoso.com directs your customers to a service endpoint supporting only TLS 1.2 and above.

  • https://legacy.contoso.com направляет клиентов, которым требуется устаревший протокол TLS 1.0 (например, тех, кто еще не закончил переход на TLS 1.2) в конечную точку, которая поддерживает TLS 1.0 в течение ограниченного периода времени.https://legacy.contoso.com directs customers with legacy TLS 1.0 needs (like those still migrating to TLS 1.2) to an endpoint which supports TLS 1.0 for a limited time. Это позволяет клиентам завершить проверку готовности к переходу на TLS 1.2, не прерывая обслуживание и не создавая помехи другим клиентам, уже готовым к использованию TLS 1.2.This allows customers to finish readiness testing for TLS 1.2 without service disruption and without blocking other customers who are ready for TLS 1.2.

В обычной ситуации вам потребовались бы два отдельных физических узла для обработки всего трафика и принудительного применения версии TLS, так как для обслуживания запросов, использующих минимальную версию TLS, необходимо отключить менее надежные протоколы в параметрах реестра во всей системе.Traditionally, you’d need two physically separate hosts to handle all the traffic and provide for TLS version enforcement, as servicing TLS requests with a minimum protocol version requires disabling weaker protocols via system-wide registry settings. Мы сделали эту функциональность доступной на уровне выше стека, в котором сеанс TLS привязывается к сертификату, поэтому для назначения конкретной минимальной версии TLS можно использовать процесс, показанный ниже на рис. 2.We have made this functionality available higher up the stack, where the TLS session is bound to the certificate, so a specific minimum TLS version can be assigned as described in Figure 2 below.

Назначение минимальной версии TLS для выбранного сертификата

Рис. 2. Назначение минимальной версии TLS для выбранного сертификата Secure.contoso.com с помощью функции отключения устаревшей версии TLS.Figure 2: Disable Legacy TLS feature enforcing minimum TLS version for a selected certificate, Secure.contoso.com.

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

Функцию отключения устаревшей версии TLS можно развернуть с помощью пользовательского интерфейса сервера служб IIS, команд PowerShell или API-интерфейсов HTTP.sys на C++.The Disable Legacy TLS feature can be deployed through the Internet Information Services (IIS) Server UI, via PowerShell commands or C++ HTTP.sys APIs.

Вариант #1. Настройка пользовательского интерфейса IIS (доступно с апреля 2020 г.)Option #1: IIS UI configuration (Available April 2020)

Создайте привязку к сайту для SSL-сертификата "secure.contoso.com", как показано ниже, установите флажок "Отключить устаревшую версию TLS" и нажмите "ОК".Create a site binding for the SSL Certificate “secure.contoso.com” as shown below, then check “Disable Legacy TLS” and click OK.

Пользовательский интерфейс IIS

Вариант #2. PowerShell (доступно с апреля 2020 г.)Option #2: PowerShell (Available April 2020)

В PowerShell можно сослаться на флаги SSL следующим образом:In PowerShell you can reference SSL flags like this:

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

Удобнее создавать для них переменные с короткими именами:It’s convenient to create shorter named variables for them:

$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:An example of creating a site binding to a new site and disabling legacy TLS:

$BindingInformation = "\*:443:"

$siteName = "contoso"

$Thumbprint = $certificate.ThumbPrint

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

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

Пример добавления привязки к существующему сайту и отключения устаревшей версии TLS:An example of adding a site binding to an existing site and disabling legacy TLS:

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

Кроме того, можно устранить неполадки и проверить эту функцию с помощью Netsh:Additionally, one can troubleshoot and test this feature with Netsh:

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

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

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

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

  • Просмотр параметров привязки:Check whether it is set on a binding:

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

    Проверьте состояние отключения устаревшей версии TLS: задана/не задана.Watch for Disable Legacy TLS Versions  : Set/Not Set

Вариант #3. API-интерфейсы HTTP.sys на C++ (доступно сейчас)Option #3: C++ HTTP.sys APIs (Available Now)

Наряду с отключением устаревшей версии TLS в HTTP. sys были внесены следующие дополнения:Along with Disable Legacy TLS, the following additions have been made to HTTP.sys:

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

  • HTTP_SERVICE_CONFIG_SSL_FLAG_ENABLE_SESSION_TICKET: включение или отключение билета сеанса для определенной конечной точки SSL.HTTP_SERVICE_CONFIG_SSL_FLAG_ENABLE_SESSION_TICKET: Enable/Disable Session Ticket for a particular SSL endpoint.

  • HTTP_SERVICE_CONFIG_SSL_FLAG_LOG_EXTENDED_EVENTS: включение или отключение ведения расширенного журнала событий для определенной конечной точки SSL.HTTP_SERVICE_CONFIG_SSL_FLAG_LOG_EXTENDED_EVENTS : Enable/Disable extended event logging for a particular SSL endpoint. Дополнительные события записываются в журнал событий Windows.Additional events are logged to Windows Event Log. На данный момент поддерживается только одно событие, которое регистрируется при сбое подтверждения SSL.There is only one event supported as of now which is logged when the SSL handshake fails.

  • HTTP_SERVICE_CONFIG_SSL_FLAG_DISABLE_LEGACY_TLS: включение или отключение устаревших версий TLS для определенной конечной точки SSL.HTTP_SERVICE_CONFIG_SSL_FLAG_DISABLE_LEGACY_TLS: Enable/Disable legacy TLS versions for a particular SSL endpoint. Если этот флаг установлен, протокол TLS 1.0/1.1 для соответствующей конечной точки будет отключен, а также будут ограничены комплекты шифров, которые можно использовать для HTTP/2.Setting this flag will disable TLS1.0/1.1 for that endpoint and will also restrict cipher suites that can be used to HTTP2 cipher suites.

  • HTTP_SERVICE_CONFIG_SSL_FLAG_DISABLE_TLS12: включение или отключение TLS 1.2 для определенной конечной точки SSL.HTTP_SERVICE_CONFIG_SSL_FLAG_DISABLE_TLS12 : Enable/Disable TLS1.2 for a particular SSL endpoint.

  • HTTP_SERVICE_CONFIG_SSL_FLAG_DISABLE_HTTP2: включение или отключение HTTP/2 для определенной конечной точки SSL.HTTP_SERVICE_CONFIG_SSL_FLAG_DISABLE_HTTP2: Enable/Disable HTTP/2 for a particular SSL endpoint.

Включить или отключить эту функциональность для каждого сертификата на C++ проще всего с помощью флага HTTP_SERVICE_CONFIG_SSL_FLAG_DISABLE_LEGACY_TLS, предоставляемого API HttpSetServiceConfiguration в HTTP.sys.The simplest way to enable/disable this functionality per certificate in C++ is with the HTTP_SERVICE_CONFIG_SSL_FLAG_DISABLE_LEGACY_TLS flag provided by the HttpSetServiceConfiguration HTTP.sys API.

Если задано отключение устаревшей версии TLS, применяются следующие ограничения.When Disable Legacy TLS is set, the following restrictions are enforced:

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

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

  • Отключите шифрование AES в режиме CBC (будет использоваться только AES GCM).Disable encryption cipher AES with CBC chaining mode (so only AES GCM is used).

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

  • Отключите обмен ключами по протоколу DH для ключей длиной меньше 2048 бит.Disable DH key exchange with key size less than 2048.

  • Отключите обмен ключами по протоколу ECDH для ключей длиной меньше 224 бит.Disable ECDH key exchanges with key size less than 224.

Официальная документация по этим изменениям скоро появится на сайте docs.Microsoft.com.Official documentation of these changes on docs.Microsoft.com is forthcoming.

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

Отключение устаревшей версии TLS открывает новые широкие возможности, позволяющие задать определенную версию TLS и минимальный уровень комплекта шифров для конкретных привязок к сертификатам и конечным точкам.Disable Legacy TLS provides powerful new capabilities for enforcing TLS version/cipher suite floors on specific certificate/endpoint bindings. Вам также потребуется разработать правила именования сертификатов, при выпуске которых эта функция использовалась.It also requires you to plan out the naming of the certificates issued with this functionality enabled. Рекомендуем для начала задать себе следующие вопросы.Some of the considerations include:

  • Хочу ли я уже сейчас в обязательном порядке использовать TLS 1.2 на заданном по умолчанию пути к конечной точке службы и предоставлять другой сертификат в качестве резервной точки доступа для пользователей, которым требуется TLS 1.0?Do I want the default path to my service endpoint to enforce TLS 1.2 today, and provide a different certificate as a backup “legacy” access point for users who need TLS 1.0?

  • Хочу ли я использовать функцию отключения устаревшей версии TLS для уже имеющейся и заданной по умолчанию сертификации www.contoso.com?Should my default, already-in-use www.contoso.com certification use Disable Legacy TLS? Если да, то мне, возможно, придется предоставлять сертификат legacy.contoso.com, привязанный к конечной точке, допускающей использование TLS 1.0.If so, I may need to provide a legacy.contoso.com certificate and bind it to an endpoint allowing TLS 1.0.

  • Как лучше сообщить моим клиентам о рекомендуемом использовании этих сертификатов?How can I best communicate the recommended usage of these certificates to my customers?

Вы можете воспользоваться этой функцией, чтобы без затрат на дополнительное оборудование удовлетворить потребности больших групп клиентов — тех, кому обязательно нужен протокол TLS версии 1.2 или выше, и тех, кто еще не завершил переход с TLS 1.0.You can leverage this feature to meet the needs of large groups of customers – those with an obligation to use TLS 1.2+, and those still working on the migration away from TLS 1.0, all without additional hardware expenditure. Помимо привязки сертификата к версии TLS в Windows Server 2019, которая доступна уже сейчас, корпорация Майкрософт намеревается предоставлять по запросу доступ к функции отключения устаревшей версии TLS клиентам своих веб-служб.In addition to today’s availability of per-certificate TLS version binding in Windows Server 2019, Microsoft will look to make Disable Legacy TLS available across its online services based on customer demand.