Let’s Encrypt 인증서 발급 방법


Let’s Encrypt 인증서 발급 방법
무료 SSL 인증서인 Let’s Encrypt 인증서를 무료 발급 받는 방법에 대해서 설명 드리도록 하겠습니다. 웹서버에서 사용될 무료 https 인증서로 발급 기관은 Let’s Encrypt에서 발급되는 인증서 입니다. 우분투 환경에서 발급 받은 인증서를 설정하는 방법까지 함께 설명드리도록 하겠습니다.

Let's Encrypt 인증서 발급 방법

Let’s Encrypt 인증서 발급 방법

환경 준비사항

인증서 발급은 certbot 이라는 패키지를 이용해서 발급 받게 될 예정으로, Let’s Encrypt 에서도 추천하는 방법입니다. 먼저 도메인이 구입되어야 하고, 웹서버가 해당 도메인으로 설정되었다는 가정하에 설명드리도록 하겠습니다. 환경은 우분투 18.04 또는 우분투 16.04 환경을 기준으로 설명드리도록 하겠습니다.

패키지 설치

인증서를 발급 받기위해서는 Let’s Encrypt 인증서를 자동으로 생성하고 관리하는 패키지인 certbot 를 먼저 설치해 주셔야 합니다.
certbot 는 아래의 명령어로 바로 설치하실 수 있습니다. 아래의 명령어는 우분투 환경을 기준으로 설명드리며, CentOS 등 다른 리눅스 배포판을 사용하고 계실 경우 아래 사이트에서 설치 명령어를 참고하시면 됩니다.

https://certbot.eff.org/

Let's Encrypt 인증서 발급 방법
$ sudo apt update
$ sudo apt install python3-certbot-apache 

SSL 인증서 발급

발급 받을 수 있는 인증서는 크게 2가지 종류가 있습니다. 하나는 단일 인증서로 하나의 도메인에만 사용할 수 있는 인증서입니다. hiseon.me, a.hiseon.me, b.hiseon.me 등에 각각 적용하는 인증서가 해당됩니다.

그리고 다른 하나의 인증서는 *.hiseon.me 라는 와일드 카드 인증서입니다. 이 와일드 카드 인증서는 하나의 인증서로 *.hiseon.me 의 하위 모든 도메인에서 사용할 수 있는 인증서입니다.

와일드카드 인정서 발급과 관련한 내용은 아래의 글을 참고해 주시기 바랍니다.

Let’s encrypt 와일드카드 인증서

이 글에서는 하나의 도메인에 적용할 수 있는 단일 인증서입니다. 여러 개의 도메인에 사용하고자 할 경우 각각 인증서를 나눠서 발급받아 주시면 됩니다.

Apache 웹서버를 사용하고 있다는 가정하에, 인증서를 발급 받기 위해서는 아래의 2가지 명령어를 사용할 수 있습니다.

$ sudo certbot --apache

위의 명령어를 실행하면, 인증서를 발급 받고 자동으로 Apache 설정 파일까지 수정되게 됩니다. 이 글에서는 위의 명령어를 사용하지 않고, 인증서를 발급 받은 뒤에 직접 설정하는 방법으로 설명드리도록 하겠습니다. 마지막에 certonly 라는 서브명령어를 추가하여 아래의 명령어를 실행합니다.

$ sudo certbot --apache certonly

certbot 명령어를 실행하면, 다음 같이 이메일 주소를 묻는 메세지가 나타납니다. 인증서에 사용될 메일 주소 이므로, 올바른 메일 주소를 입력합니다.

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator apache, Installer apache
Enter email address (used for urgent renewal and security notices) (Enter 'c' to cancel):

메일 주소를 입력 한 다음은, 아래와 같은 내용에 동의하는지 묻는 메세지가 나타납니다.

Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)gree/(C)ancel:

