文档中心
Python瀹炵幇HTTPS璇锋眰涓嶇敤璇佷功锛?绉嶆柟娉曞疄娴嬮伩鍧戞寚鍗?txt
时间 : 2025-09-27 16:31:42浏览量 : 3

作为网络安全从业者,我经常遇到这样的需求:用Python发送HTTPS请求时,系统提示证书验证失败。比如爬取某个老旧的内部系统,或者测试环境还没配置正式证书。这时候如果直接忽略证书验证,可能会引发严重的安全风险。今天我就用实际代码示例,带大家系统分析3种常见方法的原理和风险(附解决方案)。
一、为什么Python HTTPS会报证书错误?
当你的代码出现`ssl.SSLCertVerificationError`错误时,本质是Python的`urllib3/requests`库在严格执行HTTPS握手规则:
```python
import requests
response = requests.get("https://过期或自签名的网站")
触发证书错误
```
这就像你打电话给银行客服,对方接起来却说"我是你领导,快转账"——没有正规证书的网站,可能就是中间人攻击的陷阱。
二、3种绕过证书验证的方法(附风险说明)
方法1:简单粗暴型(高危!)
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
? 原理:全局关闭SSL验证
? 风险:整个程序所有HTTPS请求都不验证证书,相当于拆掉了你家所有门锁
方法2:局部禁用型(仍有风险)
requests.get("https://xxx", verify=False)
? 原理:仅当前请求不验证
? 风险:会收到`InsecureRequestWarning`警告,黑客可能伪造DNS把你导向钓鱼网站
方法3:自签名证书白名单(推荐方案)
把服务器提供的PEM格式证书放在本地
requests.get("https://内部系统", verify="/path/to/server.pem")
? 安全机制:只信任指定证书
?? 防护效果:类似公司门禁卡系统——只有录入指纹的人才能进
三、企业级安全解决方案
? 场景1:开发测试环境
- 正确做法:
将测试环境的CA根证书加入信任链
import certifi
with open(certifi.where(), 'ab') as f:
f.write(b"\n--BEGIN CERTIFICATE--\n测试CA证书内容...")
? 场景2:生产环境临时故障
- 应急方案(需审批):
from requests.adapters import HTTPAdapter
from urllib3.util.ssl_ import create_urllib3_context
class CustomAdapter(HTTPAdapter):
def init_poolmanager(self, *args, **kwargs):
ctx = create_urllib3_context()
ctx.load_default_certs()
仍加载系统默认CA
kwargs['ssl_context'] = ctx
return super().init_poolmanager(*args, **kwargs)
s = requests.Session()
s.mount("https://紧急域名", CustomAdapter())
四、必须知道的4个安全常识
1. SSL vs TLS的区别
- SSL是过时的协议(已发现POODLE等漏洞),现在实际用的是TLS1.2/1.3
2. 浏览器为什么不报错?
- Chrome等浏览器会缓存CA机构列表,而Python每次都会重新校验
3. 最危险的中间人攻击案例
2025年某银行内部系统被入侵,就是因为运维在脚本里加了`verify=False`
4. 权威数据参考
[OWASP指南](https://cheatsheetseries.owasp.org/cheatsheets/TLS_Cheat_Sheet.html)明确要求:生产环境必须启用完整证书链验证
五、终极建议
临时绕过证书就像生病时吃止疼药——可以应急但不能根治。长期来看:
- 自建服务要用Let's Encrypt申请免费证书
- 对接老旧系统可以导出其证书加入信任库
- Docker环境下可通过卷挂载方式注入CA证书
下次遇到SSL错误时,不妨先执行这个诊断命令:
```bash
openssl s_client -connect 目标域名:443 -showcerts | less
这会显示完整的证书链信息,帮你精准定位问题根源。
记住:在网络安全领域,"图方便"往往是最贵的代价。
TAG:python https不用证书,python有没有证书,有什么关于python资格认证,python权威证书