[CentOS 7] Let's Encrypt CA의 무료 SSL 인증서 발급 및 자동갱신하기

2021. 8. 27. 13:12Web Server/CentOS 7

300x250
반응형

이전 시간에 certbot을 이용하여 Let's Encrypt CA의 와일드카드 TLS/SSL 인증서를 발급받는 방법을 알아본적 있습니다.
와일드카드 SSL 인증서 발급을 위해 --manual 옵션을 이용하여 인증서를 발급받았는데, 쉘스크립트 상으로 직접 옵션을 입력받는 방식으로 발급받은 인증서는 자동 갱신을 지원하지 않습니다.

Lets' Encrypt CA로부터 발급받은 인증서는 유효기간이 90일로 갱신을 빈번히 요구합니다.
따라서, 이번 시간에는 standalone 방식을 이용하여 인증서를 발급받는 방법을 알아보고, 자동 갱신을 위해 crontab에 설정하는 방법까지 알아보도록 할 것입니다.


  1. 개요
    1. SSL/TLS 인증서를 설정하는 이유
    2. 무료 SSL/TLS 인증서 발급 CA 기관 Let's Encrypt
  2. Certbot 설치
    1. epel-release 설치
    2. certbot 설치
  3. 인증서 발급
    1. 웹서버 종료
    2. 인증서 발급
  4. Apache 웹서버에 인증서 설정하기
    1. 443 포트 기본 인증서 설정 추가
    2. Apache 설정파일에서 ssl.conf 파일 추가하기
  5. 인증서가 적용된 페이지 확인
  6. 인증서 자동 갱신 설정하기

1. 개요

1.1. SSL/TLS 인증서를 설정하는 이유

웹사이트에 HTTPS 프로토콜을 사용하기 위해서는 CA(Certificate Authority, 인증기관)로부터 발급받은 SSL/TLS인증서가 설정되어있어야 합니다.

이전 포스팅에서 우리는 공인 SSL CA기본으로부터 SSL/TLS 인증서를 발급받고 Apache 웹서버에 인증서를 설정하는 방법을 배웠습니다.

RapidSSL이나 GlobalSign와 같은 CA는 유료 서비스로 일년에 1만원에서 크게는 35만원을 지불해야합니다.

개인정보 위변조에 매우 민감한 비즈니스나 금전 관련 웹서비스를 제공하고자 한다면 이러한 유료 CA로부터 SSL/TLS 인증서를 발급받는 것이 좋으나, Spring Boot demo 프로젝트와 같은 개인 웹사이트의 경우에는 굳이 유로 SSL/TLS 인증서를 설정할 필요가 없습니다.

그럼, demo 웹페이지에 무료 SSL/TLS 인증서를 설정해보도록 합시다.

1.2. 무료 SSL/TLS 인증서 발급 CA 기관 Let's Encrypt

22

Let's Encrypt는 무료 SSL/TLS인증서를 발급해주는 CA 기관으로 Mozilla Foundation, Google Chrome, Cisco System 와 같은 글로벌 기업으로부터 스폰서를 받고 있는 서비스 입니다.

하나의 인증서에 여러개의 도메인을 설정하는 것과 와일드카드 도메인을 설정하는 것을 지원합니다.

인증서를 발급받기 위해 나라이름, 주이름, 구이름, 기관명, 조직명, 이메일주소를 입력받던 유료 CA 기관과 달리 Let's Encrypt CA는 이메일 값만 입력받습니다.

인증서 유효기간은 90일 이며, 만료된 인증서에 대한 자동 갱신을 지원합니다.

단, 인증서로 인해 발생된 피해는 보상해주지 않습니다.(배상금은 없습니다.)


2. Certbot 설치

21

Let’s Encrypt는 ACME 프로토콜을 사용하여 설정한 도메인명의 유효성을 확인하고 인증서를 발급합니다.
따라서, Let’s Encrypt CA로부터 SSL/TLS 인증서를 발급 받고 싶다면 ACME 클라이언트 소프트웨어를 하나 설치해야 합니다.

Let’s Encrypt에서는 그 중 사용하기 편리하고 다양한 OS에서 작동되는 Certbot 을 사용하는 것을 권장하고 있습니다.

2.1. epel-release 설치

certbot은 CentOS 7의 공식 저장소에 포함되어있지 않은 Extras 패키지입니다.
따라서 Extras 저장소인 EPEL을 사전에 설치하여 EPEL Repository를 활성화 해야합니다.

