作者:匿名
发布:3/1/2025 4:36:23 PM

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 EncryptBuypassZeroSSLSSL.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

更新:2025-03-19
阅读:219
Posted by 1
1