啓用 https 簡單免費的 Let's Encrypt SSL證書配置

Let's Encrypt簡介

Let's Encrypt 是一個免費、開放,自動化的證書頒發機構。html

若是咱們要啓用 HTTPS,就須要從證書受權機構(如下簡稱 CA ) 處獲取一個證書,Let's Encrypt 就是一個 CA。本文是 Debian 8 + Nginx 下的配置過程。nginx

Let's Encrypt 安裝

Let's Encrypt 官方 推薦咱們使用 certbot 客戶端web

注:letsencrypt 或者 letsencrypt-auto 這種方式從2016年5月開始已通過時了。服務器

certbot 客戶端要求安裝 Python 要有 root 權限ide

clipboard.png

如上圖,咱們在 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

Nginx 配置

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 服務的啓用。

驗證 https

使用 ssllabs 在線測試服務器證書強度及配置正確性

參考擴展

Let's Encrypt 使用教程,免費的SSL證書,讓你的網站擁抱 HTTPS

相關文章
相關標籤/搜索