AWS EB에서 Let’s Encrypt 수동으로 갱신하기

Let’s encrypt 라는 녀석을 알고 무료로 HTTPS를 적용한지 벌써 석달이 됐다. 다 좋은데 불편한게 하나 있다면 바로 인증서를 3개월 마다 갱신해야한다는 것이다. 그래서 어떤 분은 3개월짜리 크론잡을 돌리시는 분도 있지만 난 설정을 또 해야하는 귀차니즘도 있고 3개월짜리 크론잡에 확신이 없었다.

AWS 빈스톡(beanstalk) 인스턴스가 언제 내려갈지 장담할 수 없기 때문에 주기를 걸면 왠지 틀어질것 같고, 그렇다고 날짜를 고정한 크론잡을 돌리자니 수동이나 다를바가 없었다. 그럴바엔 그냥 귀차니즘도 덜고 수동으로 갱신하는 방법이 맞겠다 싶었다. 그래서 그 때를 기다린지 3개월! 참 오래도 기다렸다.

갱신하기

빈스톡 설정(.ebextension) 에서 certbot-auto를 설치해서 쓰고 있었기 때문에 갱신할때도 EB 설정에 넣어두고 배포를 다시 해볼까 싶었지만 굳이 배포할것도 없는데 인증서 때문에 배포한다는게 또 귀찮아서 그냥 터미널에서 작업을 먼저 해보기로 했다.

$> cd /var/app/current  // EB 앱에 설치되는 위치 
$> ls -al
... 
drwxr-xr-x   2 nodejs nodejs   4096 10월 30 03:51 bin
-rwxr-xr-x   1 nodejs nodejs  57312 10월  5 09:05 certbot-auto
drwxr-xr-x   4 nodejs nodejs   4096 10월 30 03:51 config
...

썰봇(certbot-auto)이 설치 됐는지 확인은 했고, 인증서 갱신(renew)을 하기전 혹시 모르니까 테스트를 해봤다. 참고로 썰봇은 루트 권한을 요구하기 때문에 반드시 sudo 나 루트 권한을 획득한 후에 명령을 실행한다.

$> sudo ./certbot-auto renew --dry-run

... 중략 ...    
Cert not due for renewal, but simulating renewal for dry run Plugins selected: 
Authenticator standalone, 
Installer None Running pre-hook command: service nginx stop 
Output from service: Stopping nginx: 
Hook command "service nginx stop" returned error code 137    
... 중략 ...

1 renew failure(s), 0 parse failure(s)

하하 이게 뭔가요? 싶었는데 자세히 읽어보면 nginx 문제 인것 같다. 그래서 직접 nginx를 죽여봤다.

$> sudo service nginx stop Stopping nginx: /sbin/service: line 66: 25051 죽었음 env -i PATH="$PATH" TERM="$TERM" "${SERVICEDIR}/${SERVICE}" ${OPTIONS}

$> ps -ef | grep nginx root 25067 1 0 10:10 ? 00:00:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf -g daemon off; nginx 25070 25067 0 10:10 ? 00:00:00 nginx: worker process ec2-user 25091 23820 0 10:11 pts/0 00:00:00 grep --color=auto nginx 

어허! 이건 또 뭔가요? 엔진엑스가 죽지 않는다!! 죽여도 죽여도 좀비 처럼 다시 살아난다. 자동 재시작을 멈추기 위해서는 아래와 같은 명령을 이용한다.

$> sudo initctl stop nginx

자 이제 nginx는 멈췄고, 다시 renew –dry-run을 해보니 이제는 문제가 없다. 그럼 –dry-run 옵션을 빼고 갱신을 해보자. 참고로 이 글을 쓰는 시점엔 이미 갱신을 완료해서 로그 캡처를 못했다.

$> sudo ./certbot-auto renew

인증서를 갱신했다면 nginx를 다시 죽지 않는 좀비(?) 모드로 실행해준다.

$> sudo initctl start nginx

제대로 갱신 됐는지 확인하기

인증서 확인을 위해 certificates 명령을 실행해봤다.

$> sudo ./certbot-auto certificates Saving debug log to /var/log/letsencrypt/letsencrypt.log

* * *

Found the following certs: Certificate Name: rlibro.com Domains: rlibro.com Expiry Date: 2018-02-10 02:16:31+00:00 (VALID: 89 days) Certificate Path: /etc/letsencrypt/live/rlibro.com/fullchain.pem

## Private Key Path: /etc/letsencrypt/live/rlibro.com/privkey.pem

이제 89일 남았다! 유후!!

다시 캘린더에 갱신 날짜를 입력해 둬야겠다.

불꽃남자

UI 개발자

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다

This site uses Akismet to reduce spam. Learn how your comment data is processed.