동의 하시면, A를 입력하셔서 인증서 생성을 진행합니다. 다음은 이메일 주소를 공유하고자 하는지 묻는 내용입니다.

Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o:

이메일 주소를 공유하고, 관련 메일을 받아 보고자 하시는 경우 Y를 동의하지 않으시면 N를 입력해 주시면 됩니다.
다음은 생성하고자 하시는 도메인을 선택하는 부분입니다. 현재 설정된 웹서버의 도메인 정보를 가져와서 선택하도록 되어 있습니다.

Which names would you like to activate HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: hiseon.me
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel):

도메인에 해당되는 숫자 번호를 입력해 주시면 되니다. 만약 전체 도메인에 적용하고자 하시는 경우 빈칸으로 남겨주시고, 원하시는 도메인을 콤마(,) 또는 스페이스로 분리하여 입력해 주시면 됩니다.
위의 정보가 모두 입력되면 다음과 같이 자동으로 SSL 인증서가 생성되게 됩니다.

Obtaining a new certificate
Performing the following challenges:
http-01 challenge for hiseon.me
Waiting for verification...
Cleaning up challenges

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/hiseon.me/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/hiseon.me/privkey.pem
   Your cert will expire on 2018-12-16. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot
   again. To non-interactively renew *all* of your certificates, run
   "certbot renew"
 - Your account credentials have been saved in your Certbot
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Certbot so
   making regular backups of this folder is ideal.
 - 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

생성된 인증서는 기본이 3개월입니다. 그리고 갱신은 certbot 명령어로 인증서를 갱신하실 수 있습니다.

SSL 인증서 파일

생성된 인증서 파일은 /etc/letsencrypt/live/ 위치에 저장되게 됩니다. 도메인 별로 디렉터리가 생성되서 저장되게 되는데, 발급된 인증성 파일은 아래와 같습니다.

  • privkey.pem : 인증서를 위한 비밀키 파일입니다.
  • fullchain.pem : 인증서와 체인 인증서가 합쳐진 전체 파일입니다. 대부분의 서버 소프트웨어에서 사용됩니다.
  • chain.pem : Nginx >=1.3.7에서 OCSP stapling을 위해서 사용됩니다.
  • cert.pem : 생성된 인증서 파일입니다.

Apache 인증서 설정

위에서 생성한 인증서 파일을 Apache에서 설정하는 방법에 대해서 설명드리도록 하겠습니다. 먼저 아래의 명령어로 SSL 모듈을 활성화 해주시기 바랍니다.

$ sudo a2enmod ssl

그리고 아파치 설정파일을 다음과 같이 설정해 주시기 바랍니다.

<VirtualHost *:443>
    ...
    SSLEngine on
    SSLCertificateKeyFile   /etc/letsencrypt/live/hiseon.me/privkey.pem
    SSLCertificateFile      /etc/letsencrypt/live/hiseon.me/cert.pem
    SSLCertificateChainFile    /etc/letsencrypt/live/hiseon.me/fullchain.pem
    ...
</VirtualHost>

아파치 웹 서버 설정과 관련한 보다 자세한 내용은 다음 글을 참고해 주시기 바랍니다.

SSL인증서를 Apache 서버에 설정하는 방법

letsencrypt 자동갱신

Let’s Encrypt 인증서는 발급받으면 기간이 사용할 수 있는 기간이 3개월입니다. 따라서 인증서가 만료되기 전에 갱신을 해야 합니다.
certbot에서는 자동으로 갱신할 수 있는 기능이 제공이 되는데, 갱신 명령어를 crontab에 추가하여 자동으로 갱신될 수 있도록 설정 가능합니다.

root권한으로 아래와 같은 내용을 crontab에 추가해 주시면 됩니다. 매달 1일 인증서 갱신 명령어를 실행하는 내용입니다.

0 0 1 * * /bin/bash -l -c 'certbot renew --quiet'

( 본문 인용시 출처를 밝혀 주시면 감사하겠습니다.)