Certbot配置免費的泛域名 SSL證書

淺安時光發表於2021-05-07

下載certbot-auto

wget https://dl.eff.org/certbot-auto
如果是基於Debian或RHEL的系統會安裝失敗,採用另一種安裝方式snap

首先進行安裝依賴等配置
yum install epel-release                             //安裝epel
yum install snapd                                      //安裝snapd
systemctl enable --now snapd.socket     //啟用snapd.socket
ln -s /var/lib/snapd/snap /snap               //建立軟連結
snap install --classic certbot                  //安裝certbot
ln -s /snap/bin/certbot /usr/bin/certbot //建立certbot軟連結
如果之前安裝過Certbot出現了問題,可以進行重灌

yum remove certbot                              //解除安裝certbot
rm /usr/local/bin/certbot-auto              //刪除安裝檔案
rm -rf /opt/eff.org/certbot

nginx檢查是否開啟http_ssl_module模組

不開啟會出現nginx: [emerg] the "ssl" parameter requires ngx_http_ssl_module in /usr/local/nginx/conf/nginx.conf
透過 nginx -V檢視是否開啟該模組,如果沒有開啟,執行下面步驟開啟(關閉 nginx,否則會出現 80 埠占用問題)
cd /usr/local/src/nginx
./configure --prefix=/usr/local/nginx --with-http_flv_module  --with-http_ssl_module   //安裝ssl模組
make # make安裝,這裡不要像以前一樣 make&make install 否則會覆蓋原有目錄
cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak  //nginx做原有備份
nginx -V    //檢視模組是否安裝成功
sudo systemctl start nginx //執行 nginx

執行命令生成證照

sudo certbot certonly  -d "*.xxx.com" -d xxxx.com --manual --preferred-challenges dns-01  --server https://acme-v02.api.letsencrypt.org/directory(需要手動新增 txt 解析)
或者
sudo certbot certonly   -d "*.xxx.com" -d xxxx.com --manual --preferred-challenges dns --manual-auth-hook "/etc/letsencrypt/renwal-hook/au.sh php aly add" --manual-cleanup-hook "/etc/letsencrypt/renwal-hook/au.sh php aly clean"(透過指令碼呼叫域名解析 api,自動解析)
證照目錄在/etc/letsencryp下

配置 nginx 配置檔案

  listen                               [::]:443 ssl http2;
    location / {
        return 301 https://$host$request_uri; 
    }
    ssl_session_timeout  1d;
    ssl_session_cache    shared:SSL:10m;
    ssl_session_tickets  off;
    ssl_protocols        TLSv1.2 TLSv1.3;
    ssl_certificate                      /home/www/letsencrypt/live/xxx.com/fullchain.pem;
    ssl_certificate_key                  /home/www/letsencrypt/live/xxxx.com/privkey.pem;
    ssl_trusted_certificate              /home/www/letsencrypt/live/xxxx.com/chain.pem;
        eturn                  301 https://www.uchelian.com$request_uri;
        重啟 nginx,檢視網站證照是否配置成功

證照自動續簽

因為證照只有三個月有效期,避免每三個月進行手動申請,對系統進行自動續簽操作
git clone https://github.com/ywdblog/certbot-letencrypt-wildcardcertificates-alydns-au
cd certbot-letencrypt-wildcardcertificates-alydns-au
chmod 0777 au.sh

domain.ini檔案新增您的根域名

配置DNS API 金鑰,由於需要透過 API 操作阿里雲 DNS, 騰訊雲 DNS 的記錄,所以需要去域名服務商哪兒獲取 API 金鑰,然後配置在 au.sh 檔案中:
ALY_KEYALY_TOKEN[阿里雲 API key 和 Secrec 官方申請文件](https://help.aliyun.com/knowledge_detail/38738.html)TXY_KEYTXY_TOKEN[騰訊雲 API 金鑰官方申請文件](https://console.cloud.tencent.com/cam/capi)HWY_KEYHWY_TOKEN: [華為雲 API 金鑰官方申請文件](https://support.huaweicloud.com/devg-apisign/api-sign-provide.html)
GODADDY_KEYGODADDY_TOKEN[GoDaddy API 金鑰官方申請文件](https://developer.godaddy.com/getstarted)。

目前該工具支援五種執行環境和場景,透過 hook 檔案和引數來呼叫:
PHP(>4以上版本均可)
au.sh php aly add/clean:PHP操作阿里雲DNS,增加/清空DNS。
au.sh php txy add/clean:PHP操作騰訊雲DNS,增加/清空DNS。
au.sh php godaddy add/clean:PHP操作GoDaddy DNS,增加/清空DNSPython(支援2.73.7,無需任何第三方庫)
au.sh python aly add/clean:Python操作阿里雲DNS,增加/清空DNS。
au.sh python txy add/clean:Python操作騰訊雲DNS,增加/清空DNS。
au.sh python hwy add/clean:Python操作華為雲DNS,增加/清空DNS。
au.sh python godaddy add/clean:Python操作GoDaddy DNS,增加/清空DNS。
根據自己伺服器環境和域名服務商選擇任意一個 hook shell(包含相應引數),具體使用見下面。

證照有效期<30天才會renew,所以crontab可以配置為1天或11 1 */1 * * root certbot-auto renew --manual --preferred-challenges dns  --manual-auth-hook "/指令碼目錄/au.sh php aly add" --manual-cleanup-hook "/指令碼目錄/au.sh php aly clean"
本作品採用《CC 協議》,轉載必須註明作者和本文連結
hmlSunShine

相關文章