Use acme.sh to get certificate
Published by powerfulyang on Dec 13, 2021
Install from web
1curl https://get.acme.sh | sh
Example for Tencent Cloud (DNSPod)
- click to generate secret key
- use this script to get cert and add hook when certificate has renewed to reload your web server
1export DP_Id="1234" // get from https://console.dnspod.cn/account/token
2export DP_Key="sADDsdasdgdsf"
3acme.sh --issue --dns dns_dp -d example.com \n
4 -d *.example.com --renew-hook "command to reload your web server"
使用 acme.sh 生成 Cloudflare 域名证书
- 登录到你的 Cloudflare 账户,然后导航到 "Profile" -> "API Tokens"。
- 点击 "Create Token"。
- Use
Edit zone DNS
template - 点击 "Continue to Summary",然后点击 "Create Token"。
- 在下一页,你将看到你的新 Token。复制并保存好这个 Token,因为一旦离开这个页面,你就无法再看到它。
然后,在你的终端里设置这个 API Token:
1export CF_Token="你的 API Token"
然后你就可以使用 acme.sh 来申请 SSL 证书了:
1acme.sh --issue --dns dns_cf -d yourdomain.com -d *.yourdomain.com
一些相关的小事情
acme.sh 默认 CA 切换到 ZoreSSL
改回到Let's Encrypt
1acme.sh --set-default-ca --server letsencrypt
有时候 corncob 会失败
1acme.sh --cron --home ~/.acme.sh
查看日志, 类似如下内容。
1[2021年 12月 14日 星期二 10:56:23 CST] ===Starting cron===
2[2021年 12月 14日 星期二 10:56:23 CST] Renew: 'powerfulyang.com'
3[2021年 12月 14日 星期二 10:56:23 CST] Skip, Next renewal time is: 2021年 12月 24日 星期五 10:23:57 UTC
4[2021年 12月 14日 星期二 10:56:23 CST] Add '--force' to force to renew.
5[2021年 12月 14日 星期二 10:56:23 CST] Skipped powerfulyang.com
6[2021年 12月 14日 星期二 10:56:23 CST] ===End cron===
报错 zsh: no matches found: *.yourdomain.com
遇到的问题是由于 Zsh 的 globbing 特性导致的。Zsh 默认启用了 globbing,这意味着它会尝试将 *.yourdomain.com
当做通配符去匹配本地的文件名。当没有文件匹配时,它就会报出 no matches found
的错误。
要解决这个问题,你可以在命令中使用引号来禁止 globbing:
1acme.sh --issue --dns dns_cf -d yourdomain.com -d "*.yourdomain.com"
或者,你也可以临时禁止 globbing:
1setopt NO_NOMATCH
2acme.sh --issue --dns dns_cf -d yourdomain.com -d *.yourdomain.com
3setopt NOMATCH
这样,*.yourdomain.com
就会被正确地当做字符串处理,而不是文件名通配符。