let's encrypt with certbot

army262·2021년 3월 15일
2

snapd가 설치되어 있다는 가정하에 시작한다.
unbuntu 기준으로 aws인스턴스에는 기본적으로 설치되어있다.

certbot 설치

sudo snap install --classic certbot

wild card 인증서 받기

sudo certbot certonly \
  --agree-tos \
  --email someone@example.com \
  --manual \
  --preferred-challenges=dns \
  -d *.example.com \
  --server https://acme-v02.api.letsencrypt.org/directory

dns text record 설정

Please deploy a DNS TXT record under the name 
_acme-challenge.example.com with the following value: 

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

인증서 받기 실행 후 위와 같은 메세지가 나오면
dns text recoard를 위 값으로 설정한다.

nginx에 설정

server {
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
ssl_certificate /etc/letsencrypt/live/example.io/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.io/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';

...
}

인증서 테스트 및 nginx 재시작

sudo nginx -t
sudo systemctl restart nginx
sudo systemctl status nginx

인증서 자동 갱신 with crontab

이방법은 인증서 자동 갱신이 안된다.

wild card인증서 받는 옵션중 manual 방식때문인데

자동 갱신을 하려면 발급 받을 때 이 옵션을 선택해서는 안된다.

다음 게시물에서 자동갱신될 수 있도록 발급 받는 방법을 쓰겠다.

certbot 위치확인

which certbot  

crontab등록

sudo crontab -e
# utc+0기준으로 18시는 우리나라 시간으로 새벽 3시 / 마지막 숫자 1은 월요일(0~6) 일요일~토요일
# 아래 명령어는 월요일 새벽3시(우리나라기준) 실행되며 갱신 시 nginx재시작.
0 18 * * 6 /snap/bin/certbot renew --renew-hook="sudo systemctl restart nginx"

기타 명령어 정리

# Crontab 보기
$ sudo crontab -l

# Crontab 편집
$ sudo crontab -e

# Crontab 실행 로그
$ view /var/log/syslog
profile
재밌는 개발

4개의 댓글

comment-user-thumbnail
2021년 3월 15일

한국의 스티븐 잡스같아요

1개의 답글
comment-user-thumbnail
2021년 3월 15일

한국의 일론 머스크같습니다

1개의 답글