ssl新闻资讯

文档中心

Requests搴撳浣曡幏鍙朒TTPS鏍硅瘉涔︼紵涓€鏂囨悶鎳侾ython瀹夊叏閫氫俊鏈哄埗

时间 : 2025-09-27 16:32:17浏览量 : 3

2Requests搴撳浣曡幏鍙朒TTPS鏍硅瘉涔︼紵涓€鏂囨悶鎳侾ython瀹夊叏閫氫俊鏈哄埗

在网络安全领域,HTTPS通信的安全性依赖于数字证书体系。当我们用Python的`requests`库访问HTTPS网站时,背后其实经历了一场“证书信任链”的验证。本文将用通俗易懂的方式,结合具体场景,带你理解`requests`如何获取并验证HTTPS根证书。

一、HTTPS证书链的本质:像查户口一样验证身份

想象你要去银行办业务,柜员会要求你出示身份证+户口本+派出所证明。HTTPS的证书链验证也是类似的逻辑:

- 末端证书:网站本身的证书(相当于你的身份证)

- 中间证书:颁发机构的分支证书(相当于派出所证明)

- 根证书:顶级CA机构的证书(相当于公安部存档)

`requests`库需要找到可信的“公安部名单”(根证书),才能确认整个链条可信。

二、Requests默认从哪里获取根证书?

场景1:使用系统内置证书库(最常见)

```python

import requests

response = requests.get("https://example.com")

```

此时`requests`会自动调用操作系统或`certifi`库的根证书:

- Linux/macOS:通常读取`/etc/ssl/certs`

- Windows:调用系统加密API

- certifi后备方案:Python包自带的Mozilla CA列表

?? *真实案例*:某企业内网爬虫突然报错`SSL: CERTIFICATE_VERIFY_FAILED`,原因正是服务器更新了中间证书,但本地系统CA库未同步。

场景2:手动指定根证书文件

requests.get("https://example.com", verify="/path/to/custom_root.pem")

这在以下情况特别有用:

- 测试环境使用自签名证书

- 企业内网私有CA体系

三、深度技术点:Certificate Bundle的秘密

实际请求时,客户端需要完整的CA链条。现代服务器通常会通过OCSP Stapling技术将中间证书记录在TLS握手过程中发送,但根证书永远不会传输——因为它必须预先存在于客户端。

?? *抓包示例*:

用Wireshark观察访问https://google.com的握手过程:

1. Server Hello中包含谷歌的末端证书

2. Certificate消息追加了Google Trust Services中间证

3. 但没有GlobalSign根证(因为客户端应该已有)

四、企业级问题排查指南

故障1:缺少中间证书导致失败

错误现象:

SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed...

? 解决方案

方法1:更新certifi包

pip install --upgrade certifi

方法2:手动合并缺失的中间证到verify路径

with open("custom_bundle.pem", "wb") as f:

f.write(requests.certs.where().read_bytes())

f.write(b"\n--新增的中间证--\n")

故障2:自签名证书场景

临时关闭验证(仅限测试环境!)

requests.get("https://internal.site", verify=False)

正确做法是加载私有CA证:

requests.get("https://internal.site", verify="/path/to/company_root.pem")

五、安全工程师的建议黄金法则

1. 永远不要禁用验证

`verify=False`相当于不检查对方身份证就转账

2. 及时更新CA库存

```bash

Ubuntu示例更新命令

sudo update-ca-certificates --fresh

```

3. 关键系统使用Certificate Pinning

```python

只信任特定指纹的证书记录指纹(SHA256)

pinned_certs = {

'example.com': 'A1:B2:C3...'

}

与SEO关键词呼应

理解`requests获取https根证书`的原理,是Python开发者构建安全应用的必修课。无论是爬虫开发还是API调用,正确处理CA信任链能有效防范中间人攻击。记住——安全的本质不是复杂的技术堆砌,而是对每一个细节的正确把控。

TAG:requests 获取https根证书,