Let’s Encrypt SSL 무료 인증서 설치 및 자동갱신 방법 정리(Nginx/Apache)

웹 서버에서 HTTPS 구성을 위한 Let’s Encrypt에서 제공 해 주는 SSL 무료 인증서 설치 방법을 정리합니다. Ubuntu 리눅스 환경의 Nginx 또는 Apache 서버를 기준으로 설명합니다.

Let’s Encrypt

Let's Encrypt
Let’s Encrypt

Let’s Encrypt는 무료로 TLS 인증서를 발급해주는 비영리 기관입니다. 발급된 인증서는 90일간 유효한 인증서입니다.

90일이 지나서 만료되지 않도록 90일이 지나기전에 인증서를 갱신 해 주어야 합니다.

Certbot을 이용한 인증서 발급

certbot
certbot

certbot은 Let’s Encrypt에서 추천하는 인증서 발급 프로그램입니다. 사용방법이 어렵지 않기 때문에 certbot을 사용하여 인증서 발급 및 설치를 진행합니다.

이 글은 Ubuntu 20.04 OS에 Nginx 또는 Apache 서버에 설치하는것을 기준으로 설명합니다. 혹시 자신의 환경이 다르다면 자신에세 맞는 환경의 설치 방법을 찾아서 진행하도록 합니다.

웹서버와 OS를 선택합니다.
웹서버와 OS를 선택합니다.

certbot 사용 방법은 https://certbot.eff.org/instructions에 접속하여 웹서버 소프트웨어와 OS를 선택하면 설정 가이드를 확인할 수 있습니다.

certbot을 사용하여 인증서 발급을 진행하기 위해서는 먼저 80포트로 웹 사이트가 구동되고 있는 상태여야 합니다.

certbot을 사용하기 위해서는 snapd가 설치되어 있어야 합니다. Ubuntu 20.04 배포판에는 이미 설치가 되어있기 때문에 따로 설치 절차를 진행하지 않아도 됩니다.

설치된 snapd가 최신버전인지 화인을 위해 아래 명령어를 실행합니다.

sudo snap install core; sudo snap refresh core

설치 명령이 snapd가 사용되어야 하기 때문에 apt-get으로 설치된 certbot 패키지가 존재한다면 아래 명령어로 삭제를 먼저 진행 합니다.

sudo apt-get remove certbot

certbot 설치를 진행합니다.

sudo snap install --classic certbot

심볼릭 링크를 생성하여 certbot 명령을 실행 할 수 있도록 합니다.

sudo ln -s /snap/bin/certbot /usr/bin/certbot

다음 명령어로 인증서 발급 및 설치를 진행합니다.

Nginx 서버를 사용중이라면 아래와 같이

sudo certbot --nginx

Apache 서버를 사용중이라면 아래와 같이

sudo certbot --apache

명령어를 입력하면 이메일 주소를 입력하고 약관을 동의하는 절차를 진행하게 됩니다. 이때 서버가 온라인 상태가 아니라면 인증서 발급에 실패하므로 서버는 미리 구동하여 둡니다.

설치가 완료되면 “/etc/letsencrypt/live/도메인명” 경로에 인증서 파일들이 설치되며 Nginx 또는 Apache 서버의 환경 설정 파일에 인증서 정보가 자동으로 추가됩니다.

이제 “https://도메인명” 으로 접속하여 브라우저에 자물쇠 마크가 잘 표시되는지 확인합니다.

인증서 자동갱신

certbot을 사용하면 인증서가 자동으로 갱신될 수 있도록 환경이 설정됩니다. 아래 명령어로 확인 해 볼 수 있습니다.

sudo nano /etc/crontab

crontab에 등록된 내용을 살펴보면 매월 1일 certbot renew 작업을 수행하도록 설정되어 있습니다.

# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user  command
17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
 0 0    1 * *   root    certbot renew --quiet
#

자동갱신은 설정되어 있으니 자동갱신 명령어가 문제없이 작동하는지 아래 명령으로 테스트 해 봅니다.

sudo certbot renew --dry-run

–dry-run 옵션을 붙이면 실제 갱신이 아니라 명령어 수행중 오류가 발생하는지 미리 확인 해 볼 수 있습니다.