Apache의 TLS 인증서를 교체하는 절차입니다. 원노트의 발급·설정·갱신 기록을 한 글로 합쳤습니다. 서버 인증서, 개인키, 중간 인증서 체인을 구분하고 Apache와 앞단 LB·웹방화벽 중 어디에서 TLS를 종료하는지 먼저 확인합니다.
파일과 기존 설정 확인
교체할 도메인의 Subject Alternative Name과 만료일을 확인합니다. 개인키는 공유 디렉터리에 두지 않고 제한된 권한으로 보관합니다. 인증서와 키의 공개키가 일치하는지도 확인합니다.
openssl x509 -in server.crt -noout -subject -issuer -dates -ext subjectAltName
openssl x509 -in server.crt -pubkey -noout | openssl sha256
openssl pkey -in server.key -pubout | openssl sha256
sudo httpd -S두 공개키 해시가 일치해야 합니다. 인증서 형식은 확장자만으로 확정하지 않습니다. PEM은 텍스트 인코딩 형식이고 PFX·P12는 개인키와 인증서를 함께 담을 수 있는 컨테이너이므로 보관과 변환 시 주의합니다.
가상 호스트 적용
Apache 2.4.8 이상은 SSLCertificateFile에 서버 인증서와 중간 인증서를 순서대로 담을 수 있습니다. fullchain.pem은 발급자의 체인 안내에 맞춰 준비합니다. TLS 버전은 OS·OpenSSL 지원 범위와 서비스 정책을 확인합니다.
<VirtualHost *:443>
ServerName blog.example.com
DocumentRoot /var/www/lieper
SSLEngine on
SSLCertificateFile /etc/httpd/ssl/fullchain.pem
SSLCertificateKeyFile /etc/httpd/ssl/server.key
SSLProtocol -all +TLSv1.2 +TLSv1.3
</VirtualHost>기존 파일과 설정을 보관한 뒤 원자적으로 교체하는 방식과 롤백 경로를 준비합니다. 암호화된 개인키를 쓰는 서비스는 재기동 시 암호 입력 방식도 확인합니다.
반영과 외부 검증
sudo httpd -t
sudo systemctl reload httpd
openssl s_client -connect blog.example.com:443 -servername blog.example.com -verify_return_error </dev/null실제로 제공되는 인증서의 만료일·체인과 애플리케이션 응답을 확인합니다. LB·WAF에서 TLS를 종료한다면 그 장비의 인증서도 별도로 교체해야 합니다. reload가 성공했더라도 기존 연결이나 캐시만 보지 않도록 새 연결로 검증합니다.
참고: https://httpd.apache.org/docs/2.4/mod/mod_ssl.html