查看完整版本: nginx 下如何設定 Let's Encrypt HTTPS 讓 certbot 自動更新+移除教學


altis 2018-11-12 08:18

nginx 下如何設定 Let's Encrypt HTTPS 讓 certbot 自動更新+移除教學

Let’s Encrypt 是一家新的證書頒發機構(Certificate Authority,簡稱 CA),其提供免費的 TLS/SSL 憑證再配合 Certbot 這個自動化工具,讓一般的網站可以很容易地使用 HTTPS 的安全加密網頁,設定很簡單,憑證的更新也可以自動處理。<br><br>(1) 從 Certbot 官方網站下載 certbot-auto 指令稿,並設定其執行權限:<br>certbot-auto 要放在哪裡都可以,建議一開始就找一個適合的地方放好,例如建立一個 /opt/letsencrypt 目錄,把 certbot-auto 放在這裡:<br><br># mkdir /opt/letsencrypt<br># cd /opt/letsencrypt<br># wget https://dl.eff.org/certbot-auto<br># chmod a+x certbot-auto<br><br>(2) 執行 certbot-auto,讓它自動安裝所有相依套件:<br><br><font color="Green"># /opt/letsencrypt/certbot-auto</font><br><br>(3) 使用 certonly 功能下載憑證:<br><br><font color="Green"># /opt/letsencrypt/certbot-auto certonly --webroot -w /var/www/html/ -d adj.idv.tw -d www.adj.idv.tw</font><br><br>下載完成後,會出現類似這樣的成功訊息。<br><br>IMPORTANT NOTES:<br>&nbsp;- Congratulations! Your certificate and chain have been saved at<br>&nbsp;&nbsp; /etc/letsencrypt/live/adj.idv.tw/fullchain.pem. Your cert will<br>&nbsp;&nbsp; expire on 2018-11-12. To obtain a new version of the certificate in<br>&nbsp;&nbsp; the future, simply run Certbot again.<br>&nbsp;- If you like Certbot, please consider supporting our work by:<br><br>&nbsp;&nbsp; Donating to ISRG / Let's Encrypt:&nbsp;&nbsp; https://letsencrypt.org/donate<br>&nbsp;&nbsp; Donating to EFF:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; https://eff.org/donate-le<br><br>這樣就成功取得 Let’s Encrypt 的憑證了,而 nginx 用的憑證就儲存在 /etc/letsencrypt/live/adj.idv.tw/ 目錄之下,其中 fullchain.pem 就是 nginx 需要憑證,而 privkey.pem 則是需要保護好的私鑰,關於憑證檔案的詳細說明,請參考 Certbot 的說明文件。<br>接下來要設定 nginx 伺服器,使用這個新憑證來提供 HTTPS 的安全加密網頁。<br><br>(4)設定 nginx 伺服器使用 SSL 憑證<br><br>要讓 nginx 啟用 HTTPS 安全加密網頁,只要加上 SSL 相關的幾行設定即可,其餘的設定保持不變,以下是我個人使用的 nginx 伺服器設定:<br>[quote]<br>server {<br>&nbsp; listen 443;<br><br>&nbsp; # 同時啟用 IPv6 的 HTTPS 安全加密網頁<br>&nbsp; listen [::]:443;<br><br>&nbsp; server_name adj.idv.tw www.adj.idv.tw;<br><br>&nbsp; root /var/www/html/;<br>&nbsp; index index.php index.html index.htm;<br><br>&nbsp; # 啟用 SSL<br>&nbsp; ssl on;<br><br>&nbsp; # 設定 SSL 憑證<br>&nbsp; ssl_certificate /etc/letsencrypt/live/adj.idv.tw/fullchain.pem;<br>&nbsp; ssl_certificate_key /etc/letsencrypt/live/adj.idv.tw/privkey.pem;<br><br>&nbsp; # 其他 SSL 選項<br>&nbsp; ssl_session_timeout 5m;<br>&nbsp; ssl_protocols TLSv1 TLSv1.1 TLSv1.2;<br>&nbsp; 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';<br>&nbsp; ssl_prefer_server_ciphers on;<br><br>&nbsp; # ...<br>}<br>[/quote]<br><br><br>設定好之後,檢查一下設定檔是否正確:<br><br># nginx -t<br><br>確認無誤之後,重新載入設定檔:<br><br># service nginx reload<br><br>這樣就完成 nginx 伺服器的設定了,接著就可以開啟 HTTPS 加密的網址來測試了,正常來說,使用 Google Chrome 瀏覽器開啟自己主機的 HTTPS 加密網址,應該就會顯示一個綠色的鎖頭,這樣就代表我們安裝的 SSL 憑證是有效的。<br><br>(5) 自動更新 SSL 憑證<br><br>Let’s Encrypt 的憑證使用期限只有三個月,在憑證到期前的一個月可以使用 certbot-auto 來更新憑證,在實際更新之前我們可以加入 --dry-run 參數,先進行測試:<br><br><font color="Green"># /opt/letsencrypt/certbot-auto renew --dry-run</font><br><br>若測試沒問題,就可以使用正式指令來更新:<br><br><font color="Green"># /opt/letsencrypt/certbot-auto renew --quiet --no-self-upgrade</font><br><br>而為了方便起見,可以將這個更新指令寫在 /opt/letsencrypt/renew.sh 指令稿中:<br><br>[quote]<br>#!/bin/bash<br>/opt/letsencrypt/certbot-auto renew --quiet --no-self-upgrade --post-hook "service nginx reload"<br>[/quote]<br><br>這裡我又加上一個 --post-hook 的設定,讓憑證更新完後,可以自動重新載入 nginx 伺服器的設定,讓憑證生效。<br><br>接著把這個 /opt/letsencrypt/renew.sh 指令稿寫進 crontab 中:<br>[quote]<br># letsencrypt SSL renew<br>30 6 * * 1 /opt/letsencrypt/renew.sh<br>[/quote]<br>官方的建議是這個指令可以一天執行兩次,讓伺服器的憑證隨時保持在最新的狀態,這裡我是設定讓伺服器每週一早上六點半進行憑證的檢查與更新,Certbot 只有在憑證到期前一個月才會進行更新,如果憑證尚未到期,就不會更新。<br><div><br></div><div>那如果之後domain 用不到需要刪除呢?可以這樣做...紅字部份改成自己需要的名稱</div><div># <font color="DarkGreen">/opt/letsencrypt/certbot-auto delete --cert-name</font> <font color="Red">adj.com.tw</font><br></div><div><br></div>參考資料:<br>https://blog.gtwang.org/linux/secure-nginx-with-lets-encrypt-ssl-certificate-on-ubuntu-and-debian/<br>https://blog.hellojcc.tw/2018/05/02/setup-https-with-letsencrypt-on-nginx/<br><br>
頁: [1]
查看完整版本: nginx 下如何設定 Let's Encrypt HTTPS 讓 certbot 自動更新+移除教學