TrueNAS 의 ReverseProxy 에 SSL 인증서 적용하기

SSL 인증서는 서버가 돌아가는 도메인 별로 받는 것이 원칙이기 때문에, 외부로 노출된 서비스를 제공하는 서버 ( Docker, Jail, etc… ) 가 여러개 라면, 각각 따로 인증서를 받아야 한다. 하지만 리버스 프록시 서버를 운용하고 있다면 아주 간편하게 인증서를 한번에 몰아서 관리할 수 있다.

무료로 인증서를 받을 수 있는 Let’s Encrypt 를 이용한다. 고맙게도 설정 툴까지 배포하고 있기 때문에 HTTP 로 정상적으로 동작하게 설정되어 있으면, 손쉽게 인증서를 발급받고 적용 할 수 있다.

작업 순서

  1. certbot 설치
  2. certbot 실행
  3. 인증서 갱신 자동화

Certbot 설치

shell> pkg install certbot
shell> pkg install py39-certbot

certbot 을 설치한다. 만약 안된다면..

shell> pkg search certbot
py39-certbot-2.8.0,1           Let's Encrypt client
py39-certbot-apache-2.8.0      Apache plugin for Certbot
....

패키지 검색해서 설치한다.

certbot 실행

certbot 을 실행하면 모든 것을 자동으로 해 준다. 뭔가 잘못되지만 않았다면… certbot 은 utf-8 만 읽을 수 있으므로, conf 파일 내에 한글로 주석을 쓰고 ASCII 로 저장하면 안된다.

shell> certbot --nginx
Saving debug log to /var/log/letsencrypt/letsencrypt.log

Which names would you like to activate HTTPS for?
We recommend selecting either all domains, or all domains in a VirtualHost/server block.

-----------------------------------------------------------------------------------------
1: blog.gerd.kr
2: cloud.gerd.kr
3: git.gerd.kr
-----------------------------------------------------------------------------------------
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel):

엔터 치면 지가 알아서 다 해준다. 그리고 잊지말고 nginx 를 재시작한다.

shell> service nginx restart

인증서 갱신 자동화

Let’s Encrypt 인증서는 3달간만 유효하기 때문에, 주기적으로 갱신해 줘야 한다. crontab 을 이용해서 자동화한다.

shell> crontab -e

vi 에디터가 열린다. 여기에 문법에 맞춰 넣는다. 분, 시, 일, 월, 요일 순이다. 나는 매월 23일 오전 4시에 “certbot renew” 를 실행하고 nginx 를 재시작 하도록 설정했다.

0 4 23 * * certbot renew --renew-hook="service nginx restart"

수정이 완료되면 ESC -> : -> wq 로 저장한다.

작성한 명령을 확인하려면 -l 옵션을 사용한다.

shell> crontab -l
0 4 24 * * certbot renew --renew-hook="service nginx restart"

확인

인증서 적용이 끝났다. 접속해 보면… 아마 개판이 났을 거다. certbot 은 원래 있던 HTTP 접속을 HTTPS 로 강제로 넘겨버리도록 설정 파일을 바꿔버린다.

대부분의 웹 서비스는 HTTPS 설정을 따로 해 줘야 한다. 특히 워드프레스 같은 거… 그거 설정이 좀 빡친다. 문제가 생기면, ReverseProxy 의 설정파일을 편집해서 HTTP 접속을 살리고, 각 웹서비스 설정을 먼저 하는 것이 좋다. 불가피하게 먼저 HTTPS 설정이 되어 있다면 내부 IP 를 이용해 HTTP 로 설치를 해야 한다. 잔머리 굴린답시고 HTTPS 를 먼저 설정한 다음 설치하면 아예 설치가 제대로 안 된다. 존나 삽질…

그래도 한번만 제대로 하면 되니까, 간바레다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다