3.9 KiB
3.9 KiB
完整测试流程说明
是的,测试脚本执行的是完整的创建路由并自动申请 SSL 证书的流程
测试流程步骤
当使用 python3 test_ssl_auto.py --domain test.jingrowtools.cn 时,脚本会依次执行:
1. 检查系统依赖 ✅
- 检查 Certbot 是否安装
- 检查 Python 模块是否可用
- 检查 OpenSSL 是否安装
2. 检查 APISIX 服务 ✅
- 验证 APISIX Admin API 是否可访问
- 检查连接和认证
3. 检查 Webroot 目录 ✅
- 检查
/var/www/certbot目录是否存在 - 创建
.well-known/acme-challenge子目录
4. 检查/创建 Webroot 路由 ✅ 自动创建验证路由
- 检查是否存在该域名的 webroot 路由
- 如果不存在,自动创建:
- 路由 ID:
certbot-webroot-{domain} - Host: 指定的域名
- URI:
/.well-known/acme-challenge/* - Priority: 10000(最高优先级)
- 功能: 自动读取验证文件并返回
- 路由 ID:
5. 测试验证路径 ⚠️ 测试验证路由是否工作
- 创建测试文件
- 通过 APISIX 访问验证路径
- 验证路由是否正确返回文件内容
6. 创建测试路由 ✅ 创建用户指定的域名路由
- 自动创建域名路由:
- 路由 ID: 域名本身
- Host: 指定的域名
- URI:
/* - Upstream: 配置的后端服务
- 这是实际业务路由
7. 申请 SSL 证书 ✅ 自动申请证书
- 使用 Certbot 申请 Let's Encrypt 证书
- 自动处理验证流程
- 证书保存到
/etc/letsencrypt/live/{domain}/
8. 同步证书到 APISIX ✅ 自动上传证书
- 读取证书文件
- 通过 APISIX Admin API 创建/更新 SSL 配置
- 关联到域名
9. 验证证书信息 ✅
- 使用 OpenSSL 验证证书
- 显示证书详细信息
完整流程示例
# 执行测试
python3 test_ssl_auto.py --domain test.jingrowtools.cn --no-cleanup
# 流程输出:
[步骤 1/9] 检查系统依赖 ✅
[步骤 2/9] 检查 APISIX 服务 ✅
[步骤 3/9] 检查 Webroot 目录 ✅
[步骤 4/9] 检查/创建 Webroot 路由 ✅
→ 自动创建: certbot-webroot-test-jingrowtools-cn
[步骤 5/9] 测试验证路径 ✅
[步骤 6/9] 创建测试路由 ✅
→ 自动创建: test.jingrowtools.cn (业务路由)
[步骤 7/9] 申请 SSL 证书 ✅
→ Certbot 自动申请证书
[步骤 8/9] 同步证书到 APISIX ✅
→ 证书自动上传到 APISIX
[步骤 9/9] 验证证书信息 ✅
自动化的部分
✅ 自动创建验证路由
- 无需手动配置 webroot 路由
- 脚本自动检测并创建
- 确保验证路径可访问
✅ 自动创建业务路由
- 根据指定域名自动创建路由
- 配置默认的 upstream
- 路由立即可用
✅ 自动申请证书
- 调用 Certbot 自动申请
- 处理所有验证流程
- 无需手动干预
✅ 自动同步证书
- 读取证书文件
- 自动上传到 APISIX
- 自动关联域名
权限问题处理
如果遇到权限问题(如测试输出中的错误),脚本已优化:
- 自动尝试使用 sudo:如果直接写入失败,会尝试使用 sudo
- 容错处理:即使验证路径测试失败,也会继续执行证书申请(Certbot 会自动处理文件创建)
- 提示信息:提供清晰的权限修复建议
修复权限(推荐)
# 一次性修复权限
sudo mkdir -p /var/www/certbot/.well-known/acme-challenge
sudo chown -R $USER:$USER /var/www/certbot
sudo chmod -R 755 /var/www/certbot
总结
是的,测试脚本执行的是完整的自动化流程:
- ✅ 自动创建验证路由(webroot 路由)
- ✅ 自动创建业务路由(用户指定的域名)
- ✅ 自动申请 SSL 证书(Let's Encrypt)
- ✅ 自动同步证书到 APISIX(上传并配置)
整个过程完全自动化,只需要:
- 提供域名
- 确保 DNS 已解析
- 运行测试脚本
测试完成后,域名路由和 SSL 证书都已配置完成,可以直接使用 HTTPS 访问。