透過 acme.sh 產生 HTTPS 憑證。

什麼是 acme.sh?

acme.sh 是一個開源 Shell 腳本,用於自動產生和管理 HTTPS 憑證。

安裝

curl https://get.acme.sh | sh -s [email protected]

安裝後,acme.sh 將出現在您的主目錄中。

~/.acme.sh

執行以下命令使acme.sh的環境變數生效。

source ~/.basrc

生成证书

在產生憑證之前,acme.sh 需要驗證您對網域的所有權。驗證方式有以下幾種:

HTTP 驗證

Apache

如果您使用的是 Apache 伺服器。

acme.sh --issue -d mydomain.com --apache

Nginx服务器

如果您使用的是 nginx 伺服器。

acme.sh --issue -d mydomain.com --nginx

將檔案新增至網站根目錄。

你也可以告訴acme.sh你網站的根目錄,acme.sh會自動加入一個檔案來驗證。

acme.sh --issue -d mydomain.com --webroot /path-to-the-webroot-of-the-site

DNS 驗證

手動添加記錄

执行命令

acme.sh --issue --dns -d mydomain.com --yes-I-know-dns-manual-mode-enough-go-ahead-please

然后,acme.sh 會產生對應的解析記錄並顯示。您只需在網域管理面板中新增此 TXT 記錄即可。

然后重新生成证书

acme.sh --renew -d mydomain.com --yes-I-know-dns-manual-mode-enough-go-ahead-please

透過 DNS 服務提供者 API 進行驗證。

這應該是最常用和推薦的驗證方式。以CloudFlare為例,請參考https://github.com/acmesh-official/acme.sh/wiki/dnsapi 用於申請其他服務提供者的證書。

申請API。

您可以在Cloudflare个人资料页面的全局API密钥下获取您的全局API密钥。API令牌部分。點擊全域 API 金鑰旁邊的“檢視”,驗證您的 Cloudflare 密碼,它將顯示給您。它是一個 32 個字元的十六進位字串,您必須透過設定環境變數將其提供給 acme.shCF_Key 到它的價值。您還必須設定CF_Email 發送至與您的 Cloudflare 帳戶關聯的電子郵件地址;這是您登入 Cloudflare 時輸入的電子郵件地址。例如:

export CF_Key="763eac4f1bcebd8b5c95e9fc50d010b4"
export CF_Email="[email protected]"

產生證書。

acme.sh --issue --dns dns_cf -d example.com -d '*.example.com'

查看证书文件

證書產生後,您可以造訪~/.acme.sh/mydomain.com_ecc查看證書檔案。fullchain.cer是证书文件和mydomain.io.key 是私鑰檔案。它們都是文字文件,可以在網站配置過程中上傳到 i18n.so。

acme.sh使用過程中的常見問題

CA

acme.sh 現在預設使用 ZeroSSL 作為 CA,但經常遇到可訪問性問題。您可以使用以下命令將 CA 切換到 Let's Encrypt。

acme.sh --set-default-ca --server letsencrypt

產生通配符域憑證。

假设您想申请适用于的证书example.com*.example.com,您可以使用下列命令產生通配符域憑證。

acme.sh -d example.com -d *.example.com

证书续期

acme.sh產生憑證後,會新增一個crontab定時任務,定期更新憑證。可以使用以下指令查看定時任務,更新的內容也保存在~/.acme.sh/mydomain.com_ecc

crontab -e