本文以demo.example.com爲例,詳細介紹了使用acme.sh進行ssl申請和自動續約的方法
安裝
只需要用任意用戶執行
curl https://get.acme.sh | sh
acme.sh 會安裝到 ~/.acme.sh/
目錄下,並創建新的自動計劃(cronjob)在凌晨0點檢查所有證書
生成證書的方式主要有三種
- 網站文件方式,適合於已經部署好
apache
或是nginx
服務器的情況 - 臨時監聽80端口方式,適合於沒有部署好服務的服務器
- 手動配置DNS,需要有手動配置DNS的權限,適合沒有服務器或是不想更改服務器的情況
1.文件認證
acme.sh --issue -d <域名> --webroot <網站根目錄>
acme.sh --issue -d demo.example.com --webroot /home/wwwroot/demo.example.com/
2.暫時監聽80端口
yum install socat
acme.sh --issue -d demo.example.com --standalone
3. DNS方式
手動方式
首先獲得認證需要的解析記錄
acme.sh --issue --dns -d demo.example.com
然後在DNS服務商中添加記錄
最後重新生成證書
acme.sh --renew -d demo.example.com
使用這種方式 acme.sh 將無法自動更新證書,每次都需要手動再次重新解析驗證域名所有權。
自動方式
dns 方式的真正強大之處在於可以使用域名解析商提供的 api 自動添加 txt 記錄完成驗證
首先需要在雲上申請有DNS配置權限的賬號密碼
騰訊雲
參考:
操作方法
在dnspod官網上申請
https://www.dnspod.cn/Login?r=/console
然後登錄遠程服務器
export DP_Id="1234"
export DP_Key="sADDsdasdgdsf"
acme.sh --issue --dns dns_dp -d demo.example.com
阿里雲
參考:
操作方法
在阿里雲官網登錄添加擁有DNS配置權限的子賬戶 https://ram.console.aliyun.com/overview
然後登錄遠程服務器
export Ali_Key="AccessKeyId"
export Ali_Secret="AccessKeySecret"
acme.sh --issue --dns dns_ali -d demo.example.com
證書的安裝
默認生成的證書都放在安裝目錄下: ~/.acme.sh/
需要將證書“拷貝”到自定義位置,方便配置,這裏的複製需要用acme.sh的自帶工具用於日後自動更新
acme.sh --installcert -d demo.example.com \
--key-file /usr/local/nginx/ssl/demo_example_com.key \
--fullchain-file /usr/local/nginx/ssl/demo_example_com.cer \
--reloadcmd "/usr/local/nginx/sbin/nginx -s reload"
apache服務器的配置
暫無
nginx服務器的配置
nginx 設置類似如下
server {
listen 443 ssl;
ssl on;
ssl_certificate /usr/local/nginx/ssl/demo_example_com.cer; # 這裏指向證書安裝的位置
ssl_certificate_key /usr/local/nginx/ssl/demo_example_com.key;
}
讓你的SSL更安全
參考:https://mikemiao111.com/nginx%E5%A2%9E%E5%BC%BAhttps%E5%AE%89%E5%85%A8%E9%85%8D%E7%BD%AE/
nginx默認採用1024位的加密算法,如果需要的話可以使用2048位的代替,這樣可以讓加密更安全
首先生成 zjk_zoollcar_top.pem 文件到指定目錄
openssl dhparam -out /usr/local/nginx/ssl/demo_example_com.pem 2048
然後在nginx配置文件中設置
server {
listen 443 ssl;
ssl on;
ssl_certificate /usr/local/nginx/ssl/demo_example_com.cer;
ssl_certificate_key /usr/local/nginx/ssl/demo_example_com.key;
ssl_dhparam /usr/local/nginx/ssl/demo_example_com.pem; #新增
}
可以用下面的網站測試SSL安全性
https://www.ssllabs.com/ssltest/
更新 acme.sh
目前由於 acme 協議和 letsencrypt CA 都在頻繁的更新, 因此 acme.sh 也經常更新以保持同步.
升級 acme.sh 到最新版 :
acme.sh --upgrade
如果不想手動升級, 可以開啓自動升級:
acme.sh --upgrade --auto-upgrade
之後, acme.sh 就會自動保持更新了.
你也可以隨時關閉自動更新:
acme.sh --upgrade --auto-upgrade 0