npm 저장소에 패키지 등록하기
오드로이드로 개인서버 구축하기 #4 Let’s Encrypt 무료 SSL 인증서로 https 설정하기
2018-06-24
Explanation
우분투에 Let’s Encrypt 무료 SSL 인증서로 https 설정하기
저는 https://www.wsgvet.com/bbs/board.php?bo_table=web&wr_id=179(우성군의 NAS) 글을 참고하여 적용하였고 지금 보고 계신 글은 우성군님의 글과 거의 동일한 이야기를 개인적으로 정리한 글입니다. 우성군님의 글이 정말 보기 좋게 정리되어 있어서 이글을 참고하는 것보다 위 링크를 참고하는 것도 좋은 방법일 것 같습니다.
1 |
$ apt-get install letsencrypt |
1 2 3 4 5 6 |
$ vi /etc/nginx/sites-available/cheolguso # cheolguso 부분은 원하시는 이름으로 생성, 기존의 설정을 수정합니다. # 새로 추가된 설정이라면 $ ln -s /etc/nginx/sites-available/cheolguso /etc/nginx/sites-enabled/ # 위와 같이 심볼링크를 등록해줍니다. |
대략 아래와 같은 설정에 root 부분을 확인하고, 아래 표시한 location ~ … 부분을 추가합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
server { listen 80; server_name cheolguso.com; root /home/cheolguso index index.php index.html; # 추가한 부분 --- location ~ /.well-known { allow all; } # --- ... } |
1 |
$ letsencrypt certonly -a webroot -w /home/cheolguso -d cheolguso.com -d www.cheolguso.com |
/home/cheolguso 부분은 위 nginx 설정의 root 부분이며, -d cheolguso.com 처럼 -d 를 통해 더 많은 도메인을 등록할 수 있습니다.
한번 등록된 인증서에는 도메인을 추가하거나 수정할 수 없고 새로 발급 받아야 합니다.
발급 커맨드 명령어를 입력하면 이메일을 입력하고 동의하면 발급 됩니다.
1 2 3 4 5 6 |
$ mkdir /etc/nginx/ssl # 디렉토리 생성 $ cd /etc/nginx/ssl # 생성한 디렉토리로 이동 $ openssl dhparam -out dhparams.pem # dhparams 파일 생성 |
dhparams 생성에는 수 분에서 수십 분의 시간이 소요됩니다. 생성이 완료되면,
1 2 |
$ openssl rand 48 > session_ticket.key # 세션 티켓키도 생성해 줍니다. |
요약한 cheolguso.com의 설정은 대략 아래와 같습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
server { listen 80; server_name cheolguso.com www.cheolguso.com; add_header "Cache-Control" "public, max-age=31436000"; location / { rewrite ^/(.*)$ https://cheolguso.com/$1 permanent; } } server { listen 443 ssl; server_name cheolguso.com www.cheolguso.com; root /home/cheolguso; index index.php; location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php7.2-fpm.sock; } ... location ~ /.well-known { allow all; } ssl_certificate /etc/letsencrypt/live/cheolguso.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/cheolguso.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/cheolguso.com/chain.pem; ssl_stapling on; ssl_stapling_verify on; resolver 8.8.8.8 8.8.4.4 valid=300s; resolver_timeout 10s; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_ciphers ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS; ssl_session_timeout 1d; ssl_session_cache shared:SSL:50m; ssl_dhparam /etc/nginx/ssl/dhparams.pem; ssl_session_tickets on; ssl_session_ticket_key /etc/nginx/ssl/session_ticket.key; add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"; } |
Let’s Encrypt 인증서는 무료이지만 90일이라는 유효기간이 있습니다. 하지만 만기 1달전부터 갱신이 가능합니다.
갱신 명령어는 아래와 같습니다.
1 |
$ letsencrypt renew |
자동 갱신을 위해서 crontab를 사용합니다.
1 |
$ crontab -e |
위 명령어로 접근하여
1 2 3 4 |
30 2 1 1-12 * /usr/bin/letsencrypt renew >> /var/log/le-renew.log 35 2 1 1-12 * /bin/systemctl reload nginx # 매월 1일 새벽 2시 30분에 인증서가 갱신되며 # 매월 1일 새벽 2시 35분에 nginx를 재실행 합니다. |
를 추가합니다.
간단한 설명으로 앞의 5가지 항목은 분, 시, 일, 월, 요일 입니다.
자세한 설명은 https://zetawiki.com/wiki/%EB%A6%AC%EB%88%85%EC%8A%A4_%EB%B0%98%EB%B3%B5_%EC%98%88%EC%95%BD%EC%9E%91%EC%97%85_cron,_crond,_crontab를 참고 할 수 있습니다.