0. 必备条件
1个域名,托管到acme.sh支持的平台,如Cloudflare, 阿里云,腾讯云等。本文后续命令以Cloudflare为例来说明。添加解析记录指向自己要申请证书的设备IP。
Linux/Windows/OpenWRT, 这里以Linux/OpenWRT为例
1.安装acme.sh
curl https://get.acme.sh | sh -s email=yourname@gmail.com
2. 申请证书
2.1 更换证书服务商(可选)
acme被ZeroSSL收购,其默认的证书服务商为ZeroSSL,但Zero SSL支持的浏览器和应用稍微少,即兼容性稍差。所以这里执行如下命令,切换到letsencrypt:
acme.sh --set-default-ca --server letsencrypt
目前 acme.sh 支持 5 个正式环境 CA,分别是 Let's Encrypt、Buypass、ZeroSSL、SSL.com 和 Google Public CA,默认使用 ZeroSSL,如果需要更换可以使用上面命令,将--server后的CA名按下表替换:
letsencrypt,buypass,zerossl,ssl.com,google
几个 CA 的简单对比
功能 | Let's Encrypt | Buypass | ZeroSSL | SSL.com | Google Public CA |
---|---|---|---|---|---|
有效期 | 90 天 | 180 天 | 90 天 | 90 天 | 90 天 |
多域名 | 支持 | 支持,最多 5 个 | 支持 | 收费支持 | 支持 |
泛域名 | 支持 | 不支持 | 支持 | 收费支持 | 支持 |
Rate Limit | 有 | 有 | 收费无 | 未知 | 有 |
GUI 管理 | 否 | 否 | 有 | 有 | 无 |
ECC 证书链 | 否 | 否 | 有 | 未知 | 无 |
客户支持 | 社区 | 收费 | 收费 | 收费 | 收费 |
兼容性 | 优秀 | 某些客户端不支持 | |||
国内访问 | 不能直接访问 |
简单来说,如果没有特殊需求,可以选择 Let's Encrypt,如果服务器在国内,可以选择 ZeroSSL 或 Buypass,如果愿意付费得到更好的服务和保障,可以选择 ZeroSSL 和 SSL.com,如果面向欧盟用户,可以选择 Buypass 和 ZeroSSL。
注意:经过测试 Google Public CA 的 ACME 验证域名在国内是无法访问的,只有国外服务器才可以申请,申请完成后的证书并无影响。
2.2 申请证书
以下命令为使用Cloudflare的域名服务,来申请泛域名证书:
export CF_Token="LY0w8xxxxxxxxxxxxxxxxxxxxxxxxxJiV517p-iiv"
export CF_Zone_ID="b27fxxxxxxxxxxxxxxxxxxxxxxxxxxxx57e7fd"
acme.sh --issue --dns dns_cf -d yourdomain.com -d '*.yourdomain.com'
申请得到的泛域名证书和存储路径
-----BEGIN CERTIFICATE-----
MIIEATCCA4igAwIBAgIRALJeuBuyAuuxedcqDqAj9gYwCgYIKoZIzj0EAwMwSzEL
MAkGA1UEBhMCQVQxEDAOBgNVBAoTB1plcm9TU0wxKjAoBgNVBAMTIVplcm9TU0wg
RUNDIERvbWFpbiBTZWN1cmUgU2l0ZSBDQTAeFw0yNTAyMjQwMDAwMDBaFw0yNTA1
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
MAoGCCqGSM49BAMDA2cAMGQCMAR9pxDlj9/P2UIuGsRfhAoHNpLNdgruMMoGCP36
niGUy8SpHDAt8ERa6nKfPWaf6AIwTkIAdJ0JGc0GMhEr9sBafaBFE72breBU5Zqn
h6JutPoz+SEB2ajG3Gu820mNUhIv
-----END CERTIFICATE-----
[Mon Feb 24 03:37:18 PM UTC 2025] Your cert is in: /root/.acme.sh/yourdomain.com_ecc/yourdomain.com.cer
[Mon Feb 24 03:37:18 PM UTC 2025] Your cert key is in: /root/.acme.sh/yourdomain.com_ecc/yourdomain.com.key
[Mon Feb 24 03:37:18 PM UTC 2025] The intermediate CA cert is in: /root/.acme.sh/yourdomain.com_ecc/ca.cer
[Mon Feb 24 03:37:18 PM UTC 2025] And the full-chain cert is in: /root/.acme.sh/yourdomain.com_ecc/fullchain.cer
3. 使用证书
直接使用前面的路径即可,我是用kestrel中,要选择full-chain cert和key
配置完成后,用浏览器打开网站,点击网址前的小按钮,打开证书查看证书信息。
安装证书
Nginx
acme.sh --install-cert -d example.com \
--key-file /etc/nginx/ssl/example.com.key \
--fullchain-file /etc/nginx/ssl/example.com.crt \
--ca-file /etc/nginx/ssl/example.com.ca.crt \
--reloadcmd "systemctl restart nginx"
对应的 Nginx 配置指定证书文件
ssl_certificate /etc/nginx/ssl/example.com.crt;
ssl_certificate_key /etc/nginx/ssl/example.com.key;
ssl_trusted_certificate /etc/nginx/ssl/example.com.ca.crt;
Apache
acme.sh --install-cert -d example.com \
--key-file /etc/apache2/ssl/example.com.key \
--fullchain-file /etc/apache2/ssl/example.com.crt \
--ca-file /etc/apache2/ssl/example.com.ca.crt \
--reloadcmd "curl https://ssl-config.mozilla.org/ffdhe2048.txt >> /etc/apache2/ssl/example.com.crt && systemctl restart apache2"
对应的 Apache 配置指定证书文件
SSLCertificateFile /etc/apache2/ssl/example.com.crt
SSLCertificateKeyFile /etc/apache2/ssl/example.com.key
如果是 ECC 证书,则安装的时候需要带上 --ecc
参数,比如
acme.sh --install-cert --ecc -d example.com \
--key-file /etc/nginx/ssl/example.com.key \
--fullchain-file /etc/nginx/ssl/example.com.crt \
--ca-file /etc/nginx/ssl/example.com.ca.crt \
--reloadcmd "systemctl restart nginx"
注意如果是多个域名,也仅需要在 -d
参数后面指定第一个域名即可。
4. 自动续期
目前证书在 60 天以后会自动更新,你无需任何操作,因为在acme.sh安装时,已经把相关的自动更新程序写入到crontab中,如果想要查看,可以通过以下命令:
crontab -l
输出内容包含一个自动更新程序,大致内容如下:
* * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null
5. 相关链接
https://www.panyanbin.com/article/c44653d8.html