Let's Encrypt
是一個免費、開放,自動化的證書頒發機構。html若是咱們要啓用
HTTPS
,就須要從證書受權機構(如下簡稱 CA ) 處獲取一個證書,Let's Encrypt
就是一個 CA。本文是 Debian 8 + Nginx 下的配置過程。nginx
Let's Encrypt 官方 推薦咱們使用 certbot 客戶端web
注:letsencrypt
或者 letsencrypt-auto
這種方式從2016年5月開始已通過時了。服務器
certbot
客戶端要求安裝 Python
要有 root
權限ide
如上圖,咱們在 certbot 的官網選擇本身使用的服務器和操做系統。網站就會給出對應的安裝文檔。微服務
安裝客戶端post
sudo apt-get install certbot -t jessie-backports
證書的獲取有兩種方式測試
第一種,web
服務器已經在運行了,不能關閉端口和服務器,可使用 --webroot
模式網站
sudo certbot certonly --webroot -w /var/www/example -d example.com --agree-tos --email 你的@郵箱.com
這個命令會爲
example.com
域名生成一個證書,使用 --webroot 模式會在/var/www/example
中建立.well-known
文件夾,這個文件夾裏面包含了一些驗證文件,letsencrypt
會經過訪問example.com/.well-known/acme-challenge
來驗證你的域名是否綁定的這個服務器。--agree-tos
參數是你贊成他們的協議。spa
第二種,若是咱們的項目沒有根目錄,只是一個微服務,可使用 --standalone
模式。
這種模式會自動啓用服務器的 443 端口,來驗證域名的歸屬。咱們有其餘服務(例如nginx)佔用了443端口,就必須先中止這些服務,在證書生成完畢後,再啓用。
sudo certbot certonly --standalone -d example.com --agree-tos --email 你的@郵箱.com
證書生成目錄在 /etc/letsencrypt/live/
,該目錄下能夠看到對應域名的文件夾,裏面存放了指向證書的一些快捷方式。
證書申請成功後會提示證書的文件路徑,以及證書到期時間:
IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at /etc/letsencrypt/live/example.com/fullchain.pem. Your cert will expire on 2018-02-08. To obtain a new version of the certificate in the future, simply run Let's Encrypt again. - 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
server { server_name example.com www.example.com; listen 443; ssl on; ssl_certificate /etc/letsencrypt/live/diamondfsd.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/diamondfsd.com/privkey.pem; location / { proxy_pass http://localhost:4000; } }
重啓 Nginx
服務就可使用 https
了
Let's Encrypt
提供的證書只有 90 天的有效期,咱們必須在證書到期以前,從新獲取這些證書。
咱們能夠在服務器添加一個 crontab
定時任務來處理
crontab -e
注:若是要執行的腳本須要 root
權限, 那就用 root
用戶建立 crontab
添加下面的內容
10 1 * */2 * certbot renew --pre-hook "systemctl stop nginx" --post-hook "systemctl start nginx"
這個 cron
計劃,意思是 每隔兩個月的凌晨 1:10 執行更新操做。
--pre-hook
這個參數表示執行更新操做以前要作的事情,由於我用的 --standalone
模式的證書,因此須要中止 nginx
服務,解除端口占用。
--post-hook
這個參數表示執行更新操做完成後要作的事情,這裏就恢復 nginx
服務的啓用。
使用 ssllabs 在線測試服務器證書強度及配置正確性