← 전체 글로 돌아가기

서버 운영

TLS 인증서 갱신 뒤 일부 도메인만 경고를 낸 실수 정리

인증서 갱신은 성공했는데 오래된 서브도메인에서 경고가 계속 나온 이유를 체인과 Nginx 설정 관점에서 정리했습니다.

갱신 성공 메시지를 너무 빨리 믿었다

자동 갱신은 성공했고 메인 도메인도 정상인데 api 서브도메인에서만 경고가 났다. 외부 검사 결과 도메인별로 다른 체인이 응답하고 있었다. 기본 서버 블록은 새 파일을 가리켰지만 api 블록은 복사 당시의 경로를 그대로 사용했다.

파일보다 실제 handshake를 확인했다

sudo nginx -T | grep -E 'server_name|ssl_certificate(_key)?'
openssl s_client -connect api.example.com:443 -servername api.example.com -showcerts </dev/null
sudo certbot certificates

중간 인증서까지 전달하는 fullchain을 사용하고, 설정 검사 뒤 reload했다.

sudo nginx -t
sudo service nginx reload
sudo service nginx status

갱신 성공과 웹서버 반영을 묶는 deploy hook도 추가했다.

sudo certbot renew --deploy-hook 'service nginx reload'

재발 방지 목록

  • 모든 HTTPS server block의 인증서 경로가 최신인가
  • -servername으로 각 도메인의 응답을 확인했는가
  • fullchain과 키의 대상이 일치하는가
  • 갱신 뒤 reload가 실행되는가
  • 만료 30일 전 알림이 있는가

인증서는 파일이 존재하는지만 볼 일이 아니다. 외부 사용자가 새 체인을 받는지까지 확인해야 배포가 끝난다.