yum repolist

yum repolist 명령어를 이용하여 현재 서버에서 이용하고 있는 yum 저장소 목록을 조회합니다.
만약 EPEL 저장소가 없다면 epel-release를 설치합니다.

sudo yum install epel-release

yum repolist | grep epel
*epel/x86_64                          Extra Packages for Enterprise Linux 13641

2.2. certbot 설치

certbot과 certbot Apache 웹서버 플러그인을 설치합니다.

sudo yum install certbot python2-certbot-apache

만일 Apache 웹서버가아닌 Nginx 웹서버에 SSL/TLS 인증서를 설치할 것이라면 python2-certbot-nginx를 설치하면 됩니다.


3. 인증서 발급

certbot 설치를 완료하였으니 이제 이 명령어를 이용하여 인증서를 발급받아봅시다.

인증서 발급 및 갱신에 관한 옵션은 아래와 같습니다.

obtain, install, and renew certificates:
    (default) run   Obtain & install a certificate in your current webserver
    certonly        Obtain or renew a certificate, but do not install it
    renew           Renew all previously obtained certificates that are near expiry
    enhance         Add security enhancements to your existing configuration
   -d DOMAINS       Comma-separated list of domains to obtain a certificate for
  --apache          Use the Apache plugin for authentication & installation
  --standalone      Run a standalone webserver for authentication
  (the certbot nginx plugin is not installed)
  --webroot         Place files in a server′s webroot folder for authentication
  --manual          Obtain certificates interactively, or using shell script hooks
   -n               Run non-interactively
  --test-cert       Obtain a test certificate from a staging server
  --dry-run         Test "renew" or "certonly" without saving any certificates to disk

발급에 대한 옵션으로는 --apache, --standalone, --webroot, --manual이 있는데, 이전 포스팅에서는 --manual 방식을 이용하여 커맨드상의 질으를 통해 직접 인증서 관련 설정을 하였습니다.
이번 시간에는 보다 간소한 --standalone 방식을 이용하여 인증서를 발급받을 것입니다.

※ --standalone 방식은 발급 절차가 매우 간소하나, 발급시 잠시 웹서버를 stop 시켜야한다는 단점이 있습니다. 이점을 유의해주세요.


3.1. 웹서버 종료

만일, 웹서버가 켜져있다면, 웹서버를 먼저 종료해주세요.
제가 이용하고 있는 웹서버는 Apache 이므로 httpd 를 조회하였으며, 아래와 같이 켜져있을 경우 서비스를 먼저 종료하면 됩니다.

sudo netstat -nap | grep httpd  | grep LISTEN
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      25949/httpd

sudo systemctl stop httpd

3.2. 인증서 발급

인증서를 발급하고자하는 도메일을 -d 옵션에 설정합니다.
도메인은 FQDN로 설정해야하며, 아래와 같이 여러개를 설정할수도 있습니다.
certbot이 웹서버 구성파일을 직접 수정하지 못하도록 certonly 옵션도 설정하였습니다.

sudo certbot --standalone -d applebox.xyz -d www.applebox.xyz -d demo.applebox.xyz certonly
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator standalone, Installer None
Starting new HTTPS connection (1): acme-v02.api.letsencrypt.org
Requesting a certificate for applebox.xyz and 2 more domains
Performing the following challenges:
http-01 challenge for applebox.xyz
Waiting for verification...
Cleaning up challenges

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/applebox.xyz/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/applebox.xyz/privkey.pem
   Your certificate will expire on 2021-11-25. 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"
 - 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

정상적으로 인증서가 발급되었을 경우 위와같은 메시지가 출력됩니다.

To non-interactively renew *all* of your certificates, run "certbot renew" 라는 문구를 보면 알 수 있듯, 만일 대화식으로 인증서를 생성한 것(= 커맨드 창에서 질의를 통해 인증서를 설정한 경우)을 제외한 방식의 경우 certbot renew 명령어를 이용하여 간단하게 인증서 갱신이 가능하다는 것 까지 알 수 있습니다.

이전 시간에 발급했던 와일드카드 인증서의 경우, 와일드카드 도메일을 발급하고자 --manual 방식으로 인증서를 생성했습니다, 때문에 자동으로 인증서를 갱신할 수가 없었고 3개월마다 한번씩 직접 갱신을 해야한다는 불편한 점이 있었습니다.

