Let’s Encrypt 是一個 ISRG 管理的數字證書認證機構,為安全網站提供免費的 SSL/TLS 證書。而 Let’s Encrypt 簽發的證書是免費、自動化和公開的,有效期為 3 個月,在 2015 年 12 月 3 日開始進行公眾測試。
系統要求
在開始使用 Let’s Encrypt 之前,請確保擁有主機的 sudo 櫂限和域名的擁有和管理櫂。檢查主機的 IP 位置和在域名的 DNS 建立 A Record 並且指向主機的 IP 位置。如果網站使用了 CDN,必須在建立 Let’s Encrypt 證書前暫停 CDN 的服務。
安裝 Let’s Encrypt 客戶端
Let’s Encrypt 客戶端的源碼在 GitHub 存放,大家可以到 GitHub 下載新的客戶端。為了方便管理 Let’s Encrypt 客戶端,強烈建議使用 Git 下載和管理客戶端。
-
請執行下面的命令以確定套件資訊已經更新至最新版本。
1
sudo apt-get update
-
安裝 Git。
1
sudo apt-get -y install git
-
從 GitHub 複製 Let’s Encrypt 客戶端至本地。
1
sudo git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt
自動建立 SSL 證書
-
將當前目錄轉至客戶端的位置。
1
cd /opt/letsencrypt
-
安裝伺服器插件 如果使用 Apache 伺服器,由於預設已經有 Apache 插件,請跳至下一步。 如果使用 Nginx 伺服器,請執行下面的命令安裝 Nginx 插件。
1
~/.local/share/letsencrypt/bin/pip install -U letsencrypt-nginx
-
假設要建立 SSL 證書的域名是 foolegg.com,而系統使用 Apache 伺服器,可使用下面的命令。
1
./letsencrypt-auto --apache -d foolegg.com -m admin[:at:]foolegg.com
如果系統使用 Nginx 伺服器,可使用下面的命令。
1
./letsencrypt-auto --nginx -d foolegg.com -m admin[:at:]foolegg.com
如果需要建立多過一個域名或子域名的 SSL 證書,可使用下面的命令。請將「–nginx」更改為系統的伺服器。
1
./letsencrypt-auto --nginx -d foolegg.com -d www.foolegg.com -d share.foolegg.com -m admin[:at:]foolegg.com
系統有可能會自動安裝缺乏的套件,請耐心等待。
如果系統沒有「~/.local/share/letsencrypt/」目錄,請跳至下一章「手動建立 SSL 證書」。
-
設定是否強制使用 HTTPS 安裝時會確認是否強制使用 HTTPS,如果想同時使用 HTTPS 和 HTTP,請選擇「Easy」,否則請使用「Secure」。
Easy Allow both HTTP and HTTPS access to these sites Secure Make all requests redirect to secure HTTPS access
-
完成建立 SSL 證書之後,會出現下面的提示。請進入提示中的超連結檢查證書是否成功安裝。
Congratulations! You have successfully enabled https://foolegg.com You should test your configuration at: https://www.ssllabs.com/ssltest/analyze.html?d=foolegg.com
請注意證書的有效時間,為網站提前建立新的證書。
IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at /etc/letsencrypt/live/foolegg.com/fullchain.pem. Your cert will expire on 2016-03-19. To obtain a new version of the certificate in the future, simply run Let's Encrypt again.
建立的證書會存放於 /etc/letsencrypt/live/ 目錄下。
手動建立 SSL 證書
-
將當前目錄轉至客戶端的位置。
1
cd /opt/letsencrypt
-
執行下面的指令開始建立新的證書。
1
./letsencrypt-auto certonly --standalone
-
系統會自動安裝需要的元件,請耐心等待。
-
安裝完必須的元件後,請按照螢幕的指示輸入電郵地址,然後按「OK」繼續。
-
之後請閱讀條款選擇「Agree」繼續。
-
輸入建立 SSL 證書的域名,然後按「OK」。
foolegg.com www.foolegg.com
-
完成建立 SSL 證書之後,會出現下面的提示。
IMPORTANT NOTES: - If you lose your account credentials, you can recover through e-mails sent to admin[:at:]foolegg.com. - Congratulations! Your certificate and chain have been saved at /etc/letsencrypt/live/foolegg.com/fullchain.pem. Your cert will expire on 2016-05-22. To obtain a new version of the certificate in the future, simply run Let's Encrypt again. - Your account credentials have been saved in your Let's Encrypt configuration directory at /etc/letsencrypt. You should make a secure backup of this folder now. This configuration directory will also contain certificates and private keys obtained by Let's Encrypt so making regular backups of this folder is ideal. - If you like Let's Encrypt, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le
檢查 Apache 伺服器設定
-
使用編輯軟件開啟 Apache 的伺服器設定檔案,例如︰
1
sudo vim /etc/apache2/sites-available/000-default.conf
-
正常來說,Let’s Encrypt 客戶端會自動將設定檔案更改。
1 2 3 4 5 6 7 8 9 10 11 12 13
<ifmodule mod_ssl.c> <virtualhost *:443> # ... # Let's encrypt SSLCertificateFile /etc/letsencrypt/live/foolegg.com/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/foolegg.com/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/foolegg.com/chain.pem SSLCACertificateFile /etc/letsencrypt/live/foolegg.com/fullchain.pem # ... </virtualhost> </ifmodule>
-
如果需要應用伺服器設定的更改,請在設定檔案更改後儲存,然後執行下面其中一句命令以重新啟動伺服器。
1 2
sudo service apache2 restart sudo /etc/init.d/apache2 restart
檢查 Nginx 伺服器設定
-
使用編輯軟件開啟 Nginx 的伺服器設定檔案,例如︰
1
sudo vim /etc/nginx/sites-available/default
-
正常來說,Let’s Encrypt 客戶端會自動將設定檔案更改。
server { #... include /etc/letsencrypt/options-ssl-nginx.conf; ssl_certificate /etc/letsencrypt/live/foolegg.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/foolegg.com/privkey.pem; listen 443 ssl; #listen 80; server_name foolegg.com www.foolegg.com; #... }
-
如果是手動建立 SSL 證書,請自行建立「/etc/letsencrypt/options-ssl-nginx.conf」。
ssl_session_cache shared:SSL:1m; ssl_session_timeout 1440m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; # Using list of ciphers from Bulletproof SSL and TLS ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256 ECDHE-ECDSA-AES256-GCM-SHA384 ECDHE-ECDSA-AES128-SHA ECDHE-ECDSA-AES256-SHA ECDHE-ECDSA-AES128-SHA256 ECDHE-ECDSA-AES256-SHA384 ECDHE-RSA-AES128-GCM-SHA256 ECDHE-RSA-AES256-GCM-SHA384 ECDHE-RSA-AES128-SHA ECDHE-RSA-AES128-SHA256 ECDHE-RSA-AES256-SHA384 DHE-RSA-AES128-GCM-SHA256 DHE-RSA-AES256-GCM-SHA384 DHE-RSA-AES128-SHA DHE-RSA-AES256-SHA DHE-RSA-AES128-SHA256 DHE-RSA-AES256-SHA256 EDH-RSA-DES-CBC3-SHA;
-
如果想強制將 HTTP 轉至 HTTPS,可加入下面的內容。
server { listen 80; server_name foolegg.com www.foolegg.com; add_header Strict-Transport-Security max-age=31536000; return 301 https://$server_name$request_uri; }
-
如果需要應用伺服器設定的更改,請在設定檔案更改後儲存,然後執行下面其中一句命令以重新啟動伺服器。
1 2
sudo service nginx restart sudo /etc/init.d/nginx restart
更新 Let’s Encrypt 證書
-
執行入面的命令可更新 Let’s Encrypt 證書。請將「–nginx」更改為系統的伺服器。
1
/opt/letsencrypt/letsencrypt-auto certonly --nginx --renew-by-default --agree-tos -m admin[:at:]foolegg.com -d foolegg.com -d www.foolegg.com
只需要配合「crontab」的使用,便可自動更新證書。
-
如果有任何錯誤,也可以執行以下手動建立 SSL 證書的指令以更新證書。
1
/opt/letsencrypt/letsencrypt-auto certonly --standalone
更新 Let’s Encrypt 客戶端
-
由於使用了 Git 來管理 Let’s Encrypt 客戶端,只需要執行下面的命令就可以更新。
1 2
cd /opt/letsencrypt sudo git pull