운영체제/윈도우

Windows Server 인증서 만료 확인: PowerShell Cert 드라이브로 30일 이내 인증서 조회하기

filefind

  •  

Windows 인증서 저장소에서 만료가 임박한 인증서를 찾으면 갱신 누락을 줄일 수 있다. PowerShell로 인증서 목록을 조회하고, 실제 서비스가 사용하는 인증서와 대조하는 방법을 정리한다.

문제와 배경

새 인증서를 발급받아 서버에 설치했더라도 서비스 바인딩이 이전 인증서를 가리킬 수 있다. 따라서 저장소에 새 인증서가 존재하는 것과 서비스가 새 인증서를 제공하는 것은 별도로 확인해야 한다.

핵심 내용

Windows PowerShell의 Certificate Provider는 Cert: 드라이브로 인증서 저장소를 제공한다. LocalMachine과 CurrentUser는 서로 다른 저장소 위치이며, NotAfter는 인증서 만료 시각이다.

점검 항목 의미
Subject 인증서 주체
Thumbprint 인증서 식별에 사용할 지문
NotAfter 만료 시각
HasPrivateKey 개인키 연결 여부

실무 점검 절차

Windows의 PowerShell에서 시스템 시간과 버전을 확인한다.

$PSVersionTable.PSVersion
Get-Date

서버 개인 인증서 저장소에서 30일 이내 만료되거나 이미 만료된 인증서를 조회한다.

$now = Get-Date
$deadline = $now.AddDays(30)

Get-ChildItem -Path Cert:\LocalMachine\My |
  Where-Object { $_.NotAfter -le $deadline } |
  Sort-Object NotAfter |
  Select-Object Subject, Thumbprint, NotAfter,
    HasPrivateKey,
    @{Name='DaysRemaining'; Expression={
      [math]::Floor(($_.NotAfter - $now).TotalDays)
    }}

DaysRemaining이 음수이면 이미 만료된 인증서다. 이 예시는 버전별 동적 매개변수 차이를 줄이기 위해 날짜 속성을 직접 비교한다.

추가 저장소는 존재 여부부터 확인한다.

Test-Path Cert:\LocalMachine\WebHosting

결과를 서비스 설정과 대조한다.

저장소 인증서 조회
→ 서비스가 참조하는 지문 확인
→ 실제 접속 주소에서 제공되는 인증서 확인
→ 만료·호스트명·체인 검사

주의사항

  • 만료된 인증서가 조회됐다는 이유만으로 삭제하지 않는다.
  • Java keystore나 별도 PEM 파일은 Windows 저장소 조회만으로 확인되지 않는다.
  • 개인키 존재 여부만으로 서비스 계정의 접근 권한을 판단하지 않는다.
  • 갱신·바인딩 변경·삭제 전에는 인증서와 설정을 안전하게 백업하고 테스트 환경에서 검증한다.

운영자 체크리스트

  • □ LocalMachine과 CurrentUser를 구분했는가?
  • □ 실제 서비스의 인증서 저장 위치를 확인했는가?
  • □ 서비스 설정과 지문을 대조했는가?
  • □ 외부 접속에서 새 인증서가 제공되는가?
  • □ 갱신 실패와 만료 경보를 관리하는가?

정리

인증서 점검은 저장소 조회에서 끝나지 않는다. 서비스 설정과 실제 TLS 응답까지 대조해야 갱신 완료 여부를 확인할 수 있다.

참고자료