서버 운영
HTTPS 인증서 갱신 후 배포했을 때 확인 사항
HTTPS 인증서 갱신은 민감한 작업인데, DNS 응답부터 시작해서 실제 SSL 인증서 상태까지 단계적으로 확인하면 문제를 빠르게 찾을 수 있다.
HTTPS 인증서를 갱신하거나 교체한 후 배포했다면 운영 중에도 주의 깊게 모니터링해야 한다. 인증서 관련 문제는 사용자 접근을 완전히 차단할 수 있기 때문이다.
DNS 응답을 먼저 확인한다
DNS가 올바르게 도메인을 가리키고 있는지 확인한다.
dig example.com
nslookup example.com
IP 주소가 올바른 서버를 가리키고 있는지 확인한다.
SSL 인증서 정보를 확인한다
실제로 배포된 인증서가 올바른 것인지 확인한다.
openssl s_client -connect example.com:443 -showcerts
다음을 확인한다.
- 인증서가 유효한 상태인가
- 도메인 이름이 일치하는가
- 만료 날짜가 언제인가
- 발급자가 신뢰하는 CA인가
브라우저에서 인증서를 확인한다
Chrome, Firefox 등의 브라우저에서 자물쇠 아이콘을 클릭해 인증서 정보를 본다. 경고나 에러가 있다면 즉시 확인해야 한다.
curl로 HTTPS 연결을 테스트한다
curl -v https://example.com
curl -I https://example.com
SSL 핸드셰이크가 성공하는지, 응답 코드가 200인지 확인한다.
프록시(Nginx, Traefik 등)의 설정을 확인한다
인증서가 프록시 레벨에서 올바르게 설정되어 있는지 확인한다.
# Nginx의 경우
sudo nginx -t
sudo grep -r "ssl_certificate" /etc/nginx/
# Traefik의 경우
sudo docker inspect dokploy-traefik | grep -i cert
인증서 경로가 올바른지, 파일이 실제로 존재하는지 확인한다.
포트 443이 정상적으로 열려있는지 확인한다
sudo ss -lntp | grep 443
포트가 LISTEN 상태여야 외부 요청을 받을 수 있다.
인증서 자동 갱신이 설정되어 있는지 확인한다
Let's Encrypt 같은 자동 갱신 시스템이 설정되어 있다면 그것이 정상적으로 작동하는지 확인한다.
sudo systemctl list-timers | grep cert
sudo journalctl -u certbot.timer
자동 갱신이 실패하고 있지 않은지 확인한다.
인증서 체인이 올바른지 확인한다
SSL 인증서 체인(중간 인증서 포함)이 올바르게 설정되어 있는지 확인한다.
curl -I https://example.com 2>&1 | grep -i certificate
체인 검증이 실패한다면 중간 인증서가 누락되었을 가능성이 있다.
캐시로 인한 문제가 있는지 확인한다
브라우저나 CDN 캐시로 인해 이전 인증서 정보가 남아있을 수 있다.
# 브라우저 캐시 삭제
# 또는 incognito/private 모드에서 테스트
시크릿 창에서 새로 접속해서 인증서를 확인한다.
인증서 갱신 전후의 시간을 기록한다
date
echo "인증서 갱신: $(date)" >> /var/log/cert-renewal.log
문제가 발생했을 때 시간을 기준으로 원인을 추적할 수 있다.
특정 도메인들의 인증서를 각각 확인한다
여러 도메인을 사용한다면 각각에 대해 인증서를 확인한다.
for domain in example.com www.example.com api.example.com; do
echo "Checking $domain"
openssl s_client -connect $domain:443 -showcerts 2>&1 | grep -i subject
done
모바일 기기에서도 접근을 테스트한다
데스크톱과 모바일에서 인증서 처리가 다를 수 있으므로, 실제 모바일 기기에서 접속을 테스트한다.
발견한 설정 상태를 기록한다
이번 인증서 갱신 과정에서 확인한 내용들을 기록해둔다. 다음 갱신 시기가 오면 같은 단계를 빠르게 반복할 수 있다.