Skip to content

getandpost/ssl-acme-manager

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SSL ACME 自动化证书管理脚本

这是一个基于 acme.sh 和 CertCloud 的免费 SSL 证书自动生成和维护脚本,支持多种 DNS 服务商和 Web 服务器的自动化证书管理。

基于 CertCloud 文档开发 本项目基于 CertCloud ACME 文档 开发,提供完整的 SSL 证书管理解决方案。

功能特性

  • 🎯 配置向导 - 交互式配置向导,快速完成初始设置
  • 🚀 一键安装 - 自动安装和配置 acme.sh
  • 🏢 CertCloud 集成 - 默认使用 CertCloud ACME 服务器,支持 EAB 认证
  • 🔐 多种验证方式 - 支持 DNS 验证和文件验证
  • 🌐 多DNS服务商 - 支持腾讯云、阿里云、DNSPod、AWS Route53、Cloudflare 等
  • 🔄 自动续期 - 自动检测和续期即将过期的证书
  • 📦 证书管理 - 完整的证书生命周期管理
  • 🛡️ 安全配置 - 提供安全的 SSL 配置模板
  • 📊 状态监控 - 实时监控证书状态和到期时间
  • 💾 备份恢复 - 支持证书备份和恢复功能
  • 🖥️ Web服务器集成 - 自动配置 Nginx 和 Apache
  • 📢 通知系统 - 支持邮件和钉钉通知
  • 🔧 完整工具链 - 单个脚本包含所有功能,无需额外安装脚本

系统要求

  • Linux (Ubuntu, CentOS, Debian, RHEL, Fedora)
  • macOS
  • FreeBSD
  • Windows (Git Bash/WSL,功能受限)
  • Bash 4.0+
  • curl 或 wget
  • git
  • openssl (可选,用于证书信息查看)

项目文件结构

ssl-acme-manager/
├── ssl_acme.sh              # 主脚本 - 包含所有 SSL 证书管理功能
├── setup_config.sh          # 配置向导 - 交互式配置生成器
├── ssl_acme.conf.example    # 配置文件模板
├── examples.sh              # 使用示例脚本
├── README.md                # 项目文档
└── LICENSE                  # 许可证文件

核心文件说明

  • ssl_acme.sh - 主要脚本,包含完整的 SSL 证书管理功能:

    • acme.sh 安装和配置
    • CertCloud ACME 账户注册
    • 证书申请、安装、续期
    • 证书状态监控和管理
    • Web 服务器配置生成
    • 证书备份和恢复
  • setup_config.sh - 配置向导,帮助快速生成配置文件

  • examples.sh - 使用示例,包含各种使用场景的命令示例

快速开始

一个脚本搞定所有事情! ssl_acme.sh 包含了完整的 SSL 证书管理功能,从 acme.sh 安装到证书管理,一个脚本全搞定!

方式一:使用配置向导(推荐)

# 1. 下载脚本和配置文件
git clone https://github.com/your-repo/ssl-acme-manager.git
cd ssl-acme-manager

# 2. 添加执行权限
chmod +x ssl_acme.sh setup_config.sh

# 3. 运行配置向导
./setup_config.sh

# 4. 一键安装 acme.sh(使用配置向导生成的配置)
./ssl_acme.sh install

# 5. 注册 CertCloud 账户
./ssl_acme.sh register

# 6. 申请证书
./ssl_acme.sh issue -d example.com

# 7. 安装证书到 Nginx
./ssl_acme.sh install-cert -d example.com -t nginx

