통합검색

Linux

[centOS] CentOS 7.8에 무료SSL 인증서 Let's encrypt 발급 및 설치

  • 2022.04.17 13:33:21



무료로 제공되는 Let's encrypt 인증서를 Centos 7에 설치하는 방법을 정리한다.

Let's encrypt는 리눅스에 Certbot 을 설치 후 발급 받아야 하며,
3개월 뒤 갱신시에도 Cerbot을 통해 재발급 받는다.


[!]Centos 에 Certbot 설치[/!]
 
#yum install certbot

로 Cerbot을 설치한다.


[!]Certbot 로 인증서 발급[/!]

인증서 발급을 하게 되는 경우 현재 커맨드에서 위치한 경로가 홈루드로 잡히게 되므로
아래와 같이 인증서가 연동될 webroot 로 이동한다. (웹사이트의 Virtualhost 경로)
 
#cd /home/testhome/public_html

webroot에서 인증서 발급을 시작한다.
 
#certbot certonly --webroot -w . -d mydomain.com

만약, www가 붙은 도메인도 인증서 등록이 필요한 경우 apache를 중지시킨 뒤 아래 명령어로 실행해 준다.
 
#certbot certonly --webroot -w . -d mydomain.com -d www.mydomain.com

위에서 mydomain.com 은 인증서를 등록할 웹사이트의 도메인으로 입력한다.
위 명령어를 수행할 때 경우에 따라 도메인 소유 인증이 되지 않은 경우
.well-known/ 폴더에 특정 파일을 생성해 달라는 안내문구가 나오는 경우가 있는데,
이 경우
 
#mkdir /home/testhome/public_html/.well-known

폴더 생성,
 
#mkdir /home/testhome/public_html/.well-known/acme-challenge

폴더 생성후 폴더 내부로 이동.
 
#vi 안내된파일명

파일 생성.

위 처럼 폴더 및 파일을 만든 뒤
vi 를 통해 오류문구에서 안내된 내용을 입력 후 저장한 다음
다시한 번 위 인증서 발급 명령을 수행한다.

발급에 성공하면 아래와 같이 안내문구가 나온다.
 
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator webroot, Installer None
Starting new HTTPS connection (1): acme-v02.api.letsencrypt.org
Requesting a certificate for testdomain.com
Performing the following challenges:
http-01 challenge for dooo.us
Using the webroot path /home/testhome/public_html for all unmatched domains.
Waiting for verification...
Cleaning up challenges

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

재발급 설정파일에서 webroot 설정 확인하기
앞전에 설명한 대로 실제 웹사이트가 구동되는 경로로 이동하여 인증서를 발급해야 한다고 했지만,
간혹 webroot 설정이 config 파일에서 제대로 설정되지 않아 인증서 갱신시 도메인 인증이 되지 않아 문제가 되는 경우가 있다.
혹시 모르니 아래와 같이 vi 로 설정파일을 열어 webroot가 설정돼 있지 않다면 직접 입력해 준다.
 
#vi /etc/letsencrypt/renewal/mydomain.com.conf

하단부 webroot_map 을 확인한다.
 
[[webroot_map]] mydomain.com = /home/testhome/public_html

아파치 virtualhost 에 인증서 연결
발급된 인증서는 /etc/letsencrypt/live/mydomain.com 경로에
- cert.pem
- privkey.pem
- chain.pem
- fullchain.pem
네개의 파일로 구성돼 있으며,
아래와 같이 virtualhost 에서 연결한다.
 
#vi /etc/httpd/conf.d/vhosts.conf

로 연 다음 아래와 같이 추가 (virtualhost config 파일 경로는 설정에 따라 다르니 유의)
 
<VirtualHost *:443> 
    ServerName mydomain.com 
    DocumentRoot /home/testhome/public_html 
    SSLEngine on 
    SSLCertificateFile /etc/letsencrypt/live/mydomain.com/cert.pem //이 부분 확인
    SSLCertificateKeyFile /etc/letsencrypt/live/mydomain.com/privkey.pem  //이 부분 확인
    SSLCACertificateFile /etc/letsencrypt/live/mydomain.com/chain.pem  //이 부분 확인
    SSLCertificateChainFile /etc/letsencrypt/live/mydomain.com/fullchain.pem  //이 부분 확인
</VirtualHost>


[!]만료일이 도래했다면 Certbot 으로 인증서 갱신[/!]
 
#certbot certificates

인증서의 남은 기간 확인
 
#certbot renew --dry-run

으로 자동 재발급이 가능한지 확인한다.
도메인 인증이 되지 않았다는 오류가 뜬다면 위에서 설명한 대로 webroot를 확인 필요.
정상적으로 작동 한다면
 
#certbot renew

로 인증서 갱신!


[!]매월1일 자동 갱신하도록 crontab 스케줄 등록[/!]

매월 1일 만료일 도래한 인증서를 자동으로 갱신할 수 있도록 crontab 스케줄로 등록한다.
 
#crontab -l

로 현재 등록된 스케줄 확인
 
#crontab -e

로 스케줄 등록 시도. (vi 에디터로 스케줄 입력 화면이 열린다.)
 
0 3 1 * * /usr/bin/certbot renew --renew-hook="systemctl restart httpd"

입력 후 :wq로 저장하여 나온다.
위 스케줄은 매월 1일 오전 3시에 실행하며, renew 완료 후 아파치를 재시작한다.