首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >acme.sh:强大的ACME协议Shell脚本,支持多DNS API

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

原创
作者头像
qife122
发布2025-09-25 11:23:30
发布2025-09-25 11:23:30
90
举报

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服务器配置示例

安装指南

基本安装

代码语言:bash
复制
curl https://get.acme.sh | sh

或者使用wget:

代码语言:bash
复制
wget -O -  https://get.acme.sh | sh

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

依赖要求

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

使用说明

基本证书签发

使用DNS API方式签发证书:

代码语言:bash
复制
# 设置DNS API凭证
export CF_Key="your_cloudflare_key"
export CF_Email="your_email@example.com"

# 签发证书

DNS API配置示例

以Cloudflare为例的完整配置:

代码语言:bash
复制
# 保存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服务器:

代码语言:bash
复制
# 部署到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"

核心代码解析

主脚本结构

代码语言:bash
复制
#!/usr/bin/env sh

VER=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模块都遵循相同的接口规范:

代码语言:bash
复制
#!/usr/bin/env sh
# DNS API模块头信息
dns_provider_info='服务商信息
Site: 官方网站
Docs: 文档链接
Options:
 API_KEY_VAR API密钥变量说明
'

# 必需实现的函数
dns_provider_add() {
  fulldomain=$1
  txtvalue=$2
  # 添加TXT记录的实现
}

dns_provider_rm() {
  fulldomain=$1
  txtvalue=$2
  # 删除TXT记录的实现
}

证书签发核心逻辑

代码语言:bash
复制
  # 验证域名所有权
  if [ -z "$FORCE_DNS" ] && [ -z "$FORCE_HTTP" ] && [ -z "$FORCE_TLS_ALPN" ]; then
    _select_verify_method
  fi
  
  # 执行验证
  if _validate_conditions; then
    if _trigger_validation; then
      _finalize
      _deploy
    fi
  fi
}

错误处理机制

代码语言:bash
复制
_err() {
  printf "%s" "$@" >&2
  _logger "$@" >&2
  return 1
}

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

acme.sh通过模块化的设计和清晰的接口规范,使得新增DNS API支持变得简单直接。其健壮的错误处理和完善的日志系统确保了在各类环境下的稳定运行。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • acme.sh:强大的ACME协议Shell脚本
    • 项目描述
    • 功能特性
    • 安装指南
      • 基本安装
      • 依赖要求
    • 使用说明
      • 基本证书签发
      • DNS API配置示例
      • 证书部署
    • 核心代码解析
      • 主脚本结构
      • DNS API接口规范
      • 证书签发核心逻辑
      • 错误处理机制
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档