- 공유 링크 만들기
- X
- 이메일
- 기타 앱
이 글의 목적은 Windows에서 TLS 1.2가 비활성화되어 발생하는 사이트 접속 실패 문제를 레지스트리와 관련 설정으로 안전하게 복구하고, 재발 방지까지 현장에서 바로 적용할 수 있도록 절차와 점검 포인트를 체계적으로 제공하는 것이다.
1. TLS 1.2 비활성화로 접속이 실패하는 전형적인 증상
TLS 1.2는 현대 웹서비스의 기본 보안 프로토콜이다. 이 값이 비활성화되면 브라우저뿐 아니라 Windows 내장 통신 구성요소(WinHTTP, .NET, WinINet)를 사용하는 프로그램도 함께 실패하는 경우가 많다.
- 브라우저에서 “이 사이트에 연결할 수 없음”, “보안 연결 실패”, “ERR_SSL_VERSION_OR_CIPHER_MISMATCH” 형태의 오류가 발생하는 경우가 많다.
- 사내 업무 시스템, 결재/그룹웨어, 정부/공공 사이트, 백신 업데이트, 라이선스 인증, 설치 프로그램 다운로드가 실패하는 경우가 많다.
- PowerShell Invoke-WebRequest, curl, 각종 런처/업데이터가 SSL/TLS 핸드셰이크 단계에서 종료되는 경우가 많다.
2. 먼저 확인해야 할 원인 구분
2.1 “브라우저만” 문제인지 “OS 전체” 문제인지 구분하다
원인 범위를 빠르게 좁히기 위해 다음을 구분하는 것이 중요하다.
- 특정 브라우저만 실패하고 다른 브라우저는 정상이라면 브라우저 내부 정책, 확장, 기업용 정책, 프록시 영향 가능성이 있다.
- 브라우저뿐 아니라 업데이트/런처/PowerShell도 실패하면 OS 레벨 TLS(주로 SCHANNEL) 비활성화 가능성이 높다.
2.2 사내 보안 정책(GPO) 또는 보안 도구가 값을 되돌리는지 확인하다
레지스트리를 복구해도 재부팅 후 다시 꺼지는 경우가 있다. 이때는 그룹 정책 또는 하드닝 도구가 주기적으로 값을 덮어쓰는 상황일 수 있다.
- 도메인 환경이면 로컬 변경이 정책으로 다시 덮어써지는 경우가 있다.
- 보안 가이드 적용 스크립트, 하드닝 도구, 취약점 조치 도구가 TLS 1.2 키를 함께 변경한 사례가 있다.
3. 작업 전 준비: 백업과 롤백 경로를 확보하다
3.1 시스템 복원 지점을 생성하다
가장 안전한 롤백 방법은 시스템 복원 지점 생성이다. GUI가 제한된 환경이면 최소한 레지스트리 내보내기를 수행해야 한다.
3.2 레지스트리 내보내기로 최소 백업을 확보하다
문제와 직접 관련된 키를 우선 백업한다.
reg export "HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols" "%USERPROFILE%\Desktop\SCHANNEL_Protocols_Backup.reg" /y reg export "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings" "%USERPROFILE%\Desktop\InternetSettings_Backup.reg" /y reg export "HKLM\SOFTWARE\Microsoft\.NETFramework" "%USERPROFILE%\Desktop\DotNetFramework_Backup.reg" /y 4. 핵심 복구 1단계: SCHANNEL에서 TLS 1.2(Client/Server)를 활성화하다
Windows의 TLS는 기본적으로 SCHANNEL이 담당하는 경우가 많다. 가장 중요한 복구 지점은 아래 경로이다.
| 구분 | 경로 | 값 이름 | 권장 값 | 의미 |
|---|---|---|---|---|
| TLS 1.2 Client | HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client | Enabled | 1 (DWORD) | 클라이언트로서 TLS 1.2 사용 허용이다. |
| TLS 1.2 Client | 동일 | DisabledByDefault | 0 (DWORD) | 기본 비활성화를 해제하는 값이다. |
| TLS 1.2 Server | HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server | Enabled | 1 (DWORD) | 서버로서 TLS 1.2 사용 허용이다. |
| TLS 1.2 Server | 동일 | DisabledByDefault | 0 (DWORD) | 기본 비활성화를 해제하는 값이다. |
4.1 .reg 파일로 한 번에 적용하다
아래 예시는 TLS 1.2를 Client/Server 모두 활성화하는 reg 파일 예시이다. 관리자 권한으로 적용해야 한다.
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client]
"Enabled"=dword:00000001
"DisabledByDefault"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server]
"Enabled"=dword:00000001
"DisabledByDefault"=dword:00000000
4.2 재부팅 또는 서비스 재시작이 필요한 이유를 이해하다
SCHANNEL은 프로세스 및 서비스가 로딩할 때 설정을 참조하는 경우가 많다. 따라서 즉시 반영되지 않으면 재부팅이 가장 확실하다. 서버 환경에서는 영향도를 고려하여 점검 창구에서 수행해야 한다.
5. 핵심 복구 2단계: WinHTTP 기본 보안 프로토콜을 복구하다
업데이터, 설치 프로그램, 일부 업무 솔루션은 브라우저가 아닌 WinHTTP 스택을 사용한다. 이 경우 SCHANNEL을 살려도 WinHTTP 기본 프로토콜 마스크가 TLS 1.2를 포함하지 않으면 실패할 수 있다.
| 구분 | 경로 | 값 이름 | 권장 값 | 비고 |
|---|---|---|---|---|
| WinHTTP | HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttp | WinHttpDefaultSecureProtocols | 0x00000800 (DWORD) | TLS 1.2만 지정하는 값으로 많이 사용하다. |
| WinHTTP(32비트) | HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttp | WinHttpDefaultSecureProtocols | 0x00000800 (DWORD) | 32비트 앱이 WinHTTP를 쓸 때 영향을 받다. |
5.1 reg 파일 예시로 WinHTTP를 복구하다
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttp]
"WinHttpDefaultSecureProtocols"=dword:00000800
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttp]
"WinHttpDefaultSecureProtocols"=dword:00000800
6. 핵심 복구 3단계: .NET 애플리케이션의 TLS 기본값을 시스템 기본으로 돌리다
.NET 기반 프로그램은 프레임워크 버전과 설정에 따라 TLS 1.0 계열로 고정되거나, 시스템 기본값을 따르지 않는 문제가 생길 수 있다. TLS 1.2가 꺼졌던 PC는 .NET 관련 키도 함께 비정상인 경우가 많다.
| 구분 | 경로 | 값 이름 | 권장 값 | 의미 |
|---|---|---|---|---|
| .NET v4+ | HKLM\SOFTWARE\Microsoft\.NETFramework\v4.0.30319 | SystemDefaultTlsVersions | 1 (DWORD) | 시스템 기본 TLS 버전을 따르게 하다. |
| .NET v4+ | 동일 | SCHUseStrongCrypto | 1 (DWORD) | 강한 암호군 사용을 유도하다. |
| .NET v4+(32비트) | HKLM\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v4.0.30319 | SystemDefaultTlsVersions | 1 (DWORD) | 32비트 .NET 앱에 적용하다. |
| .NET v4+(32비트) | 동일 | SCHUseStrongCrypto | 1 (DWORD) | 32비트 .NET 앱에 적용하다. |
6.1 reg 파일 예시로 .NET을 복구하다
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft.NETFramework\v4.0.30319]
"SystemDefaultTlsVersions"=dword:00000001
"SCHUseStrongCrypto"=dword:00000001
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft.NETFramework\v4.0.30319]
"SystemDefaultTlsVersions"=dword:00000001
"SCHUseStrongCrypto"=dword:00000001
7. Internet Options의 TLS 체크와 레지스트리 우선순위를 정리하다
사용자 단에서 흔히 “인터넷 옵션에서 TLS 1.2 체크”로 해결되는 경우가 있다. 다만 기업 환경에서는 레지스트리/정책이 우선 적용되어 GUI 체크가 무시될 수 있다.
7.1 GUI에서 확인해야 할 항목을 정리하다
- 인터넷 옵션의 고급 탭에서 TLS 1.2 사용 항목이 꺼져 있으면 켜야 한다.
- 변경 후 브라우저 재시작만으로도 반영되는 경우가 있으나, OS 레벨 문제면 재부팅이 필요하다.
7.2 레지스트리 기반으로 관리되는 경우를 대비하다
GUI 체크가 켜져도 재부팅 후 꺼지는 경우, 정책 또는 하드닝 도구가 값을 유지하는 상황일 수 있다. 이때는 “어떤 주체가” 값을 덮어쓰는지 추적해야 한다.
8. 빠른 점검 스크립트: 현재 TLS 1.2 상태를 읽어 진단하다
현장에서 반복 작업을 줄이려면 현재 값을 읽어 진단하는 스크립트가 유용하다. 아래 PowerShell 예시는 TLS 1.2 주요 키 존재 여부와 값을 점검하는 형태이다.
# PowerShell (관리자 권장) - TLS 1.2 주요 레지스트리 점검 $paths = @( "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client", "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server", "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttp", "HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttp", "HKLM:\SOFTWARE\Microsoft\.NETFramework\v4.0.30319", "HKLM:\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v4.0.30319" ) foreach ($p in $paths) { Write-Host "== $p ==" if (Test-Path $p) { Get-ItemProperty $p | Select-Object PSPath, Enabled, DisabledByDefault, WinHttpDefaultSecureProtocols, SystemDefaultTlsVersions, SCHUseStrongCrypto } else { Write-Host "키가 없음" } Write-Host "" } 9. 복구 후 검증 절차: “접속됨”이 아니라 “TLS 1.2로 협상됨”을 확인하다
9.1 PowerShell로 TLS 협상 확인을 보조하다
일부 환경에서는 접속이 되더라도 구형 프로토콜로 내려가 협상되는 경우가 있다. 목적이 “TLS 1.2 복구”라면 협상 버전 확인이 필요하다.
# 예시: .NET/PowerShell 호출이 동작하는지 확인 try { $r = Invoke-WebRequest -Uri "https://example.com" -UseBasicParsing -TimeoutSec 20 Write-Host "StatusCode:" $r.StatusCode } catch { Write-Host "ERROR:" $_.Exception.Message } 9.2 이벤트 로그로 SCHANNEL 오류를 확인하다
Windows 이벤트 로그에 SCHANNEL 관련 오류가 남는 경우가 있다. 오류가 반복되면 “프로토콜/암호군 불일치” 또는 “정책에 의한 차단” 가능성이 있다.
10. 자주 실패하는 함정과 재발 방지 체크리스트
10.1 32비트/64비트 경로를 한쪽만 적용하는 실수를 피하다
업무 프로그램이 32비트인 경우 Wow6432Node 경로가 핵심이 될 수 있다. 한쪽만 적용하면 “브라우저는 되는데 런처는 안 됨” 같은 현상이 남는다.
10.2 TLS 1.2를 켰는데도 안 되는 경우를 분기하다
- 프록시/보안장비가 TLS 가로채기(SSL inspection)를 수행하며 사내 루트 인증서 문제가 있는 경우가 있다.
- 시간 동기화가 깨져 인증서 유효기간 검증이 실패하는 경우가 있다.
- 암호화 제품, EDR, 방화벽이 특정 프로세스의 TLS를 차단하는 경우가 있다.
- 서버가 TLS 1.2를 지원하지 않거나, 특정 암호군만 허용하여 클라이언트와 맞지 않는 경우가 있다.
| 현상 | 가능 원인 | 우선 조치 |
|---|---|---|
| 브라우저는 정상, 업데이트 프로그램만 실패하다 | WinHTTP 기본 프로토콜 미설정이다 | WinHttpDefaultSecureProtocols 값을 점검/복구하다 |
| 일부 .NET 프로그램만 실패하다 | .NET TLS 기본값 고정 또는 강제 미적용이다 | SystemDefaultTlsVersions, SCHUseStrongCrypto를 점검하다 |
| 재부팅하면 다시 실패하다 | GPO/하드닝 도구가 덮어쓴다 | 정책 적용 이력과 스크립트/도구를 추적하다 |
| 특정 사이트만 실패하다 | 서버 측 TLS/암호군 제한 또는 SSL inspection 이슈이다 | 다른 네트워크/다른 PC 비교로 원인을 분리하다 |
11. 현장 적용용 통합 reg 예시
아래는 TLS 1.2(SCHANNEL) + WinHTTP + .NET(시스템 기본 TLS 사용)까지 한 번에 반영하는 통합 예시이다. 환경에 따라 일부만 적용해야 할 수 있으므로, 장애 원인 범위를 확인한 뒤 적용하는 것이 바람직하다.
Windows Registry Editor Version 5.00 ; 1) SCHANNEL - TLS 1.2 활성화 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client] "Enabled"=dword:00000001 "DisabledByDefault"=dword:00000000 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server] "Enabled"=dword:00000001 "DisabledByDefault"=dword:00000000 ; 2) WinHTTP - 기본 보안 프로토콜에 TLS 1.2 포함 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttp] "WinHttpDefaultSecureProtocols"=dword:00000800 [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttp] "WinHttpDefaultSecureProtocols"=dword:00000800 ; 3) .NET - 시스템 기본 TLS 사용 및 강한 암호군 사용 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319] "SystemDefaultTlsVersions"=dword:00000001 "SCHUseStrongCrypto"=dword:00000001 [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v4.0.30319] "SystemDefaultTlsVersions"=dword:00000001 "SCHUseStrongCrypto"=dword:00000001 12. FAQ
TLS 1.2를 켰는데도 특정 사이트만 계속 접속이 안 되다
서버가 특정 암호군만 허용하거나, 사내 SSL inspection 장비가 중간에서 인증서를 재발급하며 클라이언트 신뢰 문제가 생기는 경우가 있다. 동일 PC에서 다른 네트워크로 접속해 비교하거나, 동일 네트워크에서 다른 PC로 비교해 원인을 분리하는 것이 효과적이다.
레지스트리를 고쳤는데 재부팅 후 다시 꺼지다
도메인 정책 또는 하드닝 도구가 값을 주기적으로 덮어쓰는 상황일 가능성이 높다. 로컬에서만 복구하면 반복 장애가 되므로, 정책 배포 주체를 확인하고 표준 값을 정책으로 재정의해야 한다.
업무상 구형 장비 웹페이지 때문에 TLS 1.0/1.1이 필요하다
가능하면 구형 장비 펌웨어/웹서버를 업데이트하는 것이 우선이다. 불가피하다면 업무망 분리, 예외 PC 지정, 접근 제어, 기간 제한 등 보안 통제를 동반한 예외 정책으로 운영해야 한다.
적용 후 무엇을 기준으로 “정상 복구”라고 판단해야 하다
단순히 접속 성공만이 아니라, 문제가 되었던 프로그램(업데이터/런처/.NET 도구)까지 정상 동작하는지 확인해야 한다. 또한 재부팅 후에도 동일 상태가 유지되는지 확인해야 재발 방지가 된다.
- 이벤트 뷰어 Kernel-Power 41 예기치 않은 종료 오류 완벽 해결 가이드
- Windows 레지스트리 권한 거부로 설정 저장 안됨 해결 방법
- Windows 오프라인 파일 동기화 충돌 해결 및 CSC 캐시 초기화 완벽 가이드
- 오피스 업데이트 오류 30088-26 해결 방법 (Office Click-to-Run 업데이트 실패 복구)
- 파워포인트 레이저 포인터 안보임 해결 방법: 발표 화면에서 포인터가 사라질 때 1분 점검 가이드
- .NET 런타임 설치 오류 0x80072F8F 보안 채널 실패 해결 방법(TLS 1.2·인증서·시간 동기화)