调试网络
This commit is contained in:
@@ -0,0 +1,218 @@
|
||||
# SSL证书处理指南
|
||||
|
||||
## 🔒 问题描述
|
||||
|
||||
在连接到DMS服务时,可能会遇到SSL证书验证失败的错误:
|
||||
|
||||
```
|
||||
SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1010)'))
|
||||
```
|
||||
|
||||
这通常发生在以下情况:
|
||||
- 服务器使用自签名证书
|
||||
- 证书链不完整
|
||||
- 本地缺少根证书
|
||||
- 开发/测试环境的证书配置问题
|
||||
|
||||
## 🛠️ 解决方案
|
||||
|
||||
### 方案1:忽略SSL证书验证(推荐用于开发/测试)
|
||||
|
||||
使用 `--ignore-ssl` 参数来忽略SSL证书验证:
|
||||
|
||||
```bash
|
||||
python run_api_tests.py \
|
||||
--dms ./assets/doc/dms/domain.json \
|
||||
--base-url https://www.dev.ideas.cnpc \
|
||||
--ignore-ssl \
|
||||
--strictness-level CRITICAL
|
||||
```
|
||||
|
||||
#### 特点:
|
||||
- ✅ 快速解决SSL证书问题
|
||||
- ✅ 适用于开发和测试环境
|
||||
- ⚠️ 会显示安全警告
|
||||
- ❌ 不推荐在生产环境使用
|
||||
|
||||
### 方案2:配置正确的SSL证书(推荐用于生产)
|
||||
|
||||
#### 2.1 安装根证书
|
||||
|
||||
```bash
|
||||
# Ubuntu/Debian
|
||||
sudo apt-get update
|
||||
sudo apt-get install ca-certificates
|
||||
|
||||
# CentOS/RHEL
|
||||
sudo yum update ca-certificates
|
||||
|
||||
# macOS
|
||||
# 通过钥匙串访问添加证书
|
||||
```
|
||||
|
||||
#### 2.2 添加自定义证书
|
||||
|
||||
如果服务器使用自签名证书,可以将证书添加到系统信任列表:
|
||||
|
||||
```bash
|
||||
# 下载证书
|
||||
openssl s_client -showcerts -connect www.dev.ideas.cnpc:443 </dev/null 2>/dev/null | openssl x509 -outform PEM > server.crt
|
||||
|
||||
# 添加到系统证书库(Ubuntu/Debian)
|
||||
sudo cp server.crt /usr/local/share/ca-certificates/
|
||||
sudo update-ca-certificates
|
||||
|
||||
# 添加到系统证书库(CentOS/RHEL)
|
||||
sudo cp server.crt /etc/pki/ca-trust/source/anchors/
|
||||
sudo update-ca-trust
|
||||
```
|
||||
|
||||
#### 2.3 使用环境变量
|
||||
|
||||
```bash
|
||||
# 设置证书文件路径
|
||||
export REQUESTS_CA_BUNDLE=/path/to/certificate.pem
|
||||
export SSL_CERT_FILE=/path/to/certificate.pem
|
||||
|
||||
# 运行测试
|
||||
python run_api_tests.py --dms ./assets/doc/dms/domain.json
|
||||
```
|
||||
|
||||
## 🧪 测试SSL配置
|
||||
|
||||
### 使用测试脚本
|
||||
|
||||
```bash
|
||||
# 运行SSL测试脚本
|
||||
python test_ssl_ignore.py
|
||||
```
|
||||
|
||||
这个脚本会:
|
||||
1. 测试使用 `--ignore-ssl` 参数的情况
|
||||
2. 测试不使用 `--ignore-ssl` 参数的情况
|
||||
3. 验证SSL忽略功能是否正常工作
|
||||
|
||||
### 手动测试
|
||||
|
||||
```bash
|
||||
# 测试SSL连接
|
||||
curl -v https://www.dev.ideas.cnpc/api/schema/manage/schema
|
||||
|
||||
# 忽略SSL测试
|
||||
curl -k -v https://www.dev.ideas.cnpc/api/schema/manage/schema
|
||||
```
|
||||
|
||||
## 📋 使用建议
|
||||
|
||||
### 开发环境
|
||||
```bash
|
||||
# 推荐使用SSL忽略
|
||||
python run_api_tests.py \
|
||||
--dms ./assets/doc/dms/domain.json \
|
||||
--base-url https://www.dev.ideas.cnpc \
|
||||
--ignore-ssl \
|
||||
--strictness-level CRITICAL
|
||||
```
|
||||
|
||||
### 测试环境
|
||||
```bash
|
||||
# 可以使用SSL忽略,但建议配置证书
|
||||
python run_api_tests.py \
|
||||
--dms ./assets/doc/dms/domain.json \
|
||||
--base-url https://test.ideas.cnpc \
|
||||
--ignore-ssl \
|
||||
--strictness-level HIGH
|
||||
```
|
||||
|
||||
### 生产环境
|
||||
```bash
|
||||
# 必须配置正确的SSL证书,不使用--ignore-ssl
|
||||
python run_api_tests.py \
|
||||
--dms ./assets/doc/dms/domain.json \
|
||||
--base-url https://prod.ideas.cnpc \
|
||||
--strictness-level CRITICAL
|
||||
```
|
||||
|
||||
## 🔧 技术实现
|
||||
|
||||
### 代码修改
|
||||
|
||||
1. **添加命令行参数**:
|
||||
```python
|
||||
parser.add_argument('--ignore-ssl', action='store_true',
|
||||
help='忽略SSL证书验证(不推荐在生产环境使用)')
|
||||
```
|
||||
|
||||
2. **修改requests调用**:
|
||||
```python
|
||||
response = requests.get(url, verify=not ignore_ssl)
|
||||
```
|
||||
|
||||
3. **禁用SSL警告**:
|
||||
```python
|
||||
if ignore_ssl:
|
||||
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
|
||||
```
|
||||
|
||||
### 影响的文件
|
||||
|
||||
- `run_api_tests.py` - 添加命令行参数
|
||||
- `ddms_compliance_suite/input_parser/parser.py` - 修改SSL验证逻辑
|
||||
- `ddms_compliance_suite/test_orchestrator.py` - 传递SSL参数
|
||||
|
||||
## ⚠️ 安全注意事项
|
||||
|
||||
### 风险
|
||||
- **中间人攻击**:忽略SSL验证可能导致数据被截获
|
||||
- **数据泄露**:敏感信息可能被恶意服务器获取
|
||||
- **身份伪造**:无法验证服务器身份的真实性
|
||||
|
||||
### 最佳实践
|
||||
1. **仅在开发/测试环境使用** `--ignore-ssl`
|
||||
2. **生产环境必须配置正确的SSL证书**
|
||||
3. **定期更新证书和根证书库**
|
||||
4. **监控SSL证书过期时间**
|
||||
5. **使用HTTPS代替HTTP**
|
||||
|
||||
## 🔍 故障排除
|
||||
|
||||
### 常见错误
|
||||
|
||||
1. **证书过期**
|
||||
```
|
||||
certificate verify failed: certificate has expired
|
||||
```
|
||||
解决:更新服务器证书
|
||||
|
||||
2. **主机名不匹配**
|
||||
```
|
||||
certificate verify failed: Hostname mismatch
|
||||
```
|
||||
解决:使用正确的主机名或配置SAN
|
||||
|
||||
3. **自签名证书**
|
||||
```
|
||||
certificate verify failed: self signed certificate
|
||||
```
|
||||
解决:添加证书到信任列表或使用 `--ignore-ssl`
|
||||
|
||||
### 调试命令
|
||||
|
||||
```bash
|
||||
# 检查证书信息
|
||||
openssl s_client -showcerts -connect www.dev.ideas.cnpc:443
|
||||
|
||||
# 验证证书链
|
||||
openssl verify -CAfile /etc/ssl/certs/ca-certificates.crt server.crt
|
||||
|
||||
# 测试连接
|
||||
curl -v --cacert server.crt https://www.dev.ideas.cnpc
|
||||
```
|
||||
|
||||
## 📚 相关资源
|
||||
|
||||
- [Python requests SSL文档](https://requests.readthedocs.io/en/latest/user/advanced/#ssl-cert-verification)
|
||||
- [OpenSSL证书管理](https://www.openssl.org/docs/man1.1.1/man1/openssl-x509.html)
|
||||
- [urllib3安全警告](https://urllib3.readthedocs.io/en/stable/advanced-usage.html#ssl-warnings)
|
||||
|
||||
通过合理配置SSL证书处理,可以确保API测试工具在各种环境中正常工作,同时保持适当的安全性。
|
||||
Reference in New Issue
Block a user