메뉴 여닫기
개인 메뉴 토글
로그인하지 않음
만약 지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.

Apache2 SSL(HTTPS) 장애 조치 및 Let's Encrypt 자동 갱신 설정 가이드

데브카페

Apache2 SSL(HTTPS) 장애 조치 및 Let's Encrypt 자동 갱신 설정 가이드

1. 개요

  • 작업 일시: 2026년 10월 28일
  • 대상 서버: Ubuntu (Apache/2.4.52, OpenSSL/3.0.2)
  • 대상 도메인: devcafe.co.kr, dbstudy.co.kr
  • 증상: SSL 가상 호스트(443 포트) 활성화 후 Apache 웹 서버 기동 실패 및 인증서 모의 갱신(Dry-run) 오류

2. 장애 원인 및 해결 (Apache 기동 실패)

2.1. 증상 및 로그 확인

SSL 설정 파일(001-devcafe-le-ssl.conf, 002-dbstudy-le-ssl.conf)을 활성화(a2ensite)한 후 Apache 재시작 시 기동 실패.

  • 문법 검사(apachectl configtest)에서는 Syntax OK가 출력되나 실제로는 프로세스가 죽는 현상 발생.
  • 에러 로그(/var/log/apache2/error.log) 확인 결과:
[ssl:emerg] [pid 107944] AH01958: SSLStapling: no stapling cache available
[ssl:emerg] [pid 107944] AH02311: Fatal error initialising mod_ssl, exiting.
AH00016: Configuration Failed

2.2. 원인 분석

개별 사이트의 SSL 설정 파일 내에 OCSP Stapling 기능을 사용하는 옵션(SSLUseStapling on)이 포함되어 있으나, Apache 전역 설정에 Stapling 캐시를 저장할 경로(SSLStaplingCache)가 지정되어 있지 않아 mod_ssl 모듈 초기화 중 치명적 오류 발생.

2.3. 해결 방법

Apache 전역 설정에 SSL Stapling 캐시 저장소 경로를 추가하고 활성화하여 해결.

# 1. SSL Stapling 캐시 저장소 경로 설정 파일 생성
echo "SSLStaplingCache shmcb:/var/run/apache2/stapling_cache(128000)" | sudo tee /etc/apache2/conf-available/ssl-stapling.conf

# 2. 설정 활성화
sudo a2enconf ssl-stapling

# 3. Apache 서비스 시작 및 상태 확인
sudo systemctl start apache2
sudo systemctl status apache2

3. Let's Encrypt 인증서 자동 갱신 설정 및 오류 조치

3.1. 증상 (Dry-run 테스트 실패)

인증서 자동 갱신 모의 테스트(sudo certbot renew --dry-run) 수행 시, dbstudy.co.kr은 성공했으나 devcafe.co.kr에서 아래와 같은 에러 발생.

Failed to renew certificate devcafe.co.kr with error: urn:ietf:params:acme:error:malformed :: The request message was malformed :: Certificate not found

3.2. 원인 분석

  • --dry-run 옵션은 Let's Encrypt의 테스트(Staging) 서버를 대상으로 갱신을 시뮬레이션함.
  • devcafe.co.kr은 실제 운영(Production) 서버에서 발급된 인증서이므로, Certbot이 테스트 서버에 해당 인증서의 ARI(갱신 정보)를 조회할 때 테스트 서버 DB에 인증서 정보가 없어 Certificate not found 오류를 반환함.

3.3. 해결 방법

모의 테스트 서버가 아닌 실제 운영(Production) 서버를 대상으로 강제 갱신을 1회 수행하여 갱신 설정 파일을 정상 상태로 덮어씌움.

# 운영 서버를 통한 강제 갱신 수행 (설정 동기화)
sudo certbot renew --cert-name devcafe.co.kr --force-renewal

3.4. 자동 갱신 스케줄러 및 Apache 자동 리로드 설정

Let's Encrypt 인증서(유효기간 90일)가 갱신된 후, Apache가 새로운 인증서를 즉시 반영할 수 있도록 배포 훅(Deploy Hook) 스크립트를 추가함.

# 1. Certbot 타이머 작동 여부 확인
sudo systemctl status certbot.timer

# 2. 인증서 갱신 성공 시 Apache를 자동으로 reload 하는 Hook 스크립트 생성
echo -e '#!/bin/sh\nsystemctl reload apache2' | sudo tee /etc/letsencrypt/renewal-hooks/deploy/reload-apache.sh

# 3. 스크립트 실행 권한 부여
sudo chmod +x /etc/letsencrypt/renewal-hooks/deploy/reload-apache.sh

4. 최종 결과

  • devcafe.co.kr, dbstudy.co.kr 두 도메인 모두 HTTPS(443) 정상 접속 및 HTTP → HTTPS 리다이렉트 정상 작동 확인.
  • SSL 인증서 자동 갱신 및 갱신 후 웹 서버 무중단 리로드(Reload) 구성 완료.