여러 도메인에 대해 하나의 인증서로 관리하고 싶다면 위와 같이 도메인을 여러개 설정하여 발급하면 됩니다.


4. Apache 웹서버에 인증서 설정하기

생성된 인증서를 Apache 웹서버에 설정해봅시다.

조금 전에 생성한 SSL/TLS 인증서가 위치한 디렉토리를 조회해봅시다.

sudo ls -al /etc/letsencrypt/live/applebox.xyz
total 4
drwxr-xr-x 2 root root  93 Aug 27 02:41 .
drwx------ 3 root root  40 Aug 27 02:41 ..
-rw-r--r-- 1 root root 692 Aug 27 02:41 README
lrwxrwxrwx 1 root root  36 Aug 27 02:41 cert.pem -> ../../archive/applebox.xyz/cert1.pem
lrwxrwxrwx 1 root root  37 Aug 27 02:41 chain.pem -> ../../archive/applebox.xyz/chain1.pem
lrwxrwxrwx 1 root root  41 Aug 27 02:41 fullchain.pem -> ../../archive/applebox.xyz/fullchain1.pem
lrwxrwxrwx 1 root root  39 Aug 27 02:41 privkey.pem -> ../../archive/applebox.xyz/privkey1.pem

디렉토리 내에는 인증서, 체인인증서, 키파일이 존재합니다.
이 인증서를 Apache 기본 ssl 설정파일에 설정해봅니다.

4.1. 443 포트 기본 인증서 설정 추가

443 포트 기본 인증서 설정에 대한 인증서 설정은 /etc/httpd/conf.d/ssl.conf 파일내의 <VirtualHost _default_:443> 내에 있습니다.

ssl.conf 파일을 수정하기 전에, 먼저 설정파일을 백업한 후,

sudo cp /etc/httpd/conf.d/ssl.conf /etc/httpd/conf.d/ssl.conf.org

sudo vim /etc/httpd/conf.d/ssl.conf
<VirtualHost _default_:443>

SSLCertificateFile /etc/letsencrypt/live/applebox.xyz/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/applebox.xyz/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/applebox.xyz/chain.pem
SSLCACertificateFile /etc/letsencrypt/live/applebox.xyz/fullchain.pem

# SSLCertificateFile /etc/pki/tls/certs/localhost.crt
# SSLCertificateKeyFile /etc/pki/tls/private/localhost.key

...
</VirtualHost>

4.2. Apache 설정파일에서 ssl.conf 파일 추가하기

기본적으로 설정되어있던 443포트에 대한 기본 가상호스트 설정을 주석처리하고 인증서 정보를 추가합니다.

인증서 파일과 관련된 설정정보는 SSLCertificateFile, SSLCertificateKeyFile, SSLCertificateChainFile, SSLCACertificateFile 가 있습니다.


그리고, 아파치 설정파일에서 /etc/httpd/conf.d/ssl.conf 를 포함시킵니다.

sudo vim /etc/httpd/conf/httpd.conf
IncludeOptional conf.d/*.conf

맨 하단에 관련 설정이 주석처리 되어있는 것을 해제하면 됩니다.

※ Apache 웹서버 버전에 따라 IncludeOptional이 아닌 Include에 설정해야할 수도 있으니 참고바랍니다.


5. 인증서가 적용된 페이지

https://www.applebox.xyz 로 접속해보니, 아래와 같이 자물쇠표시와 함께 Let's Encrypt CA로 부터 발급받은 SSL/TLS 인증서가 잘 적용된것을 확인할 수 있습니다.

38


6. 인증서 자동 갱신 설정하기

certbot renew 명령어는 만료일이 가까워지는 인증서를 갱신해줍니다.

crontab에 1달에 한번씩 갱신 명령어를 실행하도록 명령어를 추가해줍니다.

sudo vim /etc/crontab
0 0 1 * * root systemctl stop httpd && certbot renew -q && systemctl start httpd

crontab을 수정한 후 crond 데몬 재시작 합니다.

sudo systemctl restart crond

++

  • Let's Encrypt CA의 무료 SSL/TLS 인증서 발급 및 적용하기
  • Apache 2.4에 무료 SSL 인증서 설정하기
  • 무료 SSL/TLS 인증서 발급받기
  • certbot을 이용하여 무료 SSL인증서 발급받기
  • standalone 방식으로 certbot 인증서 발급받기
300x250
반응형