先决条件:首先我们需要有一个域名和一台有公网IP的服务器
然后需要给该域名添加一个A指向到IPV4地址,否则生成证书时会无法解析域名
安装acme.sh
curl https://get.acme.sh | sh -s [email protected]
启用别名
source ~/.bashrc
说明:
acme.sh 会安装到 ~/.acme.sh 目录下。安装成功后执行 source ~/.bashrc
以确保脚本所设置的命令别名生效。
说明:普通用户和 root 用户都可以安装使用. 安装过程进行了以下几步:
1.把 acme.sh 安装到你的 home 目录下: ~/.acme.sh/ ,并创建 一个 shell 的 alias, 例如 .bashrc,方便你的使用: alias acme.sh=~/.acme.sh/acme.sh
2.自动为你创建 cronjob, 每天 0:00 点自动检测所有的证书, 如果快过期了, 需要更新, 则会自动更新证书。
3.记得安装时带上邮箱,后面申请证书可能报错,如果报错卸载acme.sh,重新安装即可
查看帮助信息
acme.sh -h
卸载acme.sh
acme.sh --uninstall
切换CA机构
acme.sh --set-default-ca --server letsencrypt
说明:
acme.sh 支持四个正式环境 CA,分别是 Let’s Encrypt、Buypass、ZeroSSL 和 SSL.com,默认使用 ZeroSSL。
生成证书
acme.sh --issue -d example.com --standalone --keylength ec-256 --force
说明:
1. --standalone 模式下默认使用80端口,如果80端口被占用,添加 --httpport 参数使用80以外的端口
2. --keylength表示密钥长度,后面的值可以是 ec-256
、ec-384
、2048
、3072
、4096
、8192
,带有 ec
表示生成的是 ECC 证书,没有则是 RSA 证书。在安全性上 256 位的 ECC 证书等同于 3072 位的 RSA 证书。
3. 生成的证书将放置在~/.acme.sh/example.com/ 目录下:
example.com.cer | 证书文件 |
example.com.key | 私钥 |
ca.cer | 中间证书 |
fullchain.cer | 证书链 |
4. 当前证书剩余有效期在30天以上时重新生成证书,需要使用--force参数
5. 建议在生成证书的时候添加 --staging 使用测试环境测试,不明白可参见后面的速率限制
更新证书
acme.sh --renew -d example.com
如果是ecc证书:
acme.sh --renew -d example.com --ecc
说明:
默认情况下acme.sh会自动更新即将过期的证书.可以不用手动更新
如果要更新有效期大于30天的,使用--force参数
部署证书
acme.sh --installcert -d mydomain.me --ecc \
--fullchain-file /demo/v2ray/demo.crt \
--key-file /etc/demo/demo.key
说明:
其实就是拷贝证书到指定位置,位置自己定,原生成的证书的目录供acme.sh内部使用
查看已经生成的证书:
acme.sh --list
查看debug:
acme.sh --issue ..... --debug
查看error:
acme.sh --issue ..... --debug 2
生成日志:
acme.sh --issue ..... --log
使用测试环境
--staging
说明:
日志文件路径为:~/.acme.sh/acme.sh.log
概述:
所有签发请求均受每周 5 个重复证书的限制。 当您超出重复证书限制时,您应该会从 ACME 客户端收到如下错误消息:
too many certificates (5) already issued for this exact set of domains in the
last 168 hours: example.com login.example.com: see https://letsencrypt.org/docs/duplicate-certificate-limit
此错误所指的“确切集”是为此证书请求的主机名集:在此示例中,example.com
和 login.example.com
。 如果您的证书仅针对 1 个名称(例如 example.com)颁发,那么您的证书的主机名“确切集”将是 [example.com]
。 当订阅者在一周内为相同的“确切集”主机名请求证书超过 5 次时,就会超出此速率限制。
解决方法:
撤销先前发布的证书将不会重置重复证书限制。 然而,仍然存在着这种情况。 如果您发现您已经超过了上限并且您仍然需要另一个证书来获取相同的主机名,您总是可以要求一个不同的主机名“确切集”的证书。 例如,如果您超出了 [example.com]
的重复证书限制,那么为 [example.com, login.example.com]
请求证书将会成功。 同样,如果您超出了 [example.com, login.example.com]
的重复证书限制,那么为 [example.com]
申请一个单独的证书,为 [login.example.com]
申请另一个证书将会成功。
概述:
所有颁发请求都受到每个帐户、每个主机名、每小时 5 次失败的验证失败限制。 并且无法豁免。当您超过失败验证限制时,您会从您的ACME客户端收到以下错误消息:
too many failed authorizations recently: see https://letsencrypt.org/docs/failed-validation-limit/
此错误所指的“授权”是您的 ACME 客户端发送的授权请求的结果,用于在我们颁发或更新证书之前验证对域名的控制。 此错误表示多个验证请求已成功发送,但所有验证尝试均失败。
测试环境使用与生产环境类似的速率限制,但具体数据有所变化:
Let's Encrypt官网:
Let's Encrypt - 免费的SSL/TLS证书 (letsencrypt.org)
acme.sh项目地址:
acmesh-official/acme.sh: A pure Unix shell script implementing ACME client protocol (github.com)