Funkcje wymuszania wersji protokołu TLS są teraz dostępne dla powiązania certyfikatu w systemie Windows Server 2019

Autorami tego wpisu są:

Andrew Marshall, główny kierownik programu zabezpieczeń, Bezpieczeństwo i zaufanie klientów

Gabriel Montenegro, główny kierownik programu, Podstawowe operacje sieciowe

Niranjan Inamdar, starszy programista, Podstawowe operacje sieciowe

Michael Brown, starszy programista, Internet Information Services

Ivan Pashov, kierownik zespołu inżynierów oprogramowania, Podstawowe operacje sieciowe

Sierpień 2019

Inżynierowie na całym świecie wkładają wiele wysiłków w celu wyeliminowania zależności od protokołu TLS 1.0, ale stają przed złożonymi wyzwaniami związanymi z zachowaniem równowagi między własnymi potrzebami w zakresie zabezpieczeń i stopniem gotowości swoich klientów do przeprowadzenia migracji. Do tej pory pomogliśmy klientom rozwiązać te problemy, dodając obsługę protokołu TLS 1.2 do starszych systemów operacyjnych, wysyłając nowe formaty rejestrowania w usługach IIS w celu wykrywania słabego użycia protokołu TLS przez klientów i udostępniając najnowsze wskazówki techniczne dotyczące eliminowania zależności protokołu TLS 1.0.

Teraz firma Microsoft z przyjemnością informuje o nowej funkcji systemu Windows ułatwiającej przejście do środowiska TLS 1.2+. Począwszy od poprawki KB4490481, system Windows Server 2019 umożliwia blokowanie używania słabych wersji protokołu TLS z wyznaczonymi indywidualnymi certyfikatami. Nazywamy tę funkcję "Wyłącz starszy protokół TLS" i skutecznie wymusza wersję protokołu TLS i podłogę zestawu szyfrowania na dowolnym wybranym certyfikacie.

Wyłączenie starszego protokołu TLS umożliwia również usłudze online oferowanie dwóch odrębnych grup punktów końcowych na tym samym sprzęcie: jeden, który zezwala tylko na ruch TLS 1.2+ i inny, który uwzględnia starszy ruch TLS 1.0. Zmiany są implementowane w systemie HTTP.sys, a wydawanie dodatkowych certyfikatów umożliwia kierowanie ruchu do nowego punktu końcowego z odpowiednią wersją protokołu TLS. Przed wprowadzeniem tej zmiany wdrożenie takich możliwości wymagało dodatkowej inwestycji w sprzęt, ponieważ takie ustawienia mogły być tylko konfigurowane na poziomie całego systemu za pomocą rejestru.

Szczegóły scenariusza funkcji

Typowy scenariusz wdrażania obejmuje jeden zestaw sprzętu w centrum danych i klientów mających różne potrzeby: niektórzy z nich wymagają już teraz wymuszania wersji co najmniej TLS 1.2, a inni nie zakończyli jeszcze usuwania zależności wersji TLS 1.0. Rysunek 1 ilustruje wybór wersji protokołu TLS i powiązanie certyfikatu jako dwie odrębne akcje. Jest to zachowanie domyślne:

Default TLS Version selection

Rysunek 1. Wybór domyślnej wersji protokołu TLS i funkcja powiązania certyfikatu

  • secure.contoso.com kieruje klientów do punktu końcowego usługi obsługującego tylko protokół TLS 1.2 i nowsze.

  • legacy.contoso.com kieruje klientów ze starszymi potrzebami protokołu TLS 1.0 (takimi jak te, które nadal migrują do protokołu TLS 1.2) do punktu końcowego obsługującego protokół TLS 1.0 przez ograniczony czas. Dzięki temu klienci mogą zakończyć testowanie gotowości do protokołu TLS 1.2 bez przerywania działania usługi i bez blokowania innych klientów, którzy są już gotowi do obsługi protokołu TLS 1.2.

