Ops Log · Infra
www.csklab.site SSL 인증서 적용
포트폴리오 웹(파이썬 정적 서버, 8080)을 nginx 리버스 프록시 뒤로 옮기고, Cloudflare + Let's Encrypt로 HTTPS를 적용한 기록.
⚠ 진행 중 — 자동 갱신 이슈 대응 중구성 개요
클라이언트와 Cloudflare 사이, Cloudflare와 오리진 사이가 서로 다른 두 개의 TLS 연결이라는 점이 핵심입니다. 별도로 인증서를 "교환"할 필요 없이, 각 구간이 각자의 공인 인증서로 암호화됩니다.
진행 단계
- nginx / certbot / python3-certbot-nginx 설치
/etc/nginx/sites-available/csklab.site생성 —127.0.0.1:8080으로 리버스 프록시- DNS를 잠시 DNS only(회색 구름)로 전환해 Let's Encrypt HTTP-01 검증이 오리진에 직접 도달하도록 조치
- AWS 보안 그룹에 80/443 인바운드(0.0.0.0/0) 허용 확인
certbot --nginx -d www.csklab.site --redirect로 인증서 발급 및 HTTP→HTTPS 리다이렉트 설정- DNS를 다시 프록시됨(오렌지 구름)으로 전환, Cloudflare SSL 모드를 Full (strict)로 설정
- Cloudflare 엣지 IP를 직접 지정해 외부 클라이언트 관점에서 HTTPS/HTTP 동작 검증
검증 결과
| 항목 | 결과 |
|---|---|
| https://www.csklab.site/ | 200 OK |
| http://www.csklab.site/ (리다이렉트) | 301 → https |
| Cloudflare 엣지 인증서 | CN=csklab.site (Let's Encrypt, Cloudflare 발급) |
| 오리진 인증서 | CN=www.csklab.site (Let's Encrypt) |
| 인증서 만료일 | 2026-12-12 |
자동 갱신
certbot 설치 시 함께 등록되는 certbot.timer(systemd)가 하루 2회 실행되며, 만료 30일 이내인 인증서만 자동으로 갱신합니다. 별도 cron 설정은 필요 없습니다.
# 상태 확인
systemctl status certbot.timer
# 실제 갱신 없이 시뮬레이션만
sudo certbot renew --dry-run
⚠ 발견된 이슈 — 갱신 dry-run 실패 (조사 중)
증상
certbot renew --dry-run 이 매번 아래와 같이 실패:
Detail: 2606:4700:3037::ac43:d2dd: Invalid response from
http://www.csklab.site/.well-known/acme-challenge/...: 522
522는 Cloudflare가 오리진 연결에 타임아웃 났을 때 나오는 에러 코드입니다.
1차 원인은 확인 및 수정 완료: 최초 발급 시 certbot이 만들어준 리다이렉트가 서버 레벨 if ($host = ...) return 301 구조였는데, nginx에서는 이 구문이 location 매칭보다 먼저 실행돼서 /.well-known/acme-challenge/ 요청까지 무조건 HTTPS로 리다이렉트시켜 버리는 문제가 있었습니다. 이를 location 기반 구조로 재작성해 로컬에서는 challenge 경로가 정상적으로 (302가 아닌) 404/200으로 응답하도록 고쳤습니다.
하지만 이 수정 이후에도 Cloudflare를 경유한 실제 dry-run은 동일한 522로 계속 실패하는 중이라, Cloudflare 엣지(특히 IPv6 경로)와 오리진 사이의 별도 이슈가 남아있는 것으로 보입니다. 다음 세션에서 이어서 조사할 예정입니다.
다음에 확인할 것
- Cloudflare 대시보드에서 이 존(zone)에 IPv6 관련 페이지 규칙/방화벽 규칙이 있는지 확인
- AWS 보안 그룹이 IPv6(
::/0)도 80/443에 대해 허용하고 있는지 재확인 (현재 인스턴스 자체는 글로벌 IPv6 주소가 없음 — 오리진이 IPv6 응답을 못 하는 것이 원인일 가능성) - 필요 시 HTTP-01 대신 DNS-01 챌린지(Cloudflare API 연동)로 전환하거나, 오리진 인증서를 Cloudflare Origin CA 인증서로 교체해 Cloudflare 프록시 뒤에서 갱신이 외부 HTTP 검증에 의존하지 않도록 구조를 바꾸는 방안 검토
- 현재 발급된 인증서는 2026-12-12까지 유효하므로 급한 장애는 아님 — 만료 전 여유 있게 해결