天天看點

快速簽發Let's Encrypt證書指南

本文僅記錄給自己的網站添加“小綠鎖”的動手操作過程,不涉及HTTPS工作原理等内容的講解,感興趣的同學可以參考篇尾的文章自行了解。

簡單了解下我的實驗環境:

  • 雲伺服器:CentOS 7.4
  • 網站宿主:Nginx 1.12.2
  • 備案域名: www.esofar.cn

這裡以

www.esofar.cn

作為示範域名,屆時一定要修改為自己的域名。

什麼是 Let's Encrypt

快速簽發Let's Encrypt證書指南
Let's Encrypt

是一個由非營利性組織

網際網路安全研究小組

(ISRG)提供的免費、自動化和開放的證書頒發機構(CA)。

簡單的說,借助Let's Encrypt頒發的證書可以為我們的網站免費啟用HTTPS(SSL/TLS) 。

Let's Encrypt免費證書的簽發/續簽都是腳本自動化的,官方提供了幾種證書的申請方式方法,

點選此處

快速浏覽。

官方推薦使用

Certbot

用戶端來簽發證書,這種方式可參考文檔自行嘗試,不做評價。

我這裡直接使用第三方用戶端

acme.sh

申請,據了解這種方式可能是目前Let's Encrypt免費證書用戶端最簡單、最智能的 shell 腳本,可以自動釋出和續訂Let's Encrypt中的免費證書。

安裝acme.sh

安裝很簡單,一條指令:

curl https://get.acme.sh | sh           

整個安裝過程進行了以下幾步,了解一下即可:

  1. 把acme.sh安裝到目前使用者的主目錄

    $HOME

    下的

    .acme.sh

    檔案夾中,即

    ~/.acme.sh/

    ,之後所有生成的證書也會放在這個目錄下;
  2. 建立了一個指令别名

    alias acme.sh=~/.acme.sh/acme.sh

    ,這樣我們可以通過

    acme.sh

    指令友善快速地使用acme.sh腳本;
  3. 自動建立

    cronjob

    定時任務, 每天0:00點自動檢測所有的證書,如果快過期了,則會自動更新證書。

安裝指令執行完畢後,執行

acme.sh --version

确認是否能正常使用

acme.sh

指令。

https://github.com/Neilpang/acme.sh
v2.7.9           

如有版本資訊輸出則表示環境正常;如果提示指令未找到,執行

source ~/.bashrc

指令重載一下環境配置檔案。

整個安裝過程不會污染已有的系統任何功能和檔案,所有的修改都限制在安裝目錄

~/.acme.sh/

中。

生成證書

據 acme.sh 官方文檔介紹,其實作了

acme

協定支援的所有驗證協定,一般有兩種方式驗證:http 和 dns 驗證。

也就是我們有兩種選擇簽發證書,這裡我直接選擇 http 驗證方式,另外一種方式本篇不做介紹,可參考文檔自行嘗試。

簽發證書也很簡單,一條指令:

acme.sh --issue -d esofar.cn -d www.esofar.cn -w /home/wwwroot/esofar.cn           

簡單解釋下這條指令涉及的幾個參數:

  • --issue

    是acme.sh腳本用來頒發證書的指令;
  • -d

    --domain

    的簡稱,其後面須填寫已備案的域名;
  • -w

    --webroot

    的簡稱,其後面須填寫網站的根目錄。

證書簽發成功會有如下輸出:

快速簽發Let's Encrypt證書指南
快速簽發Let's Encrypt證書指南

從截圖看出,生成的證書放在了

/root/.acme.sh/esofar.cn

目錄。

另外,可以通過下面兩個常用

acme.sh

指令檢視和删除證書:

# 檢視證書清單
acme.sh --list 

# 删除證書
acme.sh remove <SAN_Domains>           

至此,證書就下載下傳成功。

安裝證書

我的站點是由Nginx承載的,是以本節内容重點記錄如何将證書安裝到Nginx,其他 webserver 請參考 acme.sh 文檔自行實踐。廢話不多說,進入本節正題。

上一小節,生成的證書放在了

/root/.acme.sh/esofar.cn

目錄,因為這是acme.sh腳本的内部使用目錄,而且目錄結構可能會變化,是以我們不能讓Nginx的配置檔案直接讀取該目錄下的證書檔案。

正确的做法就是使用

--installcert

指令,指定目标位置,然後證書檔案會被copy到相應的位置。

一條指令即可解決:

acme.sh  --installcert -d esofar.cn \
         --key-file /etc/nginx/ssl/esofar.cn.key \
         --fullchain-file /etc/nginx/ssl/fullchain.cer \
         --reloadcmd "service nginx force-reload"           

這裡我将證書放到了

/etc/nginx/ssl/

目錄下。

輸出如下資訊,則操作成功:

快速簽發Let's Encrypt證書指南

最後一步就是,修改Nginx配置檔案啟用ssl,修改完成後需要重新開機下Nginx,這一塊不再詳述。Nginx配置請參考:

server {
        listen 443 ssl;
        server_name esofar.cn;
        
        ssl on;
        ssl_certificate      /etc/nginx/ssl/fullchain.cer;
        ssl_certificate_key  /etc/nginx/ssl/esofar.cn.key;

        root /home/wwwroot/esofar.cn;
        index index.html;
    
        location / {
            try_files $uri $uri/ @router;
            index index.html;
        }
    
        location @router {
            rewrite ^.*$ /index.html last;
        }
    }
    
    server {
        listen 80;
        server_name esofar.cn;
        return 301 https://$server_name$request_uri;
    }           

完成證書部署後可以通過如下站點檢測網站的安全級别:

更新證書

目前Let's Encrypt的證書有效期是90天,時間到了會自動更新,您無需任何操作。 今後有可能會縮短這個時間, 不過都是自動的,不需要您關心。

但是,您也可以強制續簽證書:

acme.sh --renew -d example.com --force           

更新 acme.sh

目前由于 acme 協定和 letsencrypt CA 都在頻繁的更新, 是以 acme.sh 也經常更新以保持同步。

更新 acme.sh 到最新版:

acme.sh --upgrade           

如果您不想手動更新,,可以開啟自動更新:

acme.sh  --upgrade  --auto-upgrade           

您也可以随時關閉自動更新:

acme.sh --upgrade  --auto-upgrade  0           

相關閱讀

我的部落格即将入駐“雲栖社群”,誠邀技術同仁一同入駐。