Tradycyjnie potrzebujesz dwóch fizycznie oddzielnych hostów do obsługi całego ruchu i zapewnienia wymuszania wersji protokołu TLS, ponieważ obsługa żądań TLS z minimalną wersją protokołu wymaga wyłączenia słabszych protokołów za pośrednictwem ustawień rejestru całego systemu. Udostępniliśmy tę funkcjonalność na wyższym poziomie, na którym sesja TLS jest powiązana z certyfikatem, więc można przypisać określoną minimalną wersję protokołu TLS w sposób wyjaśniony na rysunku 2 poniżej.

Enforcing minimum TLS version for a selected certificate

Rysunek 2. Wyłączenie starszej funkcji protokołu TLS wymuszającej minimalną wersję protokołu TLS dla wybranego certyfikatu, Secure.contoso.com.

Wskazówki dotyczące wdrażania funkcji

Funkcję Wyłączanie starszych wersji protokołu TLS można wdrożyć za pomocą interfejsu użytkownika serwera Internet Information Services (IIS), za pomocą poleceń programu PowerShell lub interfejsu API sterownika HTTP.sys napisanego w języku C++.

Opcja 1: Konfiguracja interfejsu użytkownika usług IIS (dostępna w systemie Windows 10 w wersji 2004 i Windows Server w wersji 2004 i nowszej)

Utwórz powiązanie witryny dla certyfikatu SSL „secure.contoso.com”, jak pokazano poniżej, a następnie zaznacz pole wyboru „Wyłączanie starszych wersji protokołu TLS” i kliknij przycisk OK.

IIS UI

Opcja 2: Program PowerShell (dostępny w systemie Windows 10 w wersji 2004 i Windows Server w wersji 2004 i nowszej)

W programie PowerShell można odwoływać się do flag protokołu SSL w następujący sposób:

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

Wygodnie jest utworzyć zmienne o krótszych nazwach:

$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"

Przykład tworzenia powiązania witryny z nową witryną i wyłączania starszej wersji protokołu TLS:

$BindingInformation = "\*:443:"

$siteName = "contoso"

$Thumbprint = $certificate.ThumbPrint

Witryna New-IISSite z wartością Sslflag właściwości DisableLegacyTLS:

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

Przykład dodawania powiązania witryny z istniejącą witryną i wyłączania starszej wersji protokołu TLS:

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

Ponadto tę funkcję można testować i rozwiązywać problemy z nią związane za pomocą narzędzia Netsh:

  • Dodawanie nowego powiązania:

    netsh http add sslcert <zwykłe parametry> disablelegacytls=enable

  • Aktualizowanie istniejącego powiązania:

    netsh http update sslcert <zwykłe parametry> disablelegacytls=enable

  • Sprawdź, czy jest ona ustawiona na powiązanie:

    netsh http show sslcert <zwykłe parametry>

    Obejrzyj, jak wyłączyć starsze wersje protokołu TLS: set/Not Set

Opcja 3: interfejsy API HTTP.sys języka C++ (dostępne teraz)

