Let’s Encrypt(Certbot)를 통한 SSL 인증서 발급 및 적용

이 글에서는 Certbot을 사용한 Let’s Encrypt SSL 인증서 발급과 자동 갱신 방법을 설명합니다.

우분투 20.04에 Apache 또는 Nginx 웹 서버가 설치된 상태에서 진행합니다.
서버의 443(HTTPS) 포트를 미리 개방해 주세요.


snapd 설치

우분투 16.04.4, 18.04, 20.04에는 snapd가 기본으로 설치되어 있으므로 생략합니다.
다른 배포판의 snapd 설치 방법은 Installing snapd를 참고하세요.


Certbot OS 패키지 제거

기존에 설치된 Certbot 패키지가 있다면 삭제합니다.

$ sudo apt remove certbot

설치된 패키지가 없으면 다음 단계로 넘어갑니다.


Certbot 설치

Certbot을 설치합니다.

$ sudo snap install --classic certbot
Download snap "core20" (634) from channel "stable"            12%  190kB/s 4m56s
Download snap "certbot" (500) from channel "stable"            5%  187kB/s 4m14s
certbot 1.7.0 from Certbot Project (certbot-eff✓) installed

SSL 인증서 발급 및 설정

SSL 인증서를 발급한 후 웹 서버의 설정을 업데이트(HTTPS 사용 설정)합니다.

// Apache
$ sudo certbot --apache

// Nginx
$ sudo certbot --nginx
$ sudo certbot --apache
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator apache, Installer apache
Enter email address (used for urgent renewal and security notices)
 (Enter 'c' to cancel): [이메일 주소]

  • 이용 약관에 동의합니다.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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 server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)gree/(C)ancel: A

  • EFF의 소식을 이메일로 받을지 선택합니다.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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: Y

  • Apache 설정 파일에 도메인 이름이 설정되어 있지 않아 나오는 메시지입니다.
    SSL 인증서를 발급받을 도메인 이름을 입력합니다. (콤마 또는 스페이스로 구분)
No names were found in your configuration files. Please enter in your domain
name(s) (comma and/or space separated)  (Enter 'c' to cancel): [도메인 이름]

  • SSL 설정 절차(인증서 발급, 검증, 웹 서버 설정)가 진행됩니다.
    앞으로 접속하는 클라이언트는 HTTP -> HTTPS로 리다이렉트됩니다.
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for [도메인 이름]
Enabled Apache rewrite module
Waiting for verification...
Cleaning up challenges
Created an SSL vhost at /etc/apache2/sites-available/000-default-le-ssl.conf
Enabled Apache socache_shmcb module
Enabled Apache ssl module
Deploying Certificate to VirtualHost /etc/apache2/sites-available/000-default-le-ssl.conf
Enabling available site: /etc/apache2/sites-available/000-default-le-ssl.conf
Enabled Apache rewrite module
Redirecting vhost in /etc/apache2/sites-enabled/000-default.conf to ssl vhost in /etc/apache2/sites-available/000-default-le-ssl.conf

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations! You have successfully enabled https://[도메인 이름]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Subscribe to the EFF mailing list (email: [이메일]).

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/[도메인 이름]/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/[도메인 이름]/privkey.pem
   Your cert will expire on 2020-12-03. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot again
   with the "certonly" option. To non-interactively renew *all* of
   your certificates, run "certbot renew"
 - Your account credentials have been saved in your Certbot
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Certbot so
   making regular backups of this folder is ideal.
 - 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

SSL 설정이 완료되었으며 인증서의 만료 시점(2020-12-03)을 알려줍니다.
Certbot은 60일마다 인증서를 자동으로 갱신하기 때문에 다시 실행할 필요는 없습니다.


인증서 자동 갱신 테스트

다음 명령어로 인증서 자동 갱신을 테스트(dry-run)합니다.

$ sudo certbot renew --dry-run
.....
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
** DRY RUN: simulating 'certbot renew' close to cert expiry
**          (The test certificates below have not been saved.)

Congratulations, all renewals succeeded. The following certs have been renewed:
  /etc/letsencrypt/live/[도메인 이름]/fullchain.pem (success)
** DRY RUN: simulating 'certbot renew' close to cert expiry
**          (The test certificates above have not been saved.)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
.....

  • 인증서 갱신 명령어는 다음 중 하나에 설치됩니다.
/etc/crontab/
/etc/cron.*/*
$ systemctl list-timers
  • 인증서 갱신 서비스의 실행 예정 시각이 표시됩니다.
$ sudo systemctl list-timers
NEXT                        LEFT          LAST                        PASSED       UNIT                         ACTIVATES                     
.....      
Fri 2020-09-04 22:58:00 KST 2h 2min left  n/a                         n/a          snap.certbot.renew.timer     snap.certbot.renew.service    
.....