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

說在前面

本文僅記錄給本身的網站添加「小綠鎖」的動手操做過程,不涉及 HTTPS 工做原理等內容的講解,感興趣的同窗能夠參考篇尾的文章自行了解。html

簡單瞭解下個人實驗環境:nginx

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

這裏以www.esofar.cn做爲演示域名,屆時必定要修改成本身的域名。git

什麼是 Let's Encrypt

Let's Encrypt

Let's Encrypt 是一個由非營利性組織 互聯網安全研究小組(ISRG)提供的免費、自動化和開放的證書頒發機構(CA)。github

簡單的說,藉助 Let's Encrypt 頒發的證書能夠爲咱們的網站免費啓用 HTTPS(SSL/TLS) 。web

Let's Encrypt免費證書的簽發/續簽都是腳本自動化的,官方提供了幾種證書的申請方式方法,點擊此處 快速瀏覽。shell

官方推薦使用 Certbot 客戶端來簽發證書,這種方式可參考文檔自行嘗試,不作評價。安全

我這裏直接使用第三方客戶端 acme.sh 申請,據瞭解這種方式多是目前 Let's Encrypt 免費證書客戶端最簡單、最智能的 shell 腳本,能夠自動發佈和續訂 Let's Encrypt 中的免費證書。bash

安裝 acme.sh

安裝很簡單,一條命令:服務器

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

整個安裝過程進行了如下幾步,瞭解一下便可:dom

  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的簡稱,其後面須填寫網站的根目錄。

證書籤發成功會有以下輸出:

Cert1
Cert2

從截圖看出,生成的證書放在了/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/目錄下。

輸出以下信息,則操做成功:

Install Cert

最後一步就是,修改 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

相關閱讀

相關文章
相關標籤/搜索