SSL/TLS의 암호화통신을 이용한 증명서를 발급하는 인증기관(CA:Certificate Authority)중 하나이다.
웹사이트를 안전하게 공개하기 위한 SSL적용하기 위한 무료로 이용가능한 Let's Encrypt를 사용
인터넷상에서 통신을 보호하기 위한 보안정책으로 SSL(Secure Sockets Layer)/TLS(Transport Layer) 을 이용한 암호화
도메인 유효성을 확인하기 위해 외부에서 서버에 접근할 수 없으면 증명서를 발급할 수 없는 구조 (ACME Protocol)를 채택하고 있다.
이러한 구조로 인해 자동적이고 빠른 증명서 발급이 가능하다.
증명서를 발급받기 전에 먼저 유효한 도메인과 인증을 받을 서버가 존재해야 한다.
certbot는 Let's Encrypt가 제공하는 클라이언트 소프트웨어로 SSL증명서 취득과 갱신을 자동화 할 수 있다.
다운로드는 페이지를 참조 ▶▶https://certbot.err.org◀◀
다운 URL은 위 참조
# mkdir /mylets
# cd /mylets
# wget https://dl.eff.org/certbot-auto
# chmod a+x certbot-auto
Let's Encrypt로 인증서를 취득할려면 도메인과 웹서버가 필요하다.
웹서버는 도큐멘트루트에 엑세스권한이 있어야 한다. (URL로 접근가)
기존 운영중인 서버일 경우, 인증서를 받기위한 작업을 위해 Nginx의 도큐멘트 루트를 Nginx에서 직접 엑세스 할 수 있게 설정한다.
예로 tomcat등과 같은 WAS와 연동설정한걸 일단 해제
server_name 과 location/root 설정
server {
listen 80;
server_name emunhi.com;
client_max_body_size 20M;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root /www/docroot;
#index index.html index.htm;
}
}
동의와 메일송신수락에 관련된 메세지가 나오면 A , Y 를 선택후 엔터하면 된다.
관련된 의존 라이브러리가 없으면 자동으로 다운로드 하면서 진행하므로 시간이 걸릴수 있다.
# ./certbot-auto certonly --webroot -w /www/docroot -d emunhi.com --email
정상적으로 완료되면 아래와 같은 메세지가 나온다.
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/emunhi.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/emunhi.com/privkey.pem
Your cert will expire on 2018-11-16. To obtain a new or tweaked
version of this certificate in the future, simply run certbot-auto
again. To non-interactively renew *all* of your certificates, run
"certbot-auto 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
[root@emunhi:/mylets]#
# vi {nginx_home}/conf/nginx.conf 설치시 지정한 설정파일 편집
server {
#listen 80;
listen 443 ssl;
server_name emunhi.com;
ssl_certificate /etc/letsencrypt/live/emunhi.com/cert.pem;
ssl_certificate_key /etc/letsencrypt/live/emunhi.com/privkey.pem;
client_max_body_size 20M;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root /www/docroot;
#index index.html index.htm;
}
}
설정파일을 변경했으면 nginx를 재기동후 확인해 본다.
https://emunhi.com
Apache httpd를 운영중이면 해당 키를 적용해도 무관
여기 참조 : ▶▶Nginx Http to Https◀◀
crontab에 자동갱신 및 서버 재기동을 등록한다.
crontab가 없을 경우 설치 ▶▶crontab install◀◀
아래 파란부분은 예로 매일 1시정각에 갱신하는 설정
# crontab -e
0 1 * * * certbot-auto renew --post-hook "systemctl restart nginx" 1 > /dev/null 2 > /dev/null
0 1 * * * /soft/lets/.../certbot-auto renew --force-renew --post-hook "service nginx restart" 1 > /dev/null 2 > /dev/null
주기설정
* * * * *
분(0-59) 시간(0-23) 일(1-31) 월(1-12) 요일(0-7)
2,4,6,8,10,12월 1일 0시에
0 1 1 2,4,6,8,10,12 * certbot-auto renew --post-hook "service nginx restart" 1 > /dev/null 2 > /dev/null
자동갱신 설정에 앞서 실제 갱신이 정상적으로 실행되는지를 테스트해본다.
# ./certbot-auto renew --dry-run
--dry-run : 실제로 동작하진 않는다. 동작확인을 위한 시뮬레이션만 한다.
--force-renew : 유효기간이 1개월 미만이 아니더라도 강제적으로 유효기간을 갱신한다.
브라우저에서 확인 또는, openssl 커맨드를 사용해 확인할 수 있다.
# openssl x509 -in /etc/letsencrypt/live/emunhi.com/cert.pem -noout -dates
notBefore=Aug 18 03:04:23 2018 GMT
notAfter=Nov 16 03:04:23 2018 GMT
notBefore 는 증명서의 생성일시
notAfter 는 증명서의 유효기간을 뜻한다.
certbot-auto renew --force-renew --post-hook "systemctl restart nginx"
아래에서 갱신 전/후 의 인증서를 비교해 보면 xx1.pem 에서 xx2.pem 으로 변경된 걸 볼수 있다.
# cd /etc/letsencrypt/live/emunhi.com/
# ll
total 4
lrwxrwxrwx 1 root root 34 Aug 18 13:02 cert.pem -> ../../archive/emunhi.com/cert1.pem
lrwxrwxrwx 1 root root 35 Aug 18 13:02 chain.pem -> ../../archive/emunhi.com/chain1.pem
lrwxrwxrwx 1 root root 39 Aug 18 13:02 fullchain.pem -> ../../archive/emunhi.com/fullchain1.pem
lrwxrwxrwx 1 root root 37 Aug 18 13:02 privkey.pem -> ../../archive/emunhi.com/privkey1.pem
-rw-r--r-- 1 root root 682 Aug 18 13:02 README
# /mylets/certbot-auto renew --force-renew --post-hook "systemctl restart nginx"
# ll
total 4
lrwxrwxrwx 1 root root 34 Aug 18 15:26 cert.pem -> ../../archive/emunhi.com/cert2.pem
lrwxrwxrwx 1 root root 35 Aug 18 15:26 chain.pem -> ../../archive/emunhi.com/chain2.pem
lrwxrwxrwx 1 root root 39 Aug 18 15:26 fullchain.pem -> ../../archive/emunhi.com/fullchain2.pem
lrwxrwxrwx 1 root root 37 Aug 18 15:26 privkey.pem -> ../../archive/emunhi.com/privkey2.pem
-rw-r--r-- 1 root root 682 Aug 18 13:02 README