# SSLCertAutoApply **Repository Path**: SophiaGCH/sslcert-auto-apply ## Basic Information - **Project Name**: SSLCertAutoApply - **Description**: 阿里云ssl证书自动申请部署 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-08-26 - **Last Updated**: 2025-08-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # SSL证书自动管理工具 一个用于自动管理阿里云SSL证书的Java工具,能够监控证书到期情况、自动申请即将到期的证书,并下载nginx格式的证书文件。 ## 🔄 最新更新 **已将模拟调用更换为真实API调用,并新增过期证书处理功能**: - ✅ **SSL证书列表查询**: 使用真实的 `ListUserCertificateOrderRequest` API - ✅ **证书申请**: 使用真实的 `CreateCertificateRequestRequest` API - ✅ **证书状态查询**: 使用真实的 `DescribeCertificateStateRequest` API - ✅ **即将过期证书检测**: 检测在指定天数内到期的证书 - 🆕 **已过期证书检测**: 检测已经过期的证书 - 🆕 **综合证书状态检查**: 一次性检查所有证书状态 - 🆕 **智能续期处理**: 同时处理即将过期和已过期的证书 - ⚠️ **证书下载**: 由于旧版SDK限制,仍使用示例实现(需要根据最新SDK版本调整) ## ⚠️ 重要说明 1. **需要真实的阿里云账号**: 在 `ssl-config.json` 中配置您的真实AccessKey和AccessKey Secret 2. **权限要求**: 账号需要拥有SSL证书管理相关权限 3. **SDK版本兼容性**: 当前使用的是旧版SDK,部分API可能需要根据最新SDK调整 4. **生产环境测试**: 在生产环境使用前,请先在测试环境验证 ## 功能特性 - ✅ 自动检测SSL证书到期情况(默认提前30天检查) - **使用真实API** - 🆕 自动检测已过期的SSL证书 - **新增功能** - 🆕 综合证书状态检查(一次性查看所有问题证书) - **新增功能** - ✅ 自动申请即将过期和已过期的SSL证书 - **使用真实API,增强功能** - ⚠️ 自动下载nginx格式的证书文件(.pem和.key) - **部分使用示例实现** - ✅ 支持多域名批量管理 - ✅ 完整的日志记录和错误处理 - ✅ 灵活的配置管理 - ✅ 自动生成nginx SSL配置示例 ## 🔧 API实现详情 ### 已实现的真实API调用 1. **证书列表查询** (`getAllCertificates`) - 使用: `ListUserCertificateOrderRequest` - 状态: ✅ 已实现真实API调用 - 说明: 支持分页查询,包含错误处理 2. **证书申请** (`applyCertificate`) - 使用: `CreateCertificateRequestRequest` - 状态: ✅ 已实现真实API调用 - 说明: 支持DNS验证方式,自动等待证书签发 3. **证书状态查询** (`getCertificateStatus`) - 使用: `DescribeCertificateStateRequest` - 状态: ✅ 已实现真实API调用 - 说明: 支持定时轮询,自动检测证书签发状态 ### 需要调整的API 4. **证书下载** (`downloadCertificate`) - 现状: ⚠️ 使用示例实现 - 原因: 旧版SDK中下载API结构与最新版本不兼容 - 建议: 升级到最新SDK版本或使用HTTP直接调用 ### 兼容性处理 - ✅ **错误降级**: 当API调用失败时,程序不会崩溃,而是返回空列表或示例数据 - ✅ **日志记录**: 所有API调用都有详细的日志记录,便于调试 - ✅ **权限检查**: 当权限不足时,会提示明确的错误信息 ## 快速开始 ### 1. 编译项目 ```bash mvn clean package ``` ### 2. 生成配置文件 首次运行时,工具会自动生成配置文件模板: ```bash java -jar target/dnsGetSet-1.0-SNAPSHOT.jar ``` ### 3. 配置阿里云账号信息 编辑生成的 `ssl-config.json` 文件: ```json { \"accessKeyId\": \"你的阿里云AccessKey ID\", \"accessKeySecret\": \"你的阿里云AccessKey Secret\", \"regionId\": \"cn-hangzhou\", \"expireCheckDays\": 30, \"downloadPath\": \"./ssl-certs\", \"domains\": [ \"example.com\", \"www.example.com\" ], \"contactEmail\": \"your-email@example.com\", \"contactPhone\": \"13800138000\", \"organizationName\": \"你的组织名称\" } ``` ### 4. 运行工具 ```bash # 自动续期所有需要续期的证书(包括即将过期和已过期,默认操作) java -jar target/dnsGetSet-1.0-SNAPSHOT.jar # 仅检查即将到期的证书(不包括已过期) java -jar target/dnsGetSet-1.0-SNAPSHOT.jar check # 仅检查已过期的证书 java -jar target/dnsGetSet-1.0-SNAPSHOT.jar check-expired # 检查所有证书状态(包括即将过期和已过期) java -jar target/dnsGetSet-1.0-SNAPSHOT.jar check-all # 列出所有证书 java -jar target/dnsGetSet-1.0-SNAPSHOT.jar list # 显示帮助信息 java -jar target/dnsGetSet-1.0-SNAPSHOT.jar help ``` ## 详细配置说明 ### 配置文件参数 | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | accessKeyId | String | 是 | 阿里云AccessKey ID | | accessKeySecret | String | 是 | 阿里云AccessKey Secret | | regionId | String | 否 | 阿里云区域ID,默认cn-hangzhou | | expireCheckDays | Integer | 否 | 证书到期检查天数,默认30天 | | downloadPath | String | 否 | 证书下载保存路径,默认./ssl-certs | | domains | Array | 是 | 需要监控的域名列表 | | contactEmail | String | 是 | 申请证书的联系邮箱 | | contactPhone | String | 否 | 申请证书的联系电话 | | organizationName | String | 否 | 申请证书的组织名称 | ### 命令行参数 | 参数 | 说明 | |------|------| | -c, --config | 指定配置文件路径(默认:ssl-config.json)| | -a, --action | 指定执行的操作(check/auto/list/help)| ### 操作类型 - **check**: 仅检查即将到期的证书,不进行自动申请 - **check-expired**: 仅检查已过期的证书,不进行自动申请 - **check-all**: 检查所有证书状态(包括即将过期和已过期),不进行自动申请 - **auto**: 自动续期所有需要续期的证书(默认操作) - **list**: 列出所有SSL证书信息 - **help**: 显示帮助信息 ## 阿里云权限配置 使用此工具需要配置阿里云RAM用户权限,至少包含以下权限: 1. **SSL证书管理权限**: - `cas:DescribeCertificateState` - `cas:ListUserCertificateOrder` - `cas:CreateCertificateRequest` - `cas:DescribeDownloadCertificate` 2. **建议的权限策略**: ```json { \"Version\": \"1\", \"Statement\": [ { \"Effect\": \"Allow\", \"Action\": [ \"cas:*\" ], \"Resource\": \"*\" } ] } ``` ## 证书文件结构 工具会将下载的证书保存在指定目录,文件结构如下: ``` ssl-certs/ ├── example.com_20231201_143022/ │ ├── example.com.pem # nginx证书文件 │ └── example.com.key # nginx私钥文件 └── www.example.com_20231201_143055/ ├── www.example.com.pem └── www.example.com.key ``` ## 定时任务配置 可以通过系统的定时任务功能定期运行此工具: ### Linux/macOS (crontab) ```bash # 每天凌晨2点检查证书 0 2 * * * /usr/bin/java -jar /path/to/ssl-cert-manager.jar auto # 每周一上午9点检查证书 0 9 * * 1 /usr/bin/java -jar /path/to/ssl-cert-manager.jar auto ``` ### Windows (任务计划程序) 1. 打开"任务计划程序" 2. 创建基本任务 3. 设置触发器(如每天、每周) 4. 设置操作:启动程序 - 程序:`java` - 参数:`-jar C:\\path\\to\\ssl-cert-manager.jar auto` ## 注意事项 1. **证书申请限制**:阿里云免费SSL证书有申请限制,请合理规划使用 2. **DNS验证**:证书申请使用DNS验证方式,需要确保域名解析正确 3. **申请时间**:证书申请可能需要几分钟到几十分钟不等 4. **权限要求**:确保阿里云RAM用户具有SSL证书管理权限 5. **网络连接**:工具需要能够访问阿里云API接口 ## 故障排除 ### 常见错误 1. **配置文件错误**:检查JSON格式是否正确,必填字段是否完整 2. **权限不足**:确认RAM用户具有SSL证书管理权限 3. **网络连接问题**:检查网络连接和防火墙设置 4. **证书申请失败**:检查域名是否正确,DNS设置是否有效 ### 日志查看 工具会输出详细的日志信息,包括: - 证书检查结果 - 申请进度 - 下载状态 - 错误信息 ## 更新日志 ### v1.0.0 - 初始版本发布 - 支持阿里云SSL证书自动管理 - 支持多域名批量处理 - 支持nginx格式证书下载 ## 许可证 本项目基于 MIT 许可证开源。 ## 联系方式 如有问题或建议,请提交Issue或联系开发者。