이 게시물은 작성되었습니다.
Andrew Marshall, 보안 프로그램 관리자, 고객 보안 및 신뢰
Gabriel Montenegro, 주요 프로그램 관리자, 핵심 네트워킹
Niranjan Inamdar, 수석 소프트웨어 엔지니어, 핵심 네트워킹
마이클 브라운, 수석 소프트웨어 엔지니어, 인터넷 정보 서비스
Ivan Pashov, 주요 소프트웨어 엔지니어링 책임자, 핵심 네트워킹
2019년 8월
전 세계 엔지니어가 TLS 1.0대한 자체 종속성을 제거하기 위해 노력함에 따라 고객의 마이그레이션 준비 상태와 자체 보안 요구 사항의 균형을 맞추는 복잡한 과제가 발생합니다. 지금까지 고객이 이전 운영 체제 TLS 1.2 지원을 추가하는, 클라이언트에서 약한 TLS 사용량 검색하기 위해 IIS에서 새 로깅 형식을 전달하고, TLS 1.0 종속성 제거하기 위한 최신기술 지침을 제공하여 이러한 문제를 해결하는 데 도움을 주었습니다.
이제 Microsoft는 TLS 1.2+ 세계로 쉽게 전환할 수 있도록 Windows의 강력한 새 기능을 발표하게 되어 기쁘게 생각합니다. KB4490481Windows Server 2019부터는 이제 사용자가 지정한 개별 인증서에 약한 TLS 버전이 사용되지 않도록 차단할 수 있습니다. 이 기능을 "레거시 TLS 사용 안 함"이라고 하며 선택한 인증서에 TLS 버전 및 암호 제품군 층을 효과적으로 적용합니다.
또한 레거시 TLS를 사용하지 않도록 설정하면 온라인 서비스에서 TLS 1.2 이상의 트래픽만 허용하는 엔드포인트와 레거시 TLS 1.0 트래픽을 수용하는 두 가지 고유한 엔드포인트 그룹을 동일한 하드웨어에 제공할 수 있습니다. 변경 내용은 HTTP.sys구현되며 추가 인증서 발급을 통해 적절한 TLS 버전을 사용하여 트래픽을 새 엔드포인트로 라우팅할 수 있습니다. 이러한 변경 전에 이러한 기능을 배포하려면 레지스트리를 통해 시스템 전체에서만 구성할 수 있으므로 추가 하드웨어 투자가 필요합니다.
기능 시나리오 세부 정보
일반적인 배포 시나리오는 혼합 요구 사항이 있는 고객이 있는 데이터 센터의 하드웨어 집합 하나를 제공합니다. 일부는 현재 최소값으로 TLS 1.2가 필요하고 다른 하드웨어는 TLS 1.0 종속성을 제거하지 않습니다. 그림 1에서는 TLS 버전 선택 및 인증서 바인딩을 별도로 구분된 작업으로 보여 줍니다. 기본 기능은 다음과 같습니다.
기본 TLS 버전 선택
그림 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 세션이 인증서에 바인딩된 스택에서 이 기능을 더 높게 사용할 수 있도록 했으므로 아래 그림 2에 설명된 대로 특정 최소 TLS 버전을 할당할 수 있습니다.
대한 최소 TLS 버전 적용
그림 2: 선택한 인증서에 대해 최소 TLS 버전을 적용하는 레거시 TLS 기능을 사용하지 않도록 설정, Secure.contoso.com.
기능 배포 지침
레거시 TLS 사용 안 함 기능은 PowerShell 명령 또는 C++ HTTP.sys API를 통해 IIS(인터넷 정보 서비스) 서버 UI를 통해 배포할 수 있습니다.
옵션 #1: IIS UI 구성(Windows 10 버전 2004 및 Windows Server 버전 2004 이상에서 사용 가능)
아래와 같이 SSL 인증서 "secure.contoso.com"에 대한 사이트 바인딩을 만든 다음 "레거시 TLS 사용 안 함"을 선택하고 확인을 클릭합니다.
옵션 #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
Sslflag DisableLegacyTLS 속성 값 New-IISSite 사용하기.
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 버전 비활성화 주시: 설정됨/설정 안 됨
옵션 #3: C++ HTTP.sys API(지금 사용 가능)
레거시 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: 특정 SSL 엔드포인트에 대해 레거시 TLS 버전을 사용/사용하지 않도록 설정합니다. 이 플래그를 설정하면 해당 엔드포인트에 대해 TLS1.0/1.1을 사용하지 않도록 설정하고 HTTP2 암호 도구 모음에 사용할 수 있는 암호 그룹을 제한합니다.
HTTP_SERVICE_CONFIG_SSL_FLAG_DISABLE_TLS12: 특정 SSL 엔드포인트에 대해 TLS1.2를 사용하거나 사용하지 않도록 설정합니다.
HTTP_SERVICE_CONFIG_SSL_FLAG_DISABLE_HTTP2: 특정 SSL 엔드포인트에 대해 HTTP/2를 사용하거나 사용하지 않도록 설정합니다.
C++에서 인증서당 이 기능을 사용하거나 사용하지 않도록 설정하는 가장 간단한 방법은 HttpSetServiceConfiguration HTTP.sys API에서 제공하는 HTTP_SERVICE_CONFIG_SSL_FLAG_DISABLE_LEGACY_TLS 플래그를 사용하는 것입니다.
레거시 TLS 사용 안 함이 설정되면 다음 제한 사항이 적용됩니다.
SSL2, SSL3, TLS1.0 및 TLS1.1 프로토콜을 사용하지 않도록 설정합니다.
암호화 암호화 DES, 3DES 및 RC4를 사용하지 않도록 설정합니다(AES만 사용됨).
CBC 체인 모드에서 암호화 암호화 AES를 사용하지 않도록 설정합니다(AES GCM만 사용됨).
RSA 키 교환을 사용하지 않도록 설정합니다.
키 크기가 2048보다 작은 DH 키 교환을 사용하지 않도록 설정합니다.
키 크기가 224보다 작은 ECDH 키 교환을 사용하지 않도록 설정합니다.
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에서 마이그레이션을 진행 중인 고객 등 대규모 그룹의 요구 사항을 충족할 수 있습니다. 모두 추가 하드웨어 비용 없이도 가능합니다. Microsoft는 현재 Windows Server 2019에서 인증서별 TLS 버전 바인딩을 사용할 수 있을 뿐만 아니라 고객의 요구에 따라 온라인 서비스에서 레거시 TLS 사용 안 함 기능을 사용할 수 있도록 할 예정입니다.