Let's encrypt 的 certbot 常常會遇到更新失敗,然後需要重新產生的流程
使用 acme.sh + api 都可以自己去更新,比較省事~~
使用 acme.sh 來產生 HTTPS CA 憑證
ACME.sh 的文件
- 官方 GitHub:acmesh-official/acme.sh: A pure Unix shell script implementing ACME client protocol
- acme.sh 安裝
- acme.sh 操作
- acme.sh Home · GitHub
- 若不使用 root 來操作的話,可以參考此篇: (使用 root 來做比較省事)
- sudo · acmesh-official/acme.sh Wiki · GitHub
- acme.sh 使用 DNS API
- 開 Cloudflare 的 API 權限,就可以讓他自動用 DNS 認證
- dnsapi · GitHub
- acme.sh 使用 DNS API
- 使用 Docker 的 acme.sh 操作方式
ACME.sh 安裝
- sudo apt install socat git
- sudo su - # 先使用 root 來操作
- wget -O - https://get.acme.sh | sh -s [email protected] # or $ curl https://get.acme.sh | sh -s [email protected]
- 自動新增下述:
- /root/.acme.sh
- /root/.acme.sh/acme.sh
- /root/.bashrc # 最下面被加入此行
- . "/root/.acme.sh/acme.sh.env"
- crontab -u root -l # 可以看到被加入此行
- 36 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null
- 自動新增下述:
- Cloudflare DNS 管理下方 (取得 Cloudflare API token)
- 取得您的 API Token
- 找到Global API Key # 找到 key 即可,Email 是 Cloudflare 登入帳號
- vim ~/.bashrc # 在 36 0 * * * "/root/.acme.sh"/acme.sh 上面加上
- export CF_Key="Your_CloudFlare_API_Key"
- export CF_Email="[email protected]"
- source ~/.bashrc
- 產生憑證 (使用 DNS 挑其一即可)
- 範例:單一 Domain:acme.sh --issue -d example.com
- 範例:多重 Domain:acme.sh --issue -d example.com -d www.example.com -d cp.example.com -w /home/wwwroot/example.com
- 實際操作使用:
- acme.sh --issue --dns dns_cf -d example.com -d www.example.com -d cp.example.com
- acme.sh --issue --dns dns_cf -d example.com -d *.example.com
- acme.sh --issue --dns dns_cf --server letsencrypt -d example.com -d *.example.com # 使用 letsencrypt
- acme.sh --issue --dns dns_cf --server letsencrypt -d example.com -d *.example.com -k 4096 # RSA 金鑰長度可用:2048, 3072, 4096, 8192
- acme.sh --issue --dns dns_cf --server letsencrypt -d example.com -d *.example.com -k ec-384 # ECC/ECDSA 金鑰長度可用:ec-256, ec-384, ec-521
- 更多產生憑證的方式:
- Apache:
- acme.sh --issue --apache -d example.com -d www.example.com -d cp.example.com
- Nginx:
- acme.sh --issue --nginx -d example.com -d www.example.com -d cp.example.com
- DNS Mode:
- acme.sh --issue --dns dns_cf -d example.com -d www.example.com -d cp.example.com
- Wildcard:
- acme.sh --issue -d example.com -d '*.example.com' --dns dns_cf
- 預設產生的憑證:ZeroSSL.com CA(default),若想要改成 Let's Encrypt
- acme.sh --set-default-ca --server letsencrypt # 若想將 default 設定到 letsencrypt 的話
- Apache:
- 自動產生憑證到 Nginx or Apache
- Nginx
- mkdir /etc/nginx/ssl.crt
- acme.sh --install-cert -d example.com \
- --key-file /etc/nginx/ssl.crt/example.com.key.pem \
- --fullchain-file /etc/nginx/ssl.crt/example.com.fullchain.pem \
- --reloadcmd "service nginx reload"
- Apache
- mkdir /etc/apache2/ssl.crt
- acme.sh --install-cert -d example.com \
- --cert-file /etc/apache2/ssl.crt/example.com.cert.pem \
- --key-file /etc/apache2/ssl.crt/example.com.key.pem \
- --ca-file /etc/apache2/ssl.crt/example.com.ca.pem \
- --fullchain-file /etc/apache2/ssl.crt/example.com.fullchain.pem \
- --reloadcmd "service apache2 reload"
- Nginx
- 更新憑證(renew)
- acme.sh --renew -d example.com --force
- 更多功能:
- 讓 acme.sh 自動升級
- acme.sh --upgrade --auto-upgrade
- 移除 Domain 憑證:
- acme.sh --remove -d example.com
- 讓 acme.sh 自動升級