当今HTTPS普及的时代,SSL证书已成为网站安全的基础设施。但是传统证书申请流程繁琐、续期复杂的问题始终困扰着开发者。

由纯Shell脚本编写的开源工具acme.sh,凭借其轻量化、全自动的特性,正在成为全球开发者管理SSL证书的首选方案。

acme.sh的优势

acme.sh完整实现了ACME协议标准,通过与Let's EncryptZeroSSL等权威CA机构对接,实现了证书申请-部署-续期全流程自动化。其独特优势在于:

  • 零依赖架构: 仅需基础Shell环境,无需Python/Node.js等运行时
  • 多CA支持: 默认使用ZeroSSL(不限证书数量),也可切换Let's Encrypt/BuyPass
  • 泛域名支持: 轻松申请*.example.com型通配符证书
  • 智能续期: 内置Cron任务自动检测并续期证书(有效期90天)
  • 多模式验证: 支持HTTP/DNS/API等8种域名验证方式

核心功能拆解

1. 灵活的运行模式

通过不同参数适配各类服务器环境:

Webroot模式: 在现有Web服务目录生成验证文件(推荐生产环境)

acme.sh --issue -d example.com -w /var/www/html

Standalone模式: 临时启动HTTP服务完成验证(适合无Web服务场景)

DNS模式: 通过API自动配置TXT解析记录(支持Cloudflare/Aliyun等50+服务商)

# 阿里云DNS示例
export Ali_Key="AKID"
export Ali_Secret="SERCET"
acme.sh --issue --dns dns_ali -d *.example.com

2. 证书生态管理

跨平台部署:通过--installcert命令自动部署证书到Nginx/Apache等服务器

acme.sh --install-cert -d example.com \
  --key-file /etc/nginx/ssl/key.pem \
  --fullchain-file /etc/nginx/ssl/cert.pem \
  --reloadcmd "systemctl reload nginx"

证书监控: acme.sh --list查看所有证书状态

一键迁移: 支持PKCS#12格式导出证书

3. 企业级特性

ECC证书支持:生成更安全的椭圆曲线加密证书

acme.sh --issue -d example.com --keylength ec-256

多域名合并: 单证书支持100+域名

沙盒测试: 使用--staging参数避免触发CA机构频次限制

生成证书

acme.sh 实现了 acme 协议支持的所有验证协议。

一般有两种方式验证: HTTP 和 DNS 验证。

HTTP 验证

直接签发

只需要指定域名,并指定域名所在的网站根目录. acme.sh 会全自动的生成验证文件,并放到网站的根目录,验证完成后会聪明的删除验证文件,整个过程没有任何副作用。

acme.sh --issue -d mydomain.com -d www.mydomain.com --webroot /home/wwwroot/mydomain.com/

使用 Apache 模式

如果你用的 Apache 服务器,acme.sh 还可以智能的从 Apache 的配置中自动完成验证,你不需要指定网站根目录:

acme.sh --issue --apache -d example.com -d www.example.com -d cp.example.com

使用 Nginx 模式

如果你用的 Nginx 服务器,或者反代,acme.sh 还可以智能的从 Nginx 的配置中自动完成验证,你不需要指定网站根目录:

acme.sh --issue --nginx -d example.com -d www.example.com -d cp.example.com

注意,无论是 Apache 还是 Nginx 模式,acme.sh 在完成验证之后,会恢复到之前的状态,都不会私自更改程序本身的配置. 好处是你不用担心配置被搞坏,也有一个缺点,你需要自己配置 SSL 项,否则只能成功生成证书,你的网站还是无法正常使用 HTTPS。

使用独立服务模式

如果服务器上没有运行任何 Web 服务,80 端口是空闲的,那么 acme.sh 还能假装自己是一个 WebServer,临时监听 80 端口,完成验证:

acme.sh --issue --standalone -d example.com -d www.example.com -d cp.example.com

修改默认 CA

acme.sh 脚本默认 CA 服务器是 ZeroSSL,有时可能会导致获取证书的时候一直出现:Pending,The CA is processing your order,please just wait.

只需要把 CA 服务器改成 Let's Encrypt 即可,虽然更改以后还是有概率出现 pending,但基本 2-3 次即可成功

acme.sh --set-default-ca --server letsencrypt

更高级的用法请参考: https://github.com/acmesh-official/acme.sh/wiki/How-to-issue-a-cert

DNS 验证

如果你没有服务器,没有公网 IP,只需要 DNS 的解析记录即可完成验证。

手动验证

这需要你手动在域名上添加一条 TXT 解析记录,验证域名所有权。

注意,如果使用手动验证,acme.sh 将无法自动更新证书,每次都需要手动添加解析来验证域名所有权。如果有自动更新证书的需求,请使用自动验证(DNS API)。

acme.sh --issue --dns -d example.com -d www.example.com -d cp.example.com

然后,acme.sh 会生成相应的解析记录显示出来,你只需要在你的域名管理面板中添加这条 TXT 记录即可。

等待解析完成之后,执行以下命令重新生成证书:

acme.sh --renew -d mydomain.com

注意这里现在用的是 --renew 参数

自动验证(DNS API)

DNS 方式的真正强大之处在于可以使用域名解析商提供的 API 自动添加 TXT 记录,且在完成验证后删除对应的记录。

acme.sh 目前支持超过一百家的 DNS API。

以 DNSPod.cn 为例,你需要先登录到 DNSPod.cn,拿到你的 DNSPod API Key 和 ID 并设置:

export DP\_Id="1234"export DP\_Key="sADDsdasdgdsf"

现在我们可以签发通配符证书了:

acme.sh --issue --dns dns_dp -d example.com -d *.example.com

DP_Id 和 DP_Key 将保存在 ~/.acme.sh/account.conf 中,并在需要时自动获取,无需手动再设置。

版权声明:
1、本网站名称:帝企吧
2、本站永久网址:https://www.diqiba.com
3、本网站的文章部分内容可能来源于网络及作者投稿,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
4、本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
5、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报。
6、本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新。
7、本站所有资源来源于互联网,仅用于学习及参考使用,切勿用于商业用途,如产生法律纠纷本站概不负责! 8、资源除标明原创外均来自网络转载,版权归原作者所有,若侵犯到您权益请联系我们删除,我们将及时处理! 9、若您需使用非免费的软件或服务,请购买正版授权并合法使用!