Let'sEncrypt 자동 갱신 처리하기

Posted by , November 05, 2021
LetsEncryptInfra
Series ofLetsEncrypt

thumbnail

22.09.25 내용 추가

여기서 진행한 방식의 경우 standalone 방식이다.
이 방식은 80포트를 강제로 내려서 인증 대상이 진짜 사용하는 서비스인지를 체크하기에 매우 비효율적인 방식이다.

최근 방식의 경우 Webroot나 DNS 인증을 사용하는데, 이번에 DNS 인증에 대하여 포스팅을 진행했다.
Webroot도 사용하지만 와일드카드(ex: *.api.com 등) 인증이 불가하기 때문에 DNS 인증을 사용할 것을 추천한다.
DNS 인증 방식이 필요한 경우 아래 포스팅을 참고하자.

LetsEncrypt 적용법 (DNS 인증 & AWS)


Let'sEncrypt 유효기간?

혹시 아직 Let'sEncrypt를 설치하지 않으신 분이라면 Let'sEncrypt 설치후 AWS에 적용하기 에 설치법을 참고하시길 바란다

Let'sEncrypt는 무료인 대신에 인증서를 주기적으로 인증해줘야 한다
그래서 보통 이것을 크론탭으로 처리해서 편하게 간다.

경각심(?)을 위해 직접 갱신하는 분(?)도 봤지만...자동으로 하는게 정신 건강에 좋다..
물론 LetsEncrypt 팀에서 메일을 주기도 한다. (만료 10일전, 당일) 이렇게?


img 01


저번에 크론탭으로 해뒀는데 뭔가 잘못 건들여서 실행이 안되어 이번에 다시 셋팅하게 되었고 내용을 정리해서 올려본다.

Let'sEncrypt Crontab 적용해보기

갱신 기간 여부 확인

LetsEncrypt 인증서는 90일 유효하며, 만료 20일 전부터 갱신이 가능하다.
갱신이 가능한지 여부는 아래의 명령어를 통해 확인이 가능하다.

> sudo certbot certificates

아래는 커맨드 후 결과 예시이다.

ubuntu@:~$ sudo certbot certificates
Saving debug log to /your/letsencrypt/path/letsencrypt.log

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Found the following certs:
  Certificate Name: dev.net
    Serial Number: 22233344URSerialNumber
    Key Type: RSA
    Domains: dev.net
    Expiry Date: 2123-12-31 00:00:00+00:00 (VALID: 89 days)
    Certificate Path: /your/letsencrypt/path/fullchain.pem
    Private Key Path: /your/letsencrypt/path/privkey.pem
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

인증 기간이 20일 이하면 가능하다.

갱신 여부 확인

먼저 갱신이 제대로 되는지 테스트를 해보려면 아래의 명령어를 수행해본다

> sudo certbot renew --pre-hook "service nginx stop" --post-hook "service nginx start" --dry-run

미들웨어는 자신이 맞는거를 사용하면 된다. (필자는 nginx)
뒤에 --dry-run 이 테스트를 수행하게 해주는 옵션이다.

ubuntu@:~$ sudo certbot renew --pre-hook "service nginx stop" --post-hook "service nginx start" --dry-run
Saving debug log to /your/letsencrypt/path/letsencrypt.log

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /your/letsencrypt/path/renewal/dev.net.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Simulating renewal of an existing certificate for dev.net

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations, all simulated renewals succeeded:
  /your/letsencrypt/path/live/dev.net/fullchain.pem (success)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

위와 같이 축하한다고 뜨면 인증하는데 문제가 없다는 뜻이다.

PS : 만약 인증이 안된다고 뜨고 에러에 다음과 같은 구문(produced an unexpected error The manual plugin is not working) 이 있는 경우 이곳을 참고하자.


갱신 처리 (With crontab)

먼저 크론탭을 열어 작성해주고...

> crontab -e

만약 크론탭이 먼저 선등록 되어 있는지 확인하려면..

> cat /etc/crontab -> 등록된 크론탭 확인

먼저 난 3개월마다 매 1일에 스크립트를 수행하게 해줬다.
크론탭 명령어는 아래와 같이 작성했다.

> 1 0 1 1-12/3 * sudo certbot renew --pre-hook "service nginx stop" --post-hook "service nginx start" >> /mylog/letsencrypt/log/$(date '+%Y%m%d').log

그리고 마지막으로 크론탭을 재시작 해준다.

> sudo service cron restart

그럼 이제 정상적으로 등록이 된 것이다.