상세 컨텐츠

본문 제목

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

IT&DEV

by 린이파파 2021. 8. 10. 11:35

본문

 

 

무료로 제공되는 Let's encrypt 인증서를 Centos 7에 설치하는 방법을 정리한다.
Let's encrypt는 무료로 고성능의 SSL인증서를 갯수 제한없이 발급 받아 리눅스에 설치할 수 있는 반면,
3개월 마다 갱신을 해줘야 하는 단점이 있지만,
나의 경우 인증서 만료일을 네이버클라우드 플랫폼의 Certificate Manager 에 등록하여 관리하기로 하고 관련 내용도 함께 정리한다.

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 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>

 

RootCA Chain 생성 및 네이버클라우드플랫폼 'Certificate Manager' 등록

3개월 마다 갱신을 해줘야 하기 때문에 불상사를 막기 위해
SSL 인증서 만료일이 도래하면 이벤트 알림 SMS와 이메일을 발송해주는 서비스 'Certificate Manager'에 인증서 정보를 등록 하기로 한다.
다만, Certificate Manager 에 인증서 정보를 등록하기 위해선 인증서의
Private Key, Public Key Certificate, Certification Chain
세가지 키 값을 입력해야 하는데,
여기서 문제가 되는 것이 Certification Chain.
인증서 발급시 자동 생성된 chain 파일인 fullchain.pem 에는 발급자의 RootCA 정보가 포함되어 있지 않아 Certificate Manager에 등록이 되질 않는다.
따라서 아래와 같이 Root CA 정보가 포함된 chain 을 직접 만들어 주기로 한다.

#cd /etc/letsencrypt/live/mydomain.com/

인증서 폴더로 이동

#wget http://apps.identrust.com/roots/dstrootcax3.p7c

Let's encrypt의 RootCA 를 다운로드

#openssl pkcs7 -inform der -in dstrootcax3.p7c -out dstrootcax3.pem -print_certs

PEM 형식으로 변환

#cp fullchain.pem fullchain_RootCA.pem
#cat dstrootcax3.pem >> fullchain_RootCA.pem

마지막으로, Chain Verification 진행

#openssl verify -CAfile fullchain_RootCA.pem cert.pem

RootCA 정보가 담긴 fullchain_RootCA.pem 생성 완료.
fullchain_RootCA.pem 의 내용을 전체 복사하여 네이버클라우드플랫폼 'Certificate Manager' 등록 창의
Certification Chain 란에 붙여넣으면 잘 등록 된다.

 

만료일이 도래했다면 Certbot 으로 인증서 갱신

네이버클라우드플랫폼에서 인증서의 만료일이 도래했다는 안내를 받았다면,

#certbot certificates

인증서의 남은 기간 확인

#certbot renew --dry-run

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

#certbot renew

로 인증서 갱신!

반응형

관련글 더보기

댓글 영역