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 库源码

  1. 找到 requests 库安装位置:
import requests
print(requests.__file__)
  1. 修改同目录下的 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 文件末尾,确保内容间有空行。

情况二:使用系统证书库

  1. 将证书复制到指定目录:
sudo cp burp.pem /usr/local/share/ca-certificates/burp.crt
  1. 更新系统证书:
sudo update-ca-certificates

4. 其他系统证书导入

macOS

  1. 双击 burp.pem 文件
  2. 将证书拖放到"系统"钥匙串
  3. 设置"始终信任"

Windows

  1. 双击 burp.pem 文件
  2. 选择"安装证书" → "本地计算机"
  3. 存储到"受信任的根证书颁发机构"

5. 删除错误证书

sudo update-ca-certificates -f

0x03 urllib.request.urlretrieve 超时问题解决

  1. 找到 urllib 库位置:
import urllib
print(urllib.__file__)
  1. 修改 request.py 文件中的 urlretrieve 函数,添加超时参数:
with contextlib.closing(urlopen(url, data, timeout=20)) as fp:

总结

本文提供了两种解决 HTTPS 代理抓包证书验证问题的方法:

  1. 代码层面禁用证书验证(适用于开发和调试环境)
  2. 导入代理证书到信任库(更安全可靠)

根据实际需求选择合适的方法,生产环境建议使用证书导入方案。

Python & Node.js 应用 HTTPS 代理抓包证书验证问题解决方法 0x00 前言 在分析 Node.js + Python 编写的应用时,通过代理抓包 HTTPS 流量常会遇到证书验证问题。本文详细介绍两种解决思路及具体实现方法。 0x01 思路一:代码中关闭 SSL 证书校验 1. Python 应用 方法一:修改请求参数 对于 requests 库,在所有请求方法中添加 verify=False 参数: 方法二:修改 requests 库源码 找到 requests 库安装位置: 修改同目录下的 sessions.py 文件,找到 __init__ 方法中的: 改为: 方法三:urllib 禁用证书验证 2. Node.js 应用 方法一:设置环境变量 在 /etc/environment 文件末尾添加: 然后注销重新登录或重启系统。 方法二:代码中设置 0x02 思路二:导入代理证书到信任库 1. 证书格式转换 将 BurpSuite 导出的 DER 格式证书转换为 PEM 格式: 2. 验证证书有效性 3. Python 证书库处理 查找证书库位置 情况一:使用 Python 内置证书库 将 burp.pem 内容追加到 cacert.pem 文件末尾,确保内容间有空行。 情况二:使用系统证书库 将证书复制到指定目录: 更新系统证书: 4. 其他系统证书导入 macOS 双击 burp.pem 文件 将证书拖放到"系统"钥匙串 设置"始终信任" Windows 双击 burp.pem 文件 选择"安装证书" → "本地计算机" 存储到"受信任的根证书颁发机构" 5. 删除错误证书 0x03 urllib.request.urlretrieve 超时问题解决 找到 urllib 库位置: 修改 request.py 文件中的 urlretrieve 函数,添加超时参数: 总结 本文提供了两种解决 HTTPS 代理抓包证书验证问题的方法: 代码层面禁用证书验证(适用于开发和调试环境) 导入代理证书到信任库(更安全可靠) 根据实际需求选择合适的方法,生产环境建议使用证书导入方案。