python&nodejs应用https代理抓包证书验证问题解决方法
字数 937 2025-08-10 17:51:49
Python & Node.js 应用 HTTPS 代理抓包证书验证问题解决方法
0x00 前言
在分析 Node.js + Python 编写的应用时,通过代理抓包 HTTPS 流量常会遇到证书验证问题。本文详细介绍两种解决思路及具体实现方法。
0x01 思路一:代码中关闭 SSL 证书校验
1. Python 应用
方法一:修改请求参数
对于 requests 库,在所有请求方法中添加 verify=False 参数:
response = requests.get(url, verify=False)
response = requests.post(url, data=payload, verify=False)
response = requests.request("POST", url, headers=headers, data=payload, verify=False)
方法二:修改 requests 库源码
- 找到 requests 库安装位置:
import requests
print(requests.__file__)
- 修改同目录下的
sessions.py文件,找到__init__方法中的:
self.verify = True
改为:
self.verify = False
方法三:urllib 禁用证书验证
import ssl
import urllib.request
ssl._create_default_https_context = ssl._create_unverified_context
url = "https://example.com"
response = urllib.request.urlopen(url)
2. Node.js 应用
方法一:设置环境变量
在 /etc/environment 文件末尾添加:
NODE_TLS_REJECT_UNAUTHORIZED=0
然后注销重新登录或重启系统。
方法二:代码中设置
process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
0x02 思路二:导入代理证书到信任库
1. 证书格式转换
将 BurpSuite 导出的 DER 格式证书转换为 PEM 格式:
openssl x509 -inform DER -in cacert.der -out burp.pem
2. 验证证书有效性
# 不带证书测试
curl https://example.com
# 禁用验证测试
curl -k https://example.com
# 带证书测试
curl --cacert burp.pem https://example.com
3. Python 证书库处理
查找证书库位置
import certifi
print(certifi.where())
情况一:使用 Python 内置证书库
将 burp.pem 内容追加到 cacert.pem 文件末尾,确保内容间有空行。
情况二:使用系统证书库
- 将证书复制到指定目录:
sudo cp burp.pem /usr/local/share/ca-certificates/burp.crt
- 更新系统证书:
sudo update-ca-certificates
4. 其他系统证书导入
macOS
- 双击
burp.pem文件 - 将证书拖放到"系统"钥匙串
- 设置"始终信任"
Windows
- 双击
burp.pem文件 - 选择"安装证书" → "本地计算机"
- 存储到"受信任的根证书颁发机构"
5. 删除错误证书
sudo update-ca-certificates -f
0x03 urllib.request.urlretrieve 超时问题解决
- 找到 urllib 库位置:
import urllib
print(urllib.__file__)
- 修改
request.py文件中的urlretrieve函数,添加超时参数:
with contextlib.closing(urlopen(url, data, timeout=20)) as fp:
总结
本文提供了两种解决 HTTPS 代理抓包证书验证问题的方法:
- 代码层面禁用证书验证(适用于开发和调试环境)
- 导入代理证书到信任库(更安全可靠)
根据实际需求选择合适的方法,生产环境建议使用证书导入方案。