配置向导将引导您完成以下设置:

  • 📧 邮箱地址配置
  • 🌐 ACME 服务器选择(CertCloud、Let's Encrypt、ZeroSSL)
  • 🔧 DNS 服务商配置(DNSPod、腾讯云、阿里云、AWS、Cloudflare)
  • 📁 证书存储路径设置
  • 🔄 自动续期配置
  • 🖥️ Web 服务器配置(Nginx、Apache)
  • 📢 通知配置(邮件、钉钉)

方式二:手动配置

# 1. 下载脚本和配置文件
git clone https://github.com/your-repo/ssl-acme-manager.git
cd ssl-acme-manager

# 2. 添加执行权限
chmod +x ssl_acme.sh

# 3. 复制配置文件模板
sudo cp ssl_acme.conf.example /etc/ssl_acme.conf

# 4. 编辑配置文件,设置默认邮箱和DNS服务商
sudo nano /etc/ssl_acme.conf

在配置文件中设置:

# 基本配置
DEFAULT_SERVER="https://acme.trustasia.com/v2/DV90/directory"
DEFAULT_EMAIL="[email protected]"
DEFAULT_DNS_PROVIDER="dns_dp"

# 路径配置
CERT_BASE_PATH="/etc/ssl/certs"
KEY_BASE_PATH="/etc/ssl/private"
BACKUP_DIR="/var/backups/ssl_certificates"
ACME_HOME="$HOME/.acme.sh"

# 自动续期配置
AUTO_RENEW_DAYS=30
RENEW_CRON="0 2 * * *"

# DNS 服务商配置
DNSPOD_ID="your_dnspod_id"
DNSPOD_KEY="your_dnspod_key"

后续步骤

1. 安装 acme.sh

# 使用配置向导后,直接运行(会使用配置文件中的默认邮箱)
./ssl_acme.sh install

# 或者手动指定邮箱
./ssl_acme.sh install -e [email protected]

2. 注册 ACME 账户

# 使用默认配置注册(推荐)
./ssl_acme.sh register

# 或者手动指定参数
./ssl_acme.sh register -e [email protected]

3. 申请 SSL 证书

# 使用默认 DNS 服务商申请证书
./ssl_acme.sh issue -d example.com

# 指定 DNS 服务商
./ssl_acme.sh issue -d example.com -p dns_dp
./ssl_acme.sh issue -d example.com -p dns_tencent
./ssl_acme.sh issue -d example.com -p dns_ali

# 使用文件验证申请证书
./ssl_acme.sh issue -d example.com -w /var/www/html

4. 安装证书到服务器

# 安装到 Nginx(使用配置文件中的路径)
./ssl_acme.sh install-cert -d example.com -t nginx

# 安装到 Apache
./ssl_acme.sh install-cert -d example.com -t apache

# 自定义路径安装(注意:现在使用 .crt 后缀)
./ssl_acme.sh install-cert -d example.com \
  --cert-path /etc/ssl/certs/example.com.crt \
  --key-path /etc/ssl/private/example.com.key \
  --reload-cmd "systemctl reload nginx"

5. 设置自动续期

# 手动测试自动续期
./ssl_acme.sh auto-renew

# 添加到 crontab,每天凌晨2点检查并自动续期即将过期的证书
echo "0 2 * * * /path/to/ssl_acme.sh auto-renew" | sudo crontab -

6. 批量管理多个域名

# 申请多个域名的证书
domains=("example1.com" "example2.com" "example3.com")

for domain in "${domains[@]}"; do
    echo "处理域名: $domain"
    ./ssl_acme.sh issue -d "$domain" -p dns_dp
    ./ssl_acme.sh install-cert -d "$domain" -t nginx
done

详细使用说明

命令列表

命令 说明 示例
install 安装 acme.sh ./ssl_acme.sh install -e [email protected]
register 注册 ACME 账户 ./ssl_acme.sh register -e [email protected]
issue 申请 SSL 证书 ./ssl_acme.sh issue -d example.com -p dns_dp
install-cert 安装证书到服务器 ./ssl_acme.sh install-cert -d example.com -t nginx
renew 手动续期证书 ./ssl_acme.sh renew -d example.com
list 列出所有证书 ./ssl_acme.sh list
remove 删除证书 ./ssl_acme.sh remove -d example.com
status 查看证书状态 ./ssl_acme.sh status -d example.com
backup 备份证书 ./ssl_acme.sh backup
restore 恢复证书 ./ssl_acme.sh restore --backup-file /path/to/backup.tar.gz
check-expiry 检查证书到期时间 ./ssl_acme.sh check-expiry --days 30
auto-renew 自动续期即将过期的证书 ./ssl_acme.sh auto-renew --days 30
nginx-config 生成 Nginx 配置 ./ssl_acme.sh nginx-config -d example.com
apache-config 生成 Apache 配置 ./ssl_acme.sh apache-config -d example.com

参数说明

参数 说明 示例
-d, --domain 指定域名 -d example.com
-w, --webroot 网站根目录(文件验证) -w /var/www/html
-s, --server ACME 服务器地址 -s https://acme.trustasia.com/v2/DV90/directory
-e, --email 邮箱地址 -e [email protected]
-p, --provider DNS 服务商 -p dns_dp
-t, --type Web 服务器类型 -t nginx
--cert-path 证书文件路径 --cert-path /etc/ssl/certs/example.com.crt
--key-path 私钥文件路径 --key-path /etc/ssl/private/example.com.key
--reload-cmd 重载命令 --reload-cmd "nginx -s reload"
--days 天数阈值 --days 30
-f, --force 强制执行 -f
-v, --verbose 详细输出 -v

支持的 DNS 服务商

服务商 参数值 环境变量
DNSPod dns_dp DP_Id, DP_Key
腾讯云 dns_tencent Tencent_SecretId, Tencent_SecretKey
阿里云 dns_ali Ali_Key, Ali_Secret
AWS Route53 dns_aws AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY

DNSPod 配置

  1. 登录 DNSPod 控制台
  2. 进入 API 密钥管理
  3. 创建 DNSPod Token
  4. 获取 ID 和 Token
export DP_Id="your_dnspod_id"
export DP_Key="your_dnspod_key"

腾讯云配置

  1. 登录 腾讯云控制台
  2. 进入访问管理 → API 密钥管理
  3. 创建密钥或使用子账号密钥
  4. 获取 SecretId 和 SecretKey
export Tencent_SecretId="your_secret_id"
export Tencent_SecretKey="your_secret_key"

阿里云配置

  1. 登录 阿里云 RAM 控制台
  2. 创建用户并生成 AccessKey
  3. 授予 AliyunDNSFullAccess 权限
  4. 获取 AccessKey ID 和 Secret
export Ali_Key="your_access_key_id"
export Ali_Secret="your_access_key_secret"

AWS Route53 配置

  1. 登录 AWS IAM 控制台
  2. 创建用户并生成访问密钥
  3. 授予 Route53 相关权限
  4. 获取 Access Key ID 和 Secret
export AWS_ACCESS_KEY_ID="your_access_key_id"
export AWS_SECRET_ACCESS_KEY="your_secret_access_key"

故障排除

常见问题

  1. DNS 验证失败

    • 检查 DNS 服务商的 API 密钥是否正确
    • 确认域名解析服务商与配置的服务商一致
    • 检查网络连接和防火墙设置
  2. 文件验证失败

    • 确认网站根目录路径正确
    • 检查 Web 服务器是否正常运行
    • 确认域名能够正常访问
  3. 证书安装失败

    • 检查证书和私钥文件路径权限
    • 确认 Web 服务器配置语法正确
    • 查看 Web 服务器错误日志

日志查看

# 查看脚本日志
tail -f /var/log/ssl_acme.log

# 查看 acme.sh 日志
tail -f ~/.acme.sh/acme.sh.log

安全建议

  1. 保护 API 密钥

    • 使用子账号密钥,限制权限范围
    • 定期轮换 API 密钥
    • 不要在脚本中硬编码密钥
  2. 证书文件权限

    • 私钥文件权限设置为 600
    • 证书文件权限设置为 644
    • 使用专用用户运行 Web 服务器
  3. 定期备份

    • 定期备份证书文件
    • 测试备份恢复流程
    • 保留多个备份版本

许可证

本脚本基于 MIT 许可证发布,详见 LICENSE 文件。

贡献

欢迎提交 Issue 和 Pull Request 来改进这个脚本。

支持

如果您在使用过程中遇到问题,请:

  1. 查看本文档的故障排除部分
  2. 检查脚本日志文件
  3. 提交 Issue 并提供详细的错误信息

About

ssl-acme-manager

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages