다른 명령
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) 구성 완료.