# ssl-cert-tool
**Repository Path**: luckythc/ssl-cert-tool
## Basic Information
- **Project Name**: ssl-cert-tool
- **Description**: 这是一个使用Go语言编写的命令行工具,用于通过阿里云DNS验证方式申请Let's Encrypt SSL证书,支持单域名、多域名和泛域名,支持windows、Linux和macOs。
- **Primary Language**: Go
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-11-14
- **Last Updated**: 2025-11-14
## Categories & Tags
**Categories**: Uncategorized
**Tags**: 免费证书, 证书申请, 证书自动更新, ssl
## README
# Let's Encrypt 证书申请工具
这是一个使用Go语言编写的命令行工具,用于通过阿里云DNS验证方式申请Let's Encrypt SSL证书,支持单域名、多域名和泛域名。
## 功能特性
- 下载直接运行命令行,无需安装,无需配置环境变量
- 密钥安全保留本地,无需上云
- 支持Windows、Linux、macOS等多平台
- 使用阿里云DNS验证域名所有权
- 自动申请和保存Let's Encrypt SSL证书
- 支持测试环境和生产环境
- 自动将证书更新到Web服务器(暂未严格测试):
- 支持Nginx、IIS(Windows)、Tomcat
- 支持自定义Web平台(Node.js、Python、Go、C++等HTTP服务器)
- 可配置自动重启Web服务
## TODO
- 增加到期自动更新证书功能(目前可通过自行添加crontab任务实现)
- 支持更多免费证书服务商(如ZeroSSL等)
- 增加其他DNS服务商的支持(如Cloudflare、GoDaddy等)
- 测试完全支持Nginx、IIS(Windows)、Tomcat
- 测试自定义Web平台(Node.js、Python、Go、C++等HTTP服务器)
- 增加云上Web服务器的支持(如OSS、LIB、AWS EC2、Azure App Service等)
## 安装
### 预编译二进制文件
可以直接从`output`目录获取预编译的二进制文件:
- Windows: `ssl-cert-tool-windows-amd64.exe`
- Linux: `ssl-cert-tool-linux-amd64`
- macOS: `ssl-cert-tool-darwin-amd64`
### 从源码构建
```bash
# 克隆项目(如果适用)
# git clone https://github.com/luckythc/ssl-cert-tool.git
cd ssl-cert-tool
# 安装依赖
go mod tidy
# 构建Windows版本
go build -o ssl-cert-tool-windows-amd64.exe main.go
# 构建Linux版本
export GOOS=linux
export GOARCH=amd64
export CGO_ENABLED=0
go build -o ssl-cert-tool-linux-amd64 main.go
```
## 使用方法
```bash
# Windows
ssl-cert-tool-windows-amd64.exe --domains example.com --alidns-key 你的阿里云AccessKey --alidns-secret 你的阿里云AccessSecret
# Linux
./ssl-cert-tool-linux-amd64 --domains example.com,www.example.com --alidns-key 你的阿里云AccessKey --alidns-secret 你的阿里云AccessSecret
```
### 参数说明
- `--domains`:必需,需要申请证书的域名列表,多个域名之间用逗号分隔
- `--email`:可选,用于接收Let's Encrypt通知的邮箱地址
- `--alidns-key`:必需,阿里云DNS API的AccessKey
- `--alidns-secret`:必需,阿里云DNS API的AccessSecret
- `--output`:可选,证书文件保存目录,默认为当前目录
- `--staging`:可选,使用Let's Encrypt测试环境,避免生产环境限制,默认值为true
## 证书文件
申请成功后,工具会在指定目录生成以下证书文件:
- `example.com.key`:私钥文件
- `example.com.crt`:证书文件
- `example.com.fullchain.crt`:完整证书链(证书+中间证书)
- `example.com.chain.crt`:证书链(中间证书)
## 注意事项
1. 请确保您的阿里云账号有足够的权限管理DNS记录
2. 首次使用建议使用`--staging`参数在测试环境中测试
3. Let's Encrypt有速率限制,生产环境请谨慎使用
4. 证书有效期为90天,需要定期更新
5. Web平台配置需要确保程序有足够权限访问证书目录和执行重启命令
## 依赖
- [go-acme/lego](https://github.com/go-acme/lego):ACME客户端库
- [aliyun/alibaba-cloud-sdk-go](https://github.com/aliyun/alibaba-cloud-sdk-go):阿里云SDK
### 配置文件说明
可使用配置文件替代命令行参数,工具会自动读取当前目录下的config.yaml文件,优先级低于命令行参数。以下是配置项的详细说明:
#### 基本配置
- `domains`: 需要申请证书的域名列表
- `email`: 用于接收 Let's Encrypt 通知的邮箱地址(可选)
- `output_dir`: 证书保存目录
- `use_staging`: 是否使用 Let's Encrypt 测试环境(建议首次使用时设为 true)
- `aliyun_dns_key`: 阿里云DNS API的AccessKey
- `aliyun_dns_secret`: 阿里云DNS API的AccessSecret
#### Web平台配置
工具使用统一的`web_platforms`配置结构,支持多种Web平台的证书自动更新:
1. **配置结构**
- 所有Web平台配置都在`web_platforms`数组中定义
- 每个平台配置包含:
- `type`: 平台类型("nginx"、"iis"、"tomcat"或"custom")
- `enabled`: 是否启用此平台
- `config_path`: 配置文件或证书存储路径
- `certificate_key`: 证书密钥文件保存路径
- `certificate_crt`: 证书文件保存路径
- `restart`: 更新证书后是否重启服务
- `restart_command`: 自定义平台的重启命令(仅对type="custom"有效)
- `name`: 自定义平台的名称(仅对type="custom"有效)
2. **平台类型说明**
- `nginx`: Nginx Web服务器
- `iis`: Windows IIS Web服务器
- `tomcat`: Apache Tomcat Web服务器
- `custom`: 自定义Web平台(支持Node.js、Python、Go、C++等HTTP服务器)
## 配置文件示例
您可以创建一个`config.yaml`文件代替命令行参数,示例如下:
```yaml
# 域名配置(支持单个或多个域名)
domains:
- example.com
- www.example.com
- api.example.com
# 用于接收 Let's Encrypt 通知的邮箱地址(可选)
email: admin@example.com
# 阿里云DNS API凭证
aliyun_dns_key: your-access-key
aliyun_dns_secret: your-access-secret
# 证书保存目录
output_dir: ./certificates
# 是否使用Let's Encrypt测试环境
use_staging: true
# Web服务器配置
web_platforms:
# Nginx配置
- type: nginx
enabled: false
restart: true
config_path: /etc/nginx/nginx.conf
certificate_key: /etc/nginx/ssl/example.com.key
certificate_crt: /etc/nginx/ssl/example.com.crt
# IIS配置
- type: iis
enabled: false
restart: true
config_path: "C:\\Program Files\\IIS\\Certificates"
certificate_key: "C:\\Program Files\\IIS\\Certificates\\example.com.key"
certificate_crt: "C:\\Program Files\\IIS\\Certificates\\example.com.crt"
# Tomcat配置
- type: tomcat
enabled: false
restart: true
config_path: /opt/tomcat/conf/server.xml
certificate_key: /opt/tomcat/conf/ssl/example.com.key
certificate_crt: /opt/tomcat/conf/ssl/example.com.crt
# 自定义Web平台配置
- type: custom
name: nodejs-server
enabled: true
restart: true
config_path: /path/to/nodejs/certs/
certificate_key: /path/to/nodejs/certs/server.key
certificate_crt: /path/to/nodejs/certs/server.crt
restart_command: 'pm2 restart my-nodejs-app'
```
## 参与贡献
将贡献者公司或个人的名字放到这里
| 时间 | 使用者公司/个人 | 备注 |
|----------------|----------|------|
## 许可证
MIT