Windows를 사용하다 보면 웹사이트 접속 오류, 서명된 프로그램 실행 실패, PowerShell 스크립트 인증 문제처럼 인증서와 관련된 이슈를 만날 수 있습니다. 이런 문제의 원인 중 하나는 루트 인증서(Trusted Root Certificates)가 최신 상태가 아니기 때문입니다.
Windows는 기본적으로 Microsoft의 신뢰 루트 인증서 프로그램을 통해 루트 인증서를 자동 업데이트합니다. 하지만 네트워크가 제한된 환경, 오프라인 서버, 오래된 Windows 버전처럼 자동 갱신이 어려운 경우에는 수동 관리가 필요합니다.
루트 인증서란?
루트 인증서는 인증서 체인의 최상단에 있는 신뢰 기준입니다. 웹사이트나 프로그램이 사용하는 인증서가 최종적으로 이 루트 인증서까지 연결되어야 Windows가 해당 인증서를 신뢰합니다.
루트 인증서가 오래되었거나 누락되면 다음과 같은 문제가 생길 수 있습니다.
- HTTPS 웹사이트 접속 오류
- 서명된 앱 실행 실패
- 코드 서명된 PowerShell 스크립트 오류
- 특정 보안 서비스 연결 실패
Windows는 루트 인증서를 자동으로 업데이트한다
Windows는 기본적으로 Microsoft Update를 통해 루트 인증서를 자동 갱신합니다. 보통 주 1회 정도 인증서 목록이 갱신되며, 필요한 인증서는 접근 시점에 자동 설치되기도 합니다. 다만 Windows Update 서버에 접근할 수 없는 환경, 인터넷이 차단된 사내망, 프록시 정책 때문에 Microsoft 사이트 접근이 막힌 경우, 구버전 Windows 사용 환경에서는 자동 갱신이 원활하지 않을 수 있습니다.
현재 설치된 루트 인증서 확인하기
Windows에서 루트 인증서 저장소를 확인하려면 인증서 관리 콘솔을 사용할 수 있습니다. mmc.exe를 실행한 뒤 Certificates 스냅인을 추가하고, 로컬 컴퓨터의 Trusted Root Certification Authorities 저장소를 보면 현재 설치된 루트 인증서를 확인할 수 있습니다. PowerShell로도 확인할 수 있습니다.
Get-ChildItem cert:\LocalMachine\Root | format-list
만료가 임박한 인증서만 확인하려면 다음처럼 필터링할 수 있습니다.
Get-ChildItem cert:\LocalMachine\Root | Where-Object { $_.NotAfter -lt (Get-Date).AddDays(60) } | Select-Object NotAfter, Subject
보안 점검이 필요하다면 인증서 신뢰 저장소를 주기적으로 확인해 의심스럽거나 취소된 인증서가 없는지 보는 것도 좋습니다. 필요하다면 인증서를 .CER 파일로 내보내고 다른 컴퓨터로 옮겨 가져올 수도 있습니다.
자동 업데이트를 끄거나 켜는 방법
자동 업데이트는 그룹 정책이나 레지스트리로 제어할 수 있습니다. 로컬 그룹 정책 편집기에서 Computer Configuration > Administrative Templates > System > Internet Communication Management > Internet Communication 경로를 확인하면 루트 인증서 자동 업데이트와 관련된 정책을 설정할 수 있습니다.
정책이 별도로 지정되어 있지 않다면 Windows는 기본적으로 자동으로 루트 인증서를 갱신하려고 시도합니다. 하지만 자동 갱신이 되지 않는다면 레지스트리 값도 확인해야 합니다.
Get-ItemProperty -Path "HKLM:\Software\Policies\Microsoft\SystemCertificates\AuthRoot" -Name DisableRootAutoUpdate
값이 1이면 자동 업데이트가 꺼진 상태입니다. 이 경우 0으로 바꾸면 다시 활성화됩니다.
또 다른 정책으로 Certificate Path Validation Settings의 Network Retrieval 설정이 있습니다. 이 정책에서 Microsoft Root Certificate Program의 자동 업데이트를 비활성화하면 컴퓨터는 루트 인증서를 자동으로 갱신하지 않습니다.
루트 인증서를 수동으로 업데이트하는 방법
Windows 10/11에서는 certutil 도구를 사용해 Microsoft의 최신 루트 인증서를 내려받을 수 있습니다. 예를 들어 다음 명령으로 SST 파일을 생성할 수 있습니다.
certutil.exe -generateSSTFromWU C:\PS\roots.sst
SST 파일은 여러 인증서를 한 번에 담은 저장소입니다. 이 파일을 더블클릭해 확인하거나, PowerShell이나 인증서 관리 도구를 사용해 Trusted Root Certification Authorities 저장소에 가져올 수 있습니다. 예시는 다음과 같습니다.
$sstStore = Get-ChildItem -Path C:\ps\rootsupd\roots.sst
$sstStore | Import-Certificate -CertStoreLocation Cert:\LocalMachine\Root
GUI로 작업하는 경우 certlm.msc에서 Trusted Root Certification Authorities 저장소를 열고 Import를 통해 SST 파일을 불러올 수도 있습니다. 인터넷이 되는 PC에서 최신 인증서를 받아 다른 PC로 옮겨 적용할 때도 유용합니다.
깨끗한 Windows 설치에는 루트 저장소에 소수의 인증서만 들어 있습니다. 인터넷에 연결되어 있으면 나머지 루트 인증서는 HTTPS 사이트나 SSL 체인을 따라 필요할 때 자동으로 설치될 수 있습니다. 그래서 모든 Microsoft 루트 인증서를 처음부터 전부 수동으로 넣을 필요는 없습니다.
CTL(Certificate Trust List)도 중요하다
Windows는 인증서 자체뿐 아니라 CTL(Certificate Trust List)도 사용합니다. CTL은 신뢰할 수 있는 루트 CA의 해시 목록이라고 보면 됩니다. Windows는 이 목록을 정기적으로 다운로드하고, 필요한 시점에 인증서를 신뢰할 수 있는지 판단하는 데 활용합니다. CTL에는 실제 인증서 자체가 아니라 해시와 속성 정보가 들어 있습니다.
CTL 파일도 수동으로 내려받아 설치할 수 있습니다. authrootstl.cab 파일을 내려받아 압축을 풀면 authroot.stl 파일을 얻을 수 있고, 이를 certutil로 가져올 수 있습니다.
certutil -enterprise -f -v -AddStore "Root" "C:\PS\authroot.stl"
또한 차단된 인증서 목록도 따로 관리할 수 있습니다.
certutil -enterprise -f -v -AddStore disallowed "C:\PS\disallowedcert.stl"
이 방식으로 등록하면 Trusted Root Certification Authorities 아래에 Certificate Trust List 섹션이 추가됩니다.
격리망 환경에서 자동 업데이트를 배포하는 방법
인터넷이 완전히 차단된 Active Directory 환경에서는 그룹 정책으로 루트 인증서를 정기 배포하는 방법을 쓸 수 있습니다. 첫 번째 방법은 인터넷이 되는 PC에서 최신 루트 인증서를 내려받아 격리망으로 복사한 뒤 SCCM이나 GPO 시작 스크립트로 배포하는 것입니다.
certutil.exe -generateSSTFromWU roots.sst
$sstStore = Get-ChildItem -Path \fr-dc01\SYSVOL\woshub.com\rootcert\roots.sst
$sstStore | Import-Certificate -CertStoreLocation Cert:\LocalMachine\Root
두 번째 방법은 Microsoft 루트 인증서를 네트워크 공유 폴더에 동기화하는 방식입니다.
certutil -syncWithWU -f \fr-dc01\SYSVOL\woshub.com\rootcert\
이렇게 하면 authrootstl.cab, disallowedcertstl.cab, disallowedcert.sst, thumbprint.crt 같은 파일이 공유 폴더에 생성됩니다. 이후 GPO의 RootDirURL 값을 해당 공유 경로로 지정하면, 클라이언트는 그 경로에서 CTL과 루트 인증서를 받아옵니다.
Action: Update
Hive: HKLM
Key path: Software\Microsoft\SystemCertificates\AuthRoot\AutoUpdate
Value name: RootDirURL
Type: REG_SZ
Value data: file://\fr-dc01\SYSVOL\woshub.com\rootcert\
GPO 설정 후 클라이언트가 새 루트 인증서를 받으면 이벤트 뷰어의 CAPI2 소스에서 성공 이벤트를 확인할 수 있습니다.
Event ID: 4100
Successful auto update retrieval of third-party root certificate from: <file://\fr-dc01\SYSVOL\woshub.com\rootcert/CABD2A79A1076A31F21D253635CB039D4329A5E8.crt>
Event ID: 4097
Successful auto update of third-party root certificate: Subject: <CN=ISRG Root X1, O=Internet Security Research Group, C=US> Sha1 thumbprint: <CABD2A79A1076A31F21D253635CB039D4329A5E8>
루트 인증서 저장소가 마지막으로 동기화된 시점은 다음 명령으로 확인할 수 있습니다.
certutil -verifyctl AuthRoot | findstr /i "lastsynctime"
GPO의 Turn off Automatic Root Certificates Update 정책은 비활성화하거나 비구성 상태로 두어야 합니다.
Active Directory에 오프라인 루트 인증서를 게시하는 방법
또 다른 방법은 루트 인증서를 Active Directory 구성 파티션에 게시하는 것입니다. 이렇게 하면 도메인 컴퓨터가 자동으로 가져와 설치할 수 있습니다. AD CS PKI를 별도로 배포하지 않아도 됩니다.
certutil -f -dspublish myRootCA.crl
여러 인증서를 한 번에 게시하려면 PowerShell로 디렉터리 안의 CRT 파일을 순회하면 됩니다.
$certpath = "C:\Certs\"
certutil -syncWithWU $certpath
$certificates = Get-ChildItem -Path $certpath -Filter "*.crt"
foreach ($certificate in $certificates) {
certutil.exe -dspublish -f ($certificate.FullName) RootCA
}
Windows 7과 XP
원문은 Windows 7과 Windows XP의 루트 인증서 갱신 방법도 다룹니다. Windows 7은 MST 업데이트 방식과 GPO 배포를 참고할 수 있고, Windows XP는 rootsupd.exe 기반의 예전 방식이 언급됩니다. 오래된 운영체제일수록 최신 루트 인증서가 자동으로 들어오지 않기 때문에 별도 관리가 더 중요합니다.
정리
Windows의 루트 인증서는 보안과 직결됩니다. 대부분의 일반 PC는 자동 업데이트로 충분하지만, 인터넷이 제한된 서버, 프록시 환경, 오래된 Windows, 인증서 오류가 반복되는 PC는 주기적으로 점검하는 것이 좋습니다. 특히 오프라인 환경에서는 자동 업데이트에만 의존하지 말고, 외부에서 신뢰 목록을 가져오는 흐름을 따로 마련해두는 것이 좋습니다.
출처
작성 방식
- AI를 활용해 원문 내용을 한국어로 정리하고 블로그 형식으로 재구성함