当前位置: 首页 > 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.hskmm.com/?act=detail&tid=16723

相关文章:

  • P9545 [湖北省选模拟 2023] 环山危路 / road 题解
  • 探秘圆周率 π:圆周率计算在线工具
  • 以史为鉴【长期置顶】
  • java21学习笔记-未命名的模式和变量 - 指南
  • 达梦数据库DM-查询指定模式下表的大小
  • 【笔记】Prfer 序列
  • win11 无线投屏(Miracast:)引发的思考附带解决方案 - Popeye
  • 2025年十大主流项目管理工具评测:功能覆盖与成本效益分析
  • 关于MCO使用配置
  • 向量那点事儿
  • c++输入输出详解
  • docker/docker compose/k8s
  • 中国开发者迎来新选择:Gitee成为研发协作平台转型期的中流砥柱
  • RK3588-ubuntu server - 详解
  • 一文教你上手 Geometric Glovius 6.0:安装、授权与首个项目演示
  • 32单片机+free rtos移植CJSON库函数主要流程
  • Gitee如何重塑中国开发者生态:本土化创新与数字化转型的双重奏
  • 输入输出接口
  • Go语言中的信号捕获与优雅退出:SIGINT、SIGTERM和SIGKILL详解 - 若
  • (二)3.1.9 生产“稳”担当:Apache DolphinScheduler Worker 服务源码全方位解析
  • 完整教程:生产环境实战:Spring Cloud Sleuth与Zipkin分布式链路追踪实践
  • 训练“系统级思维”,听时序数据库 IoTDB Committer 说说从设计到应用的成长
  • 关于gradle项目启动
  • Day08
  • 常见闪存区别
  • 进程、线程、协程、虚拟线程,傻傻分不清楚
  • 事倍功半是蠢蛋55 ctrl+shift+f 每次搜索都按倒繁体
  • Ini文件的读写
  • 数据跨境传输解决方案助力企业安全合规高效流通
  • 题解:P9454 [ZSHOI-R1] 巡城