let's encrypt 인증서 발급 및 갱신하기
카테고리 없음2018. 5. 14. 01:38
let's encrypt를 이용하면 SSL 인증서 발급과 갱신을 무료로 처리할 수 있습니다.
certbot 설치
cd /usr/bin
wget https://dl.eff.org/certbot-auto
chmod a+x certbot-auto
ln -s /usr/bin/certbot-auto /usr/bin/certbot
서버 인증 허용 설정(nginx 기준) *인증 방식이 webroot가 아니라면 건너뛰세요.
location ~ /\.(?!well-known).* {
access_log off;
log_not_found off;
deny all;
}
webroot(웹 경로)를 기준으로 인증서를 발급하기에 루트 경로의 .well-known 폴더 접근이 가능해야 합니다.
service nginx reload
변경사항 반영을 위해 nginx를 재실행 합니다.
인증서 발급 - webroot 방식
certbot certonly -a webroot --webroot-path=/var/www/example.com -d example.com -d www.example.com
-a
: 인증 방식 설정--webroot-path
: 웹 경로 지정-d
: 도메인(멀티 도메인 설정 가능)
인증서 발급 - DNS 방식
certbot certonly dns -d example.com --manual --preferred-challenges
DNS 라운드 로빈, HAPROXY 등을 이용할 경우에는 DNS 인증 방식을 사용할 수 있습니다.
DH 인증서 발급
openssl dhparam -out dhparam.pem 4096
발급이 완료된 인증서(dhparam.pem)는 /etc/letsencrypt/live/example.com/ 경로로 이동합니다.
서버 인증서 설정
listen 443 ssl http2;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;
ssl_dhparam /etc/letsencrypt/live/example.com/dhparam.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
ssl_prefer_server_ciphers on;
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
인증서 갱신
service nginx stop
certbot renew
service nginx start
위 커맨드를 스크립트로 만들어 cronjob에 등록하면 자동 갱신을 할 수 있습니다.