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 완료 후 아파치를 재시작한다. |