검색
검색
회원가입로그인

letsencrypt 인증서 트러블 슈팅 (manual to auto) + 자동 인증서 갱신 설정

이전에 프론트엔드에 wildcard 도메인을 설정하면서 certbot 을 manual로 설치했었다.

certbot certonly --manual -d domain1 -d domain2 --preferred-challenges dns

그런데 manual로 설정하면 crontab에서 설정한 자동 리뉴얼이 안된다. 자동으로 진행할 때 최초 시행했던 dns 인증을 할 수 없기 때문이다.

오늘 사이트에 들어왔더니 인증서 문제가 생겨서 급하게 수정했다.

일단 와일드 카드 도메인 지원을 일부 서브 도메인만 지원하는 걸로 바꿨다. 이렇게 하면 서브 도메인을 지원하면서 crontab 을 통해서 자동 리뉴얼이 되는걸로 만들 수 있다. 여러개의 서브 도메인을 지정하려면 다음과 같이 하면 된다.

테스트를 먼저 하려면 --dry-run 옵션을 붙이면 된다.

sudo certbot --nginx certonly -d yourdomain.com,www.yourdomain.com,sub.yourdomain.com

나의 경우는 nginx를 통해서 인증서를 서비스하고 있기 때문에 --nginx 를 입력해 줬다. 이렇게 하면 nginx의 설정 파일에 자동으로 인증서 부분을 업데이트 해준다.

nginx 설정 파일의 위치는 보통 /etc/nginx/nginx.conf 또는 /etc/nginx/sites-available 폴더에 있다.

참고로 사용 가능한 옵션은 --apache, --nginx, --webroot, --standalone 등이 있다.

인증을 받으면 nginx를 재시작해주자.

sudo service nginx restart 또는 systemctl restart nginx

crontab에 자동 리뉴얼 하기

sudo crontab -e

i를 눌러 insert 모드로 전환하자. 나의 경우 이렇게 입력했다. crontab을 sudo로 실행하면 명령어에는 따로 sudo를 붙일 필요는 없다.

0 18 1 * * /usr/bin/certbot renew --deploy-hook="service nginx restart" >> /var/log/le-renew.log

이렇게 하면 매월(1) 18시에 체크를 해서 renew를 진행한다. 여기에 --nginx 옵션을 넣지 않은 이유는 이전 명령어를 기억하기 때문이다. --deploy-hook 은 리뉴얼 프로세스가 성공적으로 진행됐을 때 nginx를 재시작한다. 반면에 --post-hook은 성공 여부와 관계없이 실행 후에 무조건 실행된다.

esc를 누르고 wq를 눌러 저장하고 종료하자.

만약 테스트를 해보려면 현재 시간보다 1분 후로 설정해서 진행하면 된다. 예를 들어 현재 시간이 18시라면 0 18 * * * 로 진행하면 된다.

서버의 시간을 보려면 date 명령어를 입력하면 된다.

휴 오랜만에 진땀 뺐다. 유비무환이다. 미리미리 체크해 놓자.

조회수 : 168
공유하기
카카오로 공유하기
페이스북 공유하기
트위터로 공유하기
url 복사하기