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

acme.sh:强大的ACME协议Shell脚本,支持多DNS API

acme.sh:强大的ACME协议Shell脚本

项目描述

acme.sh是一个完全用Shell脚本编写的ACME协议客户端,专门设计用于从Let's Encrypt、ZeroSSL等证书颁发机构(CA)自动获取SSL/TLS证书。该项目支持ACME v2协议,包括通配符证书的签发,提供了简单易用的证书管理功能。

acme.sh的核心优势在于其丰富的DNS API支持,目前已经集成了超过100种DNS服务商的API接口,包括Cloudflare、阿里云、腾讯云、GoDaddy等主流服务商。这使得用户可以在各种DNS环境下实现证书的自动验证和续期。

功能特性

  • 多CA支持:支持Let's Encrypt、ZeroSSL、SSL.com、Google等多个证书颁发机构
  • 通配符证书:完整支持ACME v2协议,可签发通配符证书
  • DNS API集成:内置100+ DNS服务商的API支持,实现自动DNS验证
  • 跨平台兼容:纯Shell脚本实现,可在各种Unix-like系统上运行
  • 自动续期:内置证书自动续期机制,支持部署钩子
  • 零依赖:除Shell基本命令外无额外依赖,部署简单
  • 易于集成:提供丰富的部署脚本和Web服务器配置示例

安装指南

基本安装

curl https://get.acme.sh | sh

或者使用wget:

wget -O -  https://get.acme.sh | sh

安装完成后,脚本会自动创建cron任务用于证书自动续期。

依赖要求

  • 支持的系统:Linux、BSD、macOS等Unix-like系统
  • 必需工具:curl或wget、openssl
  • Shell环境:兼容Bash、Dash等常见Shell

使用说明

基本证书签发

使用DNS API方式签发证书:

# 设置DNS API凭证
export CF_Key="your_cloudflare_key"
export CF_Email="your_email@example.com"# 签发证书

DNS API配置示例

以Cloudflare为例的完整配置:

# 保存API凭证到配置文件中
acme.sh --set-default-ca --server letsencrypt
export CF_Key="your_cloudflare_api_key"
export CF_Email="your_cloudflare_account_email"# 签发通配符证书-d example.com \-d *.example.com \--key-file /path/to/key.pem \--fullchain-file /path/to/fullchain.pem

证书部署

签发后自动部署到Web服务器:

# 部署到Nginx
acme.sh --install-cert -d example.com \--key-file /etc/nginx/ssl/example.com.key \--fullchain-file /etc/nginx/ssl/fullchain.cer \--reloadcmd "service nginx force-reload"

核心代码解析

主脚本结构

#!/usr/bin/env shVER=3.1.2
PROJECT_NAME="acme.sh"
PROJECT_ENTRY="acme.sh"
PROJECT="https://github.com/acmesh-official/$PROJECT_NAME"# 默认安装目录
DEFAULT_INSTALL_HOME="$HOME/.$PROJECT_NAME"# 支持的证书颁发机构
CA_LETSENCRYPT_V2="https://acme-v02.api.letsencrypt.org/directory"
CA_ZEROSSL="https://acme.zerossl.com/v2/DV90"
DEFAULT_CA=$CA_ZEROSSL# 验证类型
VTYPE_HTTP="http-01"
VTYPE_DNS="dns-01"
VTYPE_ALPN="tls-alpn-01"

DNS API接口规范

每个DNS API模块都遵循相同的接口规范:

#!/usr/bin/env sh
# DNS API模块头信息
dns_provider_info='服务商信息
Site: 官方网站
Docs: 文档链接
Options:API_KEY_VAR API密钥变量说明
'# 必需实现的函数
dns_provider_add() {fulldomain=$1txtvalue=$2# 添加TXT记录的实现
}dns_provider_rm() {fulldomain=$1txtvalue=$2# 删除TXT记录的实现
}

证书签发核心逻辑

# 验证域名所有权if [ -z "$FORCE_DNS" ] && [ -z "$FORCE_HTTP" ] && [ -z "$FORCE_TLS_ALPN" ]; then_select_verify_methodfi# 执行验证if _validate_conditions; thenif _trigger_validation; then_finalize_deployfifi
}

错误处理机制

_err() {printf "%s" "$@" >&2_logger "$@" >&2return 1
}_debug() {if [ -z "$DEBUG" ]; thenreturnfiprintf "%s\n" "$@" >&2_logger "$@"
}

acme.sh通过模块化的设计和清晰的接口规范,使得新增DNS API支持变得简单直接。其健壮的错误处理和完善的日志系统确保了在各类环境下的稳定运行。
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
公众号二维码

http://www.zskr.cn/news/11429.html

相关文章:

  • P9545 [湖北省选模拟 2023] 环山危路 / road 题解
  • k8s 兼容寒武纪 - 教程
  • win11 无线投屏(Miracast:)引发的思考附带解决方案 - Popeye
  • 关于MCO使用配置
  • docker/docker compose/k8s
  • Gitee如何重塑中国开发者生态:本土化创新与数字化转型的双重奏
  • 从MESA模型到锁升级:synchronized性能逆袭的底层逻辑
  • ibero 2025.1 Run PROGRAM_SPI_IMAGE_Action
  • 训练“系统级思维”,听时序数据库 IoTDB Committer 说说从设计到应用的成长
  • 【设计模式】状态模式 - 详解
  • 关于gradle项目启动
  • 事倍功半是蠢蛋55 ctrl+shift+f 每次搜索都按倒繁体
  • Ini文件的读写
  • 养成合成小游戏抖音快手微信小程序看广告流量主开源 - 实践
  • ICPC每日 2025.9.25
  • 软考架构备考-软件可靠性、知识产权和标准化
  • 医院内外网文件传输:平衡安全与效率的关键链路!
  • opencv学习记录5
  • 2025.9.25
  • 空间三维坐标变换(转)-四元数-RowPitchYaw角互换
  • 易基因:Cell Rep:华农任文凯团队利用ChIP-seq及多组学解析过敏性疾病的关键调控机制|项目文章
  • Idea代码回退已经push到远段仓库的代码分支到指定提交记录
  • 靶向肽Dcpep - 教程
  • 图思维胜过链式思维:JGraphlet构建任务流水线的八大核心原则
  • 两月九城,纷享销客渠道携手伙伴共创CRM新纪元
  • el-upload上传图片
  • 剑指offer-33、丑数
  • 云平台qcow2镜像的制作
  • hf 下载模型
  • 使用Function Interface简化if-else代码示例