무료 SSL 인증서 certbot 설치 및 사용법 (설정 스크립트 공유)

무료 SSL 인증서 certbot를 사용해보자.


서버 엔지니어를 하다보면 웹개발자들이 많이 요청하는 것들 중 SSL 인증서를 설치해 달라는 것이 있다. 그럼 이 SSL 인증서는 무엇일까?

SSL 인증서란 무엇인가?

SSL 인증서는 웹 사이트와 사용자 간의 통신을 암호화하여 보안을 강화하는 기술이다.
SSL 인증서를 사용하면 웹 사이트의 주소가 http에서 https로 바뀌고 자물쇠 🔒 아이콘이 표시된다. 이렇게 하면 중간자 공격이나 데이터 유출 등의 위험을 줄일 수 있는 장점이 있다.

예전에는 SSL 인증서를 설치하기 위해서 많은 절차가 필요했다.
comodo와 같은 SSL 인증서 발급을 해주는 곳에 비용을 지불하면서 인증서 발급을 요청해야했고, 즉시 발급도 되지 않아 몇일을 기다려야 받을 수 있었다.
그 후 SSL인증서를 도메인에 적용시켜야 하는데 무슨 오류가 그렇게 많이 나는지 오류가 날때마다 고생했던 기억이 새록새록하다.
뭐 이제는 추억이 됐지만 말이다.

certbot이란?

certbot은 Let’s Encrypt라는 비영리 기관에서 제공하는 무료 SSL 인증서를 자동으로 발급하고 갱신해주는 프로그램이다.
certbot은 다양한 OS와 웹 서버를 지원하며 쉽고 빠르게 SSL 인증서를 적용할 수 있어서 현재 가장 많이 쓰이는 무료 SSL 인증서 발급 프로그램이라고 할 수 있다.


certbot 설치하기

certbot은 snap이라는 패키지 관리 도구를 통해 설치하는 것을 권장한다. snap은 Ubuntu 16.04 이상에서 기본적으로 제공되므로 별도로 설치할 필요가 없지만 update는 반드시 해주어야 한다.

다음 명령어로 snap을 업데이트 해준다.

sudo snap install core; sudo snap refresh core

만약 snap이 설치되어 있지 않다면 아래 명령어로 설치한다.

sudo apt-get update
sudo apt-get install snapd

sudo apt-get install snapd 실행
sudo apt-get install snapd 실행


그런 다음 다음 명령어로 certbot을 설치한다.

sudo snap install --classic certbot

설치가 완료되면 다음 명령어로 certbot 명령어에 대한 심볼릭 링크를 생성한다.

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

certbot으로 SSL 인증서 발급하기

certbot으로 SSL 인증서를 발급받으려면 도메인 이름과 이메일 주소를 입력해야 한다.
도메인 이름은 미리 구매하고 DNS 설정은 반드시 설정해두어야 한다. DNS설정이 되어 있지 않으면 오류가 발생하니 꼭 미리 설정해두자.
이메일 주소는 만약 인증서가 만료되거나 문제가 발생했을 때 알림을 받기 위해 입력해야하니 자신이 자주 확인하는 메일주소를 입력하면 된다.

sudo certbot --apache -d $domain

여기서 $domain은 자신의 도메인 이름으로 바꿔준다. 예를 들어 www.example.com 이라면 -d www.example.com 으로 입력한다.

최신버전의 certbot은 자동으로 apache 설정 파일에 SSL 관련 내용을 추가해준다.
따라서 별도로 apache 설정 파일을 수정할 필요가 없다.

certbot 실행 중 나오는 질문

Enter email address (used for urgent renewal and security notices) : 이메일 주소 입력
Agree to Let’s Encrypt terms of service? : Y 입력
Would you be willing to share your email address with the Electronic Frontier Foundation? : Y 또는 N 입력 (선택사항)
Please choose whether or not to redirect HTTP traffic to HTTPS : 1 또는 2 입력 (1: 모든 요청을 https로 리다이렉트, 2: http와 https 모두 허용) 나는 1번을 주로 쓴다.

모든 질문에 답하면 성공적으로 SSL 인증서가 발급되었다는 메세지와 함께 웹 사이트의 주소가 https:// 로 바뀌었음을 확인할 수 있다.


설정 스크립트와 사용방법

snapd 설치 이후 SSL 인증서 설정과정을 스크립트로 만들어보았다.

#!/bin/bash

# certbot이 설치되어 있는지 확인
if ! command -v certbot &> /dev/null
then
    # certbot이 없으면 설치 메세지 출력하고 설치
    echo "certbot이 설치되어 있지 않기 때문에 설치하겠습니다."
    sudo snap refresh
    sudo snap install --classic certbot
else
    # certbot이 있으면 확인 메세지 출력
    echo "certbot이 설치되어 있는 것을 확인했습니다."
fi

# 사용자의 입력을 받아서 도메인 이름 설정 (여러 개일 경우 쉼표로 구분)
read -p "도메인 이름(들)을 입력하세요: " domain

# certbot으로 ssl인증서 생성 및 apache 설정 변경 (여러 개일 경우 -d 옵션 반복)
sudo certbot --apache -d $domain

certbot이 없으면 certbot을 설치하고, 있으면 설정을 진행한다.
위 내용을 복사하고 certbot.sh로 저장한다. 그리고 다음 명령어로 실행 권한을 부여한다.

chmod +x certbot.sh

그 다음 다음 명령어로 bash script를 실행한다.

./certbot.sh

실행하면 도메인 이름(들)을 입력하라는 메세지가 나온다. 여기서는 예시로 example.com과 www.example.com을 입력해보겠다.

도메인 이름(들)을 입력하세요: example.com,www.example.com

입력하고 엔터를 치면 certbot이 동작하기 시작한다. certbot은 Let’s Encrypt와 통신하여 SSL 인증서를 생성하고, apache 설정 파일에 SSL 관련 내용을 추가한다. 이 과정에서 사용자의 이메일 주소나 약관 동의 등의 정보를 요구하면 위에 알려준 것 처럼 화면적절히 입력하거나 선택하면 된다.

certbot이 성공적으로 완료되면 다음과 같은 메세지가 출력된다.

Congratulations! You have successfully enabled https://example.com and https://www.example.com

You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=example.com
https://www.ssllabs.com/ssltest/analyze.html?d=www.example.com

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/example.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/example.com/privkey.pem
   Your certificate will expire on 2023-06-19. To obtain a new or
   tweaked version of this certificate in the future, simply run
   certbot again with the "certonly" option. To non-interactively
   renew *all* of your certificates, run "certbot renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

축하합니다! 라는 문구와 함께 SSL 인증서가 발급되었고 apache 설정이 변경되었다는 내용이다. 또한 인증서의 위치와 유효 기간, 갱신 방법 등의 정보도 제공된다.

이제 웹브라우저에서 https://example.com 또는 https://www.example.com 으로 접속해보면 SSL 인증서가 적용된 것을 확인할 수 있다.

마무리

이번 포스팅에서는 Ubuntu 20.04 LTS와 apache 웹서버에서 무료 SSL 인증서 certbot 설치 및 사용법에 대해 알아보았다. 
certbot은 Let’s Encrypt와 통신하여 SSL 인증서를 자동으로 생성하고 적용하고 갱신하는 편리한 도구이다.
웹사이트의 보안을 강화하고 싶다면 certbot을 활용해보자.

댓글

이 블로그의 인기 게시물

crontab 설정방법과 로그 확인하는 법

Microsoft Defender 방화벽 설정 또는 해제하는 방법

한국 군비지출 세계 9위