作者:匿名
更新:1年前

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

Tags: acme.sh   Ubuntu   证书  
1年前
1206
1
1