通過acme.sh申請Let's Encrypt泛解析SSL證書


1、Let's Encrypt

申請過SSL證書的人應該對Let's Encrypt這個證書頒發機構不陌生,它免費,而且也被各大瀏覽器所支持和認可.但一般我們申請到的都單域或雙域(www和主域名)的證書.這樣一來,我們需要做全站SSL的工作量就會超級大!有沒有一個辦法,像DNS解析一樣,用*.staryjie.com的方式,讓全站共用一個SSL證書。

2、安裝acme.sh

acme.sh是一個實現了 acme 協議的腳本,可以從 Let's Encrypt 生成我們需要的泛解析SSL證書.當然,你用來生產普通證書也是沒有問題的。

本文僅對使用域名提供/解析商的 API Token 來自動申請泛域名證書的過程進行講解,acme.sh還有很多很強大的功能例如配合 Nginx 或者 Apache 自動申請證書等,請自行查看 github 項目 wiki 發掘。

項目鏈接:Github - acme.sh

安裝方法:

curl https://get.acme.sh | sh
# 或者
wget -O- https://get.acme.sh | sh

安裝過程中可能會出現要你安裝socat的警告,可以忽略。

安裝過程不會修改已有的任何系統功能和文件,請放心食用. acme.sh在程序結束后會被自動安裝到~/.acme.sh/目錄中,你也可以隨時刪除該目錄,不會影響到系統。

3、獲取API Token

由於acme.sh對域名解析/提供商的支持十分廣泛,所以請針對自己所在的域名提供商獲取對應的API Token。
支持列表:點我跳轉

國內目前使用較多的是騰訊雲和阿里雲,獲取API Token的方法分別是:

  • 騰訊的DNSPod

    登錄DNSPod,進入頂部導航欄里的用戶中心,在左側的導航欄里,找到安全設置,看到頁面的最下面,有個API Token.點擊查看->創建API Token->填寫Tokens名稱,復制好ID與Token即可.保存待用。

  • 阿里雲域名

    需要登錄到阿里雲官網獲取Ali_Key和Ali_Secret。點擊此處跳轉

4、配置acme.sh

獲取到對應的API Token之后我們需要將id和key設置為環境變量,供acme.sh調用:

# DNSPod
export DP_Id="你的 API ID"
export DP_Key="你的 Token"

# aliyun
export Ali_Key="你的 AccessKey ID"
export Ali_Secret="你的 AccessKey Secret"

如果你的域名提供商不是DNSPod或者阿里雲,其他域名提供商變量名一覽表:點我查看

臨時環境變量只需配置這一次即可,當成功申請證書后,API 信息會被自動保存在~/.acme.sh/account.conf里,下次你使用acme.sh的時候系統會自動讀取並使用。

5、申請泛域名解析證書

# DNSPod
cd ~/.acme.sh/
# 或者 alias acme.sh=~/.acme.sh/acme.sh
acme.sh --issue -d example.com -d *.example.com --dns dns_dp
# 多個域名只需要"-d 你的域名"即可

# aliyun
cd ~/.acme.sh/
# 或者 alias acme.sh=~/.acme.sh/acme.sh
acme.sh --issue --dns dns_ali -d example.com -d *.example.com

注意:不同的域名解析商所用命令有細微不同!如果你的提供商不是DNSPod,請自行去上面的鏈接查看!

申請完成后屏顯會輸出證書路徑。

20210501124811-2mK1oY

可能會遇到的報錯:

20210501121057-sne73N

解決辦法:

# 升級curl
yum install -y curl

如果升級curl之后還是如上圖的報錯,則可以嘗試修改域名的DSN設置:

20210501121606-HYUcyR

修改之后需要等十分鍾左右。

6、將證書安裝到指定的目錄

默認生成的證書都放在安裝目錄下: ~/.acme.sh/,這個目錄一般來說不能讓nginx或Apache直接使用。所以我們需要將證書放到一個指定的目錄,scrm用nginx配置,本例是指定在/etc/nginx/ssl/目錄下。

mkdir /etc/nginx/ssl

acme.sh --installcert -d staryjie.com \
             --keypath       /etc/nginx/ssl/staryjie.com.key  \
             --fullchainpath /etc/nginx/ssl/staryjie.com.key.pem \
             --reloadcmd     "service nginx force-reload"

20210501124851-H0e4yz

7、配置NGINX使用證書

7.1 生成 dhparam.pem 文件

openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048

20210501131355-zVoOl5

7.2 修改nginx配置文件

/etc/nginx/conf.d/bark.conf

server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        listen       443 ssl;
        server_name notice.staryjie.com;

        ssl_certificate     /etc/nginx/ssl/staryjie.com.key.pem;
        ssl_certificate_key /etc/nginx/ssl/staryjie.com.key;

        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        ssl_dhparam /etc/nginx/ssl/dhparam.pem;

        location / {
            proxy_pass_header Server;
            proxy_set_header Host $http_host;
            proxy_redirect off;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Scheme $scheme;  
            proxy_pass http://127.0.0.1:8888;
        }
}

重載配置文件:

systemctl reload nginx.service

測試:

20210501130637-FcmKPt

8、證書更新

Let s Encrypt 的證書有效期是 90 天的,需要定期重新申請,不過acme在安裝的時候就已經設置了自動更新,所以這一步不用關心,很省心。

目前證書在 60 天以后會自動更新, 你無需任何操作. 今后有可能會縮短這個時間, 不過都是自動的, 你不用關心。

9、acme.sh的自動更新

acme.sh --upgrade --auto-upgrade

關閉自動更新:

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

10、參考


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM