TroubleShooting

🧨 Let's Encrypt + Docker + iptime DDNS 삽질기: 왜 HTTPS 적용이 안 될까?

창따오 2025. 7. 26. 12:44
728x90

✍️ 글을 쓰게 된 배경

집에서 직접 개발한 MSA 서버를 운영하고 있고, 도메인은 ddaowifi.iptime.org라는 ipTIME DDNS를 사용하고 있었습니다.
이제 여기에 HTTPS(SSL) 인증서를 붙이기 위해 Certbot을 사용해 Let's Encrypt 인증서를 발급하려고 했죠.

그런데 아무리 설정을 바꾸고, 경로를 맞춰도 인증이 안 되는 거예요. 왜 그럴까요?


⚙️ 내가 시도한 환경 구성

✅ Docker + Nginx

services:
  nginx:
    image: nginx:latest
    container_name: nginx
    ports:
      - "80:80"
    volumes:
      - ./conf:/etc/nginx/conf.d
      - ./html:/usr/share/nginx/html
    networks:
      - msa-net

networks:
  msa-net:
    external: true

✅ Nginx 설정 (./conf/default.conf)

server {
    listen 80;
    server_name ddaowifi.iptime.org;

    location /.well-known/acme-challenge/ {
        root /usr/share/nginx/html;
        allow all;
    }

    location / {
        root /usr/share/nginx/html;
        index index.html;
    }
}

✅ Certbot 명령어

sudo certbot certonly --webroot -w ./html -d ddaowifi.iptime.org

✅ 해결 과정

  • Nginx root 경로가 Certbot -w 경로와 불일치했기 때문
  • 볼륨 마운트가 제대로 적용되지 않아 컨테이너 내부와 외부 html 경로가 달랐음
  • 컨테이너 내부에서 직접 파일 확인하며 문제 해결
docker exec -it nginx bash
cat /usr/share/nginx/html/.well-known/acme-challenge/test.txt

❌ 2. CAA 오류로 인한 인증 실패

Type:   caa
Detail: While processing CAA for ddaowifi.iptime.org: CAA record for iptime.org prevents issuance

💡 알게 된 교훈

삽질 내용

 

Nginx + Certbot에서 404 발생 root와 -w 경로가 일치해야 함
파일 바꿨는데 내용이 그대로임 Docker 볼륨 마운트가 실패하거나 컨테이너 재기동 안 했을 수 있음
IPTime 도메인인데 인증 안 됨 CAA 정책으로 Let's Encrypt 차단됨 (도메인 소유권 없으면 불가)

🔁 해결 방법 제안

🔒 SSL을 붙이고 싶다면?

방법설명
✅ ZeroSSL CAA 정책 우회 가능 (Let's Encrypt 말고 다른 CA 사용)
✅ Cloudflare DDNS + Proxy HTTPS 제공 + 자동 IP 반영
✅ 도메인 직접 구매 + DDNS 설정 완전한 자유 + 확장성 있음

✨ 마무리

이번 삽질을 통해 얻은 가장 큰 수확은:

  • 인증서 발급이 단순히 경로 문제만이 아니라 DNS 정책(CAA) 까지 영향을 준다는 것
  • Docker, Nginx, Certbot, DDNS, 볼륨 마운트 등 실서비스 환경에서 겪는 문제들을 실제로 마주해봤다는 것

💬 덧붙이자면…

아무리 구글링을 해도 왜 인증이 안 되는지 알 수 없던 상황, 결국 DNS의 보안 정책 하나가 모든 걸 막고 있었습니다.

나처럼 iptime DDNS를 쓰는 사람이라면, 꼭 이 글을 보고 시간과 정신력을 아끼길 바랍니다.