Oprócz funkcji Wyłączanie starszych wersji protokołu TLS do sterownika HTTP.sys dodano następujące elementy:

  • HTTP_SERVICE_CONFIG_SSL_PARAM. Usługa DefaultFlags obsługuje teraz następujące nowe wartości:

  • HTTP_SERVICE_CONFIG_SSL_FLAG_ENABLE_SESSION_TICKET: Włączanie/wyłączanie biletu sesji dla określonego punktu końcowego SSL.

  • HTTP_SERVICE_CONFIG_SSL_FLAG_LOG_EXTENDED_EVENTS: Włączanie/wyłączanie rozszerzonego rejestrowania zdarzeń dla określonego punktu końcowego SSL. Dodatkowe zdarzenia są rejestrowane w dzienniku zdarzeń systemu Windows. Obecnie jest obsługiwane tylko jedno zdarzenie, które jest rejestrowane, gdy uzgadnianie SSL kończy się niepowodzeniem.

  • HTTP_SERVICE_CONFIG_SSL_FLAG_DISABLE_LEGACY_TLS: Włączanie/wyłączanie starszych wersji protokołu TLS dla określonego punktu końcowego PROTOKOŁU SSL. Ustawienie tej flagi wyłącza protokół TLS1.0/1.1 dla tego punktu końcowego i ogranicza zestawy szyfrowania, których można używać do zestawów szyfrowania HTTP2.

  • HTTP_SERVICE_CONFIG_SSL_FLAG_DISABLE_TLS12: Włączanie/wyłączanie protokołu TLS1.2 dla określonego punktu końcowego SSL.

  • HTTP_SERVICE_CONFIG_SSL_FLAG_DISABLE_HTTP2: Włącz/Wyłącz protokół HTTP/2 dla określonego punktu końcowego SSL.

Najprostszym sposobem włączenia/wyłączenia tej funkcji dla certyfikatu w języku C++ jest flaga HTTP_SERVICE_CONFIG_SSL_FLAG_DISABLE_LEGACY_TLS dostarczana przez interfejs API HTTPSetServiceConfiguration HTTP.sys.

Po ustawieniu funkcji Wyłączanie starszych wersji protokołu TLS są wymuszane następujące ograniczenia:

  • Wyłączane są protokoły SSL2, SSL3, TLS1.0 i TLS1.1.

  • Wyłączane jest szyfrowanie DES, 3DES i RC4 (używany jest tylko algorytm AES).

  • Wyłączane jest szyfrowanie AES w trybie łańcucha CBC (jest używany tylko algorytm AES GCM).

  • Wyłączana jest wymiana kluczy RSA.

  • Wyłączana jest wymiana kluczy DH z rozmiarem klucza mniejszym niż 2048.

  • Wyłączana jest wymiana kluczy ECDH z rozmiarem klucza mniejszym niż 224.

Oficjalna dokumentacja tych zmian będzie wkrótce dostępna w witrynie docs.Microsoft.com.

Następne kroki wymuszania wersji protokołu TLS

Funkcja Wyłączanie starszych wersji protokołu TLS zapewnia zaawansowane nowe możliwości wymuszania wersji protokołu TLS i rodzajów szyfrowania dla konkretnych powiązań certyfikatów i punktów końcowych. Wymaga ona także zaplanowania nazewnictwa certyfikatów wystawionych przy użyciu tej funkcji. Poniżej wymieniono niektóre zagadnienia, które należy wziąć pod uwagę:

  • Czy protokół TLS 1.2 ma już teraz być wymuszany do mojego punktu końcowego usługi, a inny certyfikat zostanie udostępniony jako zapasowy „starszy” punkt dostępu dla użytkowników, którzy korzystają z protokołu TLS 1.0?

  • Czy mój domyślny certyfikat firmy Contoso powinien już korzystać z opcji Wyłącz starsze protokoły TLS? Jeśli tak, to może muszę udostępnić certyfikat witryny legacy.contoso.com i powiązać go z punktem końcowym umożliwiającym korzystanie z protokołu TLS 1.0.

  • Jak mogę przekazać moim klientom zalecenia dotyczące korzystania z tych certyfikatów?

Możesz wykorzystać tę funkcję do zaspokojenia potrzeb dużych grup klientów — osób z obowiązkiem korzystania z protokołu TLS 1.2 lub nowszego oraz tych, którzy nadal pracują nad migracją z dala od protokołu TLS 1.0, a wszystko to bez dodatkowych wydatków sprzętowych. Oprócz obecnej dostępności powiązania wersji protokołu TLS dla certyfikatu w systemie Windows Server 2019 firma Microsoft będzie korzystać z opcji Wyłącz starsze protokoły TLS w ramach Usługi online na podstawie zapotrzebowania klientów.