当前位置: 首页 > news >正文

acme.sh:用 Shell 脚本搞定 SSL 证书申请和续期

文章目录

  • acme.sh:用 Shell 脚本搞定 SSL 证书申请和续期
    • 为什么需要它
    • 支持哪些 CA 和验证方式
    • 安装和使用
    • 跨平台和兼容性
    • 实际使用场景

acme.sh:用 Shell 脚本搞定 SSL 证书申请和续期

acme.sh 在 GitHub 上已经拿到 47K Star 了。

这个项目做的事情很明确——用纯 Shell 脚本实现 ACME 协议,自动申请和续期 SSL 证书。不需要 Python,不需要 Node,一个 Shell 脚本就够了。

为什么需要它

做过 HTTPS 部署的人都知道,证书这件事说简单也简单,说麻烦也麻烦。Let’s Encrypt 提供免费证书,但申请流程要走 ACME 协议,续期要定时跑,多域名、通配符证书的配置各有讲究。手动操作容易忘,过期了网站就挂。

acme.sh 把这套流程封装成一个 Shell 脚本。装好之后,证书申请、续期、安装到 Nginx 或 Apache,全自动化。默认 30 天续期一次,还支持 RFC 9773 的 ARI 续期建议机制,CA 那边说什么时候该换,脚本自己会跟着调整。

支持哪些 CA 和验证方式

默认用 ZeroSSL,也支持 Let’s Encrypt、SSL.com、Google Public CA、Actalis,以及任何符合 RFC 8555 标准的 CA。

验证方式有好几种:

  • Webroot 模式:用现有网站目录验证
  • Standalone 模式:脚本自己起一个 HTTP 服务在 80 端口
  • TLS-ALPN 模式:走 443 端口验证
  • Apache/Nginx 模式:直接对接 Web 服务器做验证
  • DNS 模式:通过 DNS TXT 记录验证,支持通配符证书
  • DNS Persist 模式:放一条长期 TXT 记录,后续续期不用再改 DNS

大部分 DNS 服务商都有 API 集成,Cloudflare、阿里云、腾讯云这些常见的都覆盖了。没有 API 的也能手动加 TXT 记录,只是续期时得再操作一次。

安装和使用

安装就一行:

curlhttps://get.acme.sh|sh-semail=my@example.com

装完之后自动配好 cron 任务,每天检查一次是否需要续期。

申请单域名证书:

acme.sh--issue-dexample.com-w/var/www/html

多域名或通配符:

acme.sh--issue-dexample.com-d'*.example.com'--dnsdns_cf

申请完把证书装到 Nginx:

acme.sh --install-cert-dexample.com\--key-file /etc/nginx/key.pem\--fullchain-file /etc/nginx/cert.pem\--reloadcmd"service nginx force-reload"

续期后会自动执行 reloadcmd,不用手动重启服务。

跨平台和兼容性

acme.sh 在测试矩阵里覆盖了二十多个平台:各种 Linux 发行版、macOS、FreeBSD、OpenBSD、NetBSD、Solaris、Windows(通过 Cygwin),甚至 Haiku OS 和 OpenWRT。Shell 层面兼容 Bash、dash、sh。

不需要 root 权限就能运行,证书放在用户目录下。Docker 也能用,官方提供了镜像。

实际使用场景

acme.sh 被 FreeBSD.org、Proxmox、pfsense、discourse.org 这些项目用在生产环境里。一个 Shell 脚本能跑这么多年、覆盖这么多平台,靠的不是花哨的功能,就是把证书管理这件事做扎实了。

对于个人站长或小团队,装一次就不用管了。对于运维批量管理多台服务器的场景,Shell 脚本的优势在于部署简单,不需要额外的运行时依赖。

扎实了。

对于个人站长或小团队,装一次就不用管了。对于运维批量管理多台服务器的场景,Shell 脚本的优势在于部署简单,不需要额外的运行时依赖。

http://www.jsqmd.com/news/1100704/

相关文章:

  • 亮相 MWC2026,YunSDR 赋能NTN网络测试及科研原型落地
  • 告别单调地图!用ArcGIS Pro给要素弹窗加图片的3种方法全解析(附HTML排版技巧)
  • 霞鹜文楷:如何用一款开源字体改变你的数字阅读体验?
  • 手把手教你用ATGM332D-5N31模块DIY一个高精度GPS/北斗定位器(附STM32代码)
  • Codex:从AI代码补全到智能体开发平台的演进与实践指南
  • YOLOv10模型改进-卷积层改进-第14篇:YOLOv10改进策略【卷积层】| MobileNetV3深度可分离卷积
  • 手把手教你用STM32F429+FreeRTOS+CycloneTCP做个开源SIP电话(附代码和避坑指南)
  • STC89C52单片机密码锁DIY:从Proteus仿真到面包板搭建的完整避坑指南
  • iOS 崩溃日志分析与定位 从手动符号化到自动分析
  • 文献梳理不用熬夜堆资料!okbiye 专属文献综述 AI,一站式产出合规学术述评
  • 从YOLOv1到YOLOv13:核心原理、演进脉络与实战部署全解析
  • 医疗影像开发者的终极武器:DCMTK深度解析与实战指南
  • Codex桌面端部署与DeepSeek接入全攻略:从安装到高级配置
  • QMT 量化实战:五因子大盘风险预警系统构建(上)
  • 告别官方文档:用uuu工具在Windows 10上烧写i.MX8M Android镜像的保姆级避坑指南
  • 3分钟搞定Windows风扇控制:FanControl智能散热管理完全指南
  • Android APP逆向分析实战:从静态拆解到动态Hook与协议复现
  • 负极材料厂主要集中在哪里?各产区有哪些特点?
  • 保姆级教程:用Open3D实时可视化MMDetection3D CenterPoint在KITTI上的3D检测结果
  • SpringBoot+Vue汽车租赁系统实战:从数据库设计到权限管理的完整避坑指南
  • 解决校园网中单播互通的不同子网间的 LocalSend 发现问题
  • SAP PS模块实战:手把手教你用BAPI批量创建WBS和项目(附透明表查询技巧)
  • 2026年6月30日每日关注:每天60秒读懂世界
  • 什么是云PACS医学影像归档和通信系统?
  • MCP 7月大版本来了:无状态化、Breaking Changes、MCP Apps——你的Server要改吗?
  • Windows风扇控制终极指南:告别噪音与过热的智能解决方案
  • Node.js应用XXE漏洞防护:从原理到实战的立体防御方案
  • 别再复制粘贴了!用ChatGPT/Copilot快速生成LaTeX公式的保姆级教程
  • 保姆级教程:用ESP8266-01和AT指令,5分钟搞定阿里云物联网平台温湿度数据上传
  • 计算机毕业设计之 基于机器学习的员工离职分析预测系统