Let’s Encrypt 是一个免费的,自动化的,开放的证书颁发机构(CA),为公众的利益而运行。 它是一项由 Internet Security Research Group(ISRG)提供的服务。
acme.sh 则是实现了 acme 协议, 可以从 letsencrypt 生成免费的证书。
- Let’s Encrypt 速率限制
- 每个注册网域(Registered Domain) 的凭证颁发数量,限制为每周50 张
- 更新凭证受到重复凭证限制,一个星期内仅能颁发5 张重复的凭证。
- 网域验证失败限制,对于每个帐号每域名每小时5 次的限制。
- 每个IP 位置每3 个小时最多能建立10 个帐号。
如果你达到速率限制,你只能等待一个星期直到速率限制结束。
acme申请证书
安装 acme.sh
curl https://get.acme.sh | sh
sudo apt install socat # 安装socat
选择默认 CA
Zerossl
从 acme.sh v 3.0.0 开始,acme.sh 使用 Zerossl 作为默认 ca,您必须先注册帐户(一次),然后才能颁发新证书。
~/.acme.sh/acme.sh –register-account -m [email protected]
Let’s Encrypt
如果需要更换Let’s Encrypt可以使用如下命令:
~/.acme.sh/acme.sh --set-default-ca --server letsencrypt
通过 http 方式申请证书
Webroot模式
这种方式需要你的服务器上面已经部署了网站环境。Acme 自动在你的网站根目录下放置一个文件,来验证你的域名所有权,完成验证. 然后就可以生成证书了.
# 生成 RSA 证书:
~/.acme.sh/acme.sh --issue -d example.com -w /var/www/_letsencrypt/
# 生成 ECC 证书:
~/.acme.sh/acme.sh --issue -d example.com -w /var/www/_letsencrypt/ --keylength ec-256
/var/www/_letsencrypt/ 为 example.com 站点下的 /.well-known/acme-challenge/ 证书请求目录。
80 端口空闲的证书申请方式
~/.acme.sh/acme.sh --issue -d example.com --standalone
安装证书到指定文件夹
# 把密钥和证书安装到 /root 目录,并改名为 private.key 和 cert.crt。
~/.acme.sh/acme.sh --installcert -d mydomain.com --key-file /root/cert/private.key --fullchain-file /root/cert/cert.crtchmod -R 755 /root/cert
更新(后续操作)
更新证书
手动更新
~/.acme.sh/acme.sh --renew -d example.com --force
自动更新
安装 acme.sh 时会自动创建一个 cronjob,每天定期检查所有证书,如果证书需要更新会自动更新证书。 通过 crontab -l 查看 crontab 任务:
46 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null
更新 Acme 脚本
升级 Acme.sh 到最新版本
~/.acme.sh/acme.sh --upgrade
如果你不想手动升级, 可以开启自动升级:
~/.acme.sh/acme.sh --upgrade --auto-upgrade
DNS 申请证书(通常只支持付费域名)
几个 CA 的简单对比
功能 | LE | Buypass | ZeroSSL | SSL.com | Google Public CA |
---|---|---|---|---|---|
有效期 | 90 天 | 180 天 | 90 天 | 90 天 | 90 天 |
多域名 | 支持 | 支持,最多 5 个 | 支持 | 收费支持 | 支持 |
泛域名 | 支持 | 不支持 | 支持 | 收费支持 | 支持 |
Rate Limit | 有 | 有 | 收费无 | 未知 | 有 |
GUI 管理 | 否 | 否 | 有 | 有 | 无 |
ECC 证书链 | 否 | 否 | 有 | 未知 | 无 |
客户支持 | 社区 | 收费 | 收费 | 收费 | 收费 |
cloudflare
使用全局 API 密钥,您需要登录您的 Cloudflare 帐户以获取您的API 密钥
export CF_Key="sdfsdfsdfljlbjkljlkjsdfoiwje"
export CF_Email="[email protected]"
颁发证书:
./acme.sh --issue --dns dns_cf -d example.com -d www.example.com
阿里云 DNS 申请方式
export Ali_Key="abcd"
export Ali_Secret="xxxxxxxxxx"
# RSA 证书
acme.sh --issue --dns dns_ali -d example.com -d *.example.com
# ECC 证书
acme.sh --issue --dns dns_ali -d example.com -d *.example.com --keylength ec-256
Ali_Key 和 Ali_Secret 需要从阿里云RAM访问控制中获取。
DNSPod 申请方式
export DP_Id="1234"
export DP_Key="xxxxxxxxxxx"
acme.sh --issue --dns dns_dp -d example.com -d www.example.com