필자는 Namecheap에서 도메인을 발급받아 Cloudflare DNS 서비스를 이용하기 때문에 Cloudflare DNS를 기준으로 글을 작성했습니다
와일드카드 인증서와 일반 인증서의 차이점은?
일반 인증서의 경우 루트 도메인과 별도로 서브 도메인을 일일히 적어서 인증서를 발급받는다.
따라서 인증서 정보를 보면 루트 도메인과 서브 도메인이 하드 코딩 되어있기에 발급받은 후에 새로운 서브 도메인에 SSL을 적용하기 위해서는 새로운 인증서를 발급받아야 한다.
반면 와일드카드 인증서의 경우 *.seongmin.dev
로 인증서를 발급받기 때문에 언제든지 다른 서브 도메인에 SSL을 적용할 수 있다.
Cloudflare API키 파일 생성하기
Cloudflare 페이지에서 Global API Key를 확인한다.
그리고 ~/.secrets/certbot/cloudflare.ini
을 생성한다.
# ~/.secrets/certbot/cloudflare.ini
dns_cloudflare_email = email@email.com
dns_cloudflare_api_key = API_KEY
이후 보안을 위해 권한을 설정한다.
chmod 600 ~/.secrets/certbot/cloudflare.ini
인증서 발급받기
1. certbot 이미지 실행하기
docker run --rm -it --name certbot \
-v ~/docker/certbot/seongmin.dev/etc:/etc/letsencrypt \
-v ~/docker/certbot/seongmin.dev/var:/var/lib/letsencrypt \
-v ~/.secrets/certbot/cloudflare.ini:/cloudflare.ini \
certbot/dns-cloudflare:latest \
certonly \
--dns-cloudflare \
--dns-cloudflare-credentials /cloudflare.ini \
-d seongmin.dev \
-d *.seongmin.dev
만약 ARM 인스턴스라면 아키텍쳐에 맞게
latest
이미지 태그를arm32v6-latest
또는arm64v8-latest
로 지정하면 된다.
-v
쪽에 있는 디렉토리와 -d
에 있는 도메인만 수정하면 된다.
2. 이메일 주소 입력
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Enter email address (used for urgent renewal and security notices)
(Enter 'c' to cancel):
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
여기서 적은 이메일로 인증서 만료까지 남은 일수를 알려주는 메일이 온다.
3. 약관 동의
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf.
You must agree in order to register with the ACME. Do you agree?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o:
인증서 발급에 대한 약관 동의 여부이다. 동의를 해야 인증서 발급이 진행된다.
4. 이메일 수신 동의
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing, once your first certificate is successfully
issued, to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the
non-profit organization that develops Certbot? We'd like to send
you email about our work encrypting the web, EFF news, campaigns,
and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o:
about our work encrypting the web, EFF news, campaigns, and ways to support digital freedom
에 해당하는 이메일 수신에 대한 동의이다.
동의하지 않아도 인증서 발급은 가능하기 때문에 거부했다.
5. 발급
Account registered.
Requesting a certificate for domain.TLD *.domain.TLD
Performing the following challenges:
dns-01 challenge for domain.TLD
dns-01 challenge for domain.TLD
Waiting 10 seconds for DNS changes to propagate
Waiting for verification...
Cleaning up challenges
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/seongmin.dev/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/seongmin.dev/privkey.pem
Your certificate will expire on 2021-05-30. To obtain a new or
tweaked version of this certificate in the future, simply run
certbot again. To non-interactively renew *all* of your
certificates, run "certbot renew"
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
이렇게하면 발급이 완료된다.
인증서는 /etc/letsencrypt
를 마운트한 디렉토리 아래에 /archive/domain.TLD
에 위치한다.
인증서 갱신
인증서 갱신은 발급시 입력했던 정보가 저장되어 있기때문에 간단하다.
docker run --rm -it --name certbot \
-v ~/docker/certbot/seongmin.dev/etc:/etc/letsencrypt \
-v ~/docker/certbot/seongmin.dev/var:/var/lib/letsencrypt \
-v ~/.secrets/certbot/cloudflare.ini:~/cloudflare.ini \
certbot/dns-cloudflare:latest \
renew
여기도 마찬가지로 ARM 인스턴스라면 아키텍쳐에 맞게
latest
이미지 태그를arm32v6-latest
또는arm64v8-latest
로 지정하면 된다.
만약 갱신을 시뮬레이션 해보고 싶다면 renew
대신 renew --dry-run
을 통해서 확인할 수 있다.