본문 바로가기

리눅스

Let's Encrypt에서 DNS 모드로 SSL 인증서를 발급받는 방법

반응형

Let's Encrypt에서 DNS 모드로 SSL 인증서를 발급받는 방법

DNS 모드는 도메인 소유권 검증을 DNS 레코드를 통해 처리하는 방식입니다.

EPEL 패키지 설치

yum install -y epel-release

1. Certbot 설치

Certbot을 설치합니다. CentOS 7의 경우 다음과 같이 수행할 수 있습니다.

sudo yum install certbot python2-certbot-nginx

설치된 패키지는 시스템에 따라 다를 수 있습니다.

2. DNS API 키 준비

DNS 모드로 SSL 인증서를 발급받기 위해서는 해당 DNS 제공업체의 API 키가 필요합니다. Certbot이 DNS 레코드를 자동으로 추가하고 수정하도록 하기 위함입니다. DNS 제공업체별로 다양한 설정이 필요하므로, 해당 업체의 문서를 확인하여 API 키를 준비해야 합니다.

3. DNS 모드로 인증서 발급

다음 명령어를 사용하여 DNS 모드로 SSL 인증서를 발급합니다. 여기서 <DNS_PROVIDER>와 <API_KEY>를 각각 사용하는 DNS 제공업체와 해당 업체의 API 키로 대체해야 합니다.

sudo certbot certonly --dns-<DNS_PROVIDER> --dns-<DNS_PROVIDER>-credentials /path/to/credentials.ini -d example.com -d www.example.com

credentials.ini 파일은 API 키 등을 포함하고 있는 파일입니다. 해당 파일은 각 DNS 제공업체별로 설정이 다르므로, 업체의 문서를 참고하여 생성해야 합니다.

웹 서버 작업 - 1

certbot certonly --manual --preferred-challenges dns -d img.sangchul.kr
$ certbot certonly --manual --preferred-challenges dns -d img.sangchul.kr
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator manual, Installer None
Starting new HTTPS connection (1): acme-v02.api.letsencrypt.org
Cert is due for renewal, auto-renewing...
Renewing an existing certificate for img.sangchul.kr
Performing the following challenges:
dns-01 challenge for img.sangchul.kr

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please deploy a DNS TXT record under the name
_acme-challenge.img.sangchul.kr with the following value:

6X9DDTJlFNeFsDYC8bxpaL1BumSSRlYM_Ny2FinGIV4

Before continuing, verify the record is deployed.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Press Enter to Continue

4. 인증서 발급 과정

Certbot이 DNS 레코드를 자동으로 수정하여 Let's Encrypt와 통신하며 도메인 소유권 검증을 처리합니다.

  • DNS 서버 작업

** Enter를 누르기 전에 도메인 설정을 합니다.

  • DNS TXT 레코드 등록
_acme-challenge.img.sangchul.kr IN TXT 6X9DDTJlFNeFsDYC8bxpaL1BumSSRlYM_Ny2FinGIV4
  • TXT 레코드 조회
$ dig _acme-challenge.img.sangchul.kr txt +short
"6X9DDTJlFNeFsDYC8bxpaL1BumSSRlYM_Ny2FinGIV4"

웹 서버 작업 - 2

Waiting for verification...
Cleaning up challenges

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/img.sangchul.kr/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/img.sangchul.kr/privkey.pem
   Your certificate will expire on 2021-12-15. 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
728x90

5. 발급된 인증서 확인

발급된 인증서는 /etc/letsencrypt/live/example.com/ 디렉토리에 저장됩니다.

6. 웹 서버 설정

발급된 인증서를 웹 서버에 적용하여 HTTPS를 활성화하려면 해당 웹 서버의 설정 파일을 수정해야 합니다. 예를 들어 Nginx의 경우, HTTPS 설정에 발급받은 인증서의 경로와 파일명을 지정하여 SSL을 활성화할 수 있습니다.

  • 웹 서버(가상호스트) 설정
    • SSLCertificateFile "/etc/letsencrypt/live/img.sangchul.kr/cert.pem"
    • SSLCertificateKeyFile "/etc/letsencrypt/live/img.sangchul.kr/privkey.pem"
    • SSLCACertificateFile "/etc/letsencrypt/live/img.sangchul.kr/chain.pem"
vim /usr/local/apache2/conf/extra/httpd-ssl.conf
SSLEngine on
SSLCertificateFile "/etc/letsencrypt/live/img.sangchul.kr/cert.pem"
SSLCertificateKeyFile "/etc/letsencrypt/live/img.sangchul.kr/privkey.pem"
SSLCACertificateFile "/etc/letsencrypt/live/img.sangchul.kr/chain.pem"

CustomLog "|/usr/sbin/cronolog /var/log/httpd/img.sangchul.kr-ssl-%Y%m%d.log" combined
ErrorLog "|/usr/sbin/cronolog /var/log/httpd/img.sangchul.kr-ssl-%Y%m%d.log"

DNS 모드를 사용하면 웹 서버가 없어도 도메인 소유권 검증을 처리할 수 있으며, DNS 제공업체의 API 키를 이용하여 자동으로 레코드를 수정합니다.

도커로 컨테이너로 Let's Encrypt(SSL) 인증서 발급

  • DNS(도메인 TXT 레코드) 인증
$ docker run -it --rm --name certbot \
 -v '/etc/letsencrypt:/etc/letsencrypt' \
 -v '/var/lib/letsencrypt:/var/lib/letsencrypt' \
 certbot/certbot certonly -d '*.sangchul.kr' \
 --manual --preferred-challenges dns \
 --server https://acme-v02.api.letsencrypt.org/directory
  • 인증서 갱신 테스트
certbot renew --dry-run
  • 인증서 갱신
certbot renew
  • 인증서 만료일 확인
certbot certificates
  • 인증서 삭제
certbot delete

 

728x90
반응형