apisix/ssl_manager/TEST_README.md

174 lines
4.3 KiB
Markdown

# 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
```