트러블슈팅 6. Caddy 에서 tls internal 을 지웠는데 인증서 발급을 시도하지 않을 때
서버를 옮길 때 저는 DNS 를 바꾸기 전에 새 서버에서 리허설을 합니다. 새 서버 앞단 Caddy 에 사이트 블록을 넣되 tls internal 을 붙여서 Caddy 가 자체 CA 로 인증서를 만들게 하고, PC 에서는 --resolve 로 새 서버를 직접 찔러 봅니다.
mail.pcmeister.co.kr {
tls internal
reverse_proxy nginx-mailcow:8080
}
curl -k --resolve mail.pcmeister.co.kr:443:203.0.113.10 https://mail.pcmeister.co.kr/
메일 서버를 옮길 때 리허설이 끝나고 DNS 를 바꾼 다음, tls internal 줄만 지우고 reload 했습니다. 이제 Let’s Encrypt 로 진짜 인증서를 받겠지 했는데, Caddy 는 발급을 시도하지 않고 리허설 때의 내부 인증서를 계속 내놓았습니다.
Caddy 는 이미 갖고 있는 인증서가 유효하면 새로 받지 않습니다. 리허설 때 만든 내부 인증서가 데이터 디렉터리에 저장돼 있고 만료도 한참 남았으니, 설정이 바뀌어도 그걸 계속 쓴 겁니다. 내부 인증서는 이 경로에 있습니다.
/data/caddy/certificates/local/<호스트 이름>/
compose 에서 ./data:/data 로 마운트해 두었다면 호스트에서는 /opt/caddy/data/caddy/certificates/local/ 아래입니다. 이 디렉터리를 지우고 다시 읽게 하면 그제서야 ACME 로 발급을 시작합니다.
cd /opt/caddy
sudo rm -rf data/caddy/certificates/local/mail.pcmeister.co.kr
docker compose restart caddy
메일 서버 때는 재시작을 했는데, 나중에 블로그를 올릴 때는 같은 디렉터리를 지우고 reload 만 해도 바로 발급을 시도하는 것을 봤습니다. 둘 중 편한 쪽으로 하면 됩니다.
그 뒤로는 이전 절차 문서에 “tls internal 을 지울 때 local 인증서 디렉터리도 같이 지운다” 를 적어 두었습니다.