# SSL 证书自动申请测试脚本使用说明 ## 功能 `test_ssl_auto.py` 是一个完整的测试脚本,用于测试从路由创建到 SSL 证书申请的整个流程。 ## 测试步骤 脚本会依次执行以下步骤,每个步骤都会显示成功或失败: 1. **检查系统依赖** - 检查 certbot、Python 模块等 2. **检查 APISIX 服务** - 验证 APISIX Admin API 是否可访问 3. **检查 Webroot 目录** - 检查验证文件目录是否存在 4. **检查/创建 Webroot 路由** - 检查或创建验证路由 5. **测试验证路径** - 测试验证路径是否可访问 6. **创建测试路由** - 创建测试域名路由 7. **申请 SSL 证书** - 使用 Let's Encrypt 申请证书 8. **同步证书到 APISIX** - 将证书上传到 APISIX 9. **验证证书信息** - 验证证书是否有效 ## 使用方法 ### 基本用法 ```bash # 使用自动生成的测试域名(测试完成后自动清理) python3 test_ssl_auto.py # 指定测试域名 python3 test_ssl_auto.py --domain test.example.com # 指定配置文件 python3 test_ssl_auto.py --config config.json --domain test.example.com ``` ### 选项说明 - `--domain, -d`: 指定测试域名(不指定则自动生成) - `--config, -c`: 指定配置文件路径(默认使用环境变量或默认配置) - `--cleanup`: 测试完成后清理测试数据(路由和 SSL 配置) - `--no-cleanup`: 测试完成后不清理测试数据 ### 示例 ```bash # 示例1: 快速测试(自动生成域名,自动清理) python3 test_ssl_auto.py # 示例2: 测试指定域名(保留测试数据) python3 test_ssl_auto.py --domain test.jingrowtools.cn --no-cleanup # 示例3: 使用配置文件,测试完成后清理 python3 test_ssl_auto.py --config config.json --domain test.jingrowtools.cn --cleanup ``` ## 输出说明 ### 成功输出示例 ``` ✅ 检查系统依赖 - 成功 ✅ 检查 APISIX 服务 - 成功 ✅ 检查 Webroot 目录 - 成功 ... ``` ### 失败输出示例 ``` ❌ 检查系统依赖 - 失败 ❌ 检查 APISIX 服务 - 异常: Connection refused ... ``` ## 注意事项 1. **域名解析**: 测试域名必须 DNS 解析到当前服务器,否则证书申请会失败 2. **Staging 模式**: 默认使用 staging 模式(测试环境),不会消耗生产环境配额 3. **权限要求**: 某些操作需要 root 权限(如创建证书文件) 4. **清理数据**: 使用自动生成的域名时,默认会清理测试数据;指定域名时,默认保留数据 ## 测试流程 ``` 开始测试 ↓ 检查依赖 → 失败 → 结束 ↓ 成功 检查 APISIX → 失败 → 结束 ↓ 成功 检查 Webroot → 失败 → 结束 ↓ 成功 检查/创建路由 → 失败 → 结束 ↓ 成功 测试验证路径 → 失败 → 结束 ↓ 成功 创建测试路由 → 失败 → 结束 ↓ 成功 申请证书 → 失败 → 结束 ↓ 成功 同步证书 → 失败 → 结束 ↓ 成功 验证证书 → 完成 ↓ 清理数据(可选) ↓ 显示测试总结 ``` ## 故障排查 ### 1. Certbot 未安装 ```bash sudo apt-get install certbot ``` ### 2. APISIX 服务不可访问 ```bash # 检查 APISIX 是否运行 docker ps | grep apisix # 检查端口 netstat -tlnp | grep 9180 ``` ### 3. Webroot 目录不存在 ```bash sudo mkdir -p /var/www/certbot/.well-known/acme-challenge sudo chown -R www-data:www-data /var/www/certbot ``` ### 4. 验证路径不可访问 - 检查 webroot 路由是否正确配置 - 检查路由 priority 是否足够高 - 检查路由 host 是否匹配 ## 完整测试示例 ```bash # 1. 准备测试域名(确保 DNS 已解析) export TEST_DOMAIN="test-$(date +%s).jingrowtools.cn" # 2. 运行测试 python3 test_ssl_auto.py --domain $TEST_DOMAIN --no-cleanup # 3. 检查结果 curl -v https://$TEST_DOMAIN # 4. 清理(如果需要) python3 ssl_manager.py sync --domain $TEST_DOMAIN # 先同步证书 # 然后手动删除路由和 SSL 配置 ``` ## 与生产环境集成 测试通过后,可以: 1. 修改 `config.json` 设置 `letsencrypt_staging: false` 2. 使用 `ssl_manager.py` 申请生产证书 3. 配置自动续期 ```bash # 申请生产证书 python3 ssl_manager.py request --domain your-domain.com # 启用自动续期 sudo systemctl enable apisix-ssl-renew.timer sudo systemctl start apisix-ssl-renew.timer ```