# 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