python的requests请求https时,与fiddler冲突造成ssl错误

4 篇文章 0 订阅
1 篇文章 0 订阅

目录

原因:

解决方案:

把fiddler关掉就好

去掉requests的ssl验证

保持fiddler和requests的证书一致

        使用从浏览器导出证书,可以放到代码目录下,走fiddler代理

        使用fiddler导出的证书(要用openssl转成pem格式),走fiddler代理

关掉fiddler“启动时作为系统代理”


 

 

 

当开着fiddler时,使用requests发送https请求报错

 

(Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1125)')))

 

原因:

         fiddler默认是启动作为系统代理的,然后requests默认是开启ssl验证的,fiddler配置抓取https时,就会导致两处ssl证书各种问题。

        fiddler作为中间人获取了网站的公钥和客户端的密钥,然后伪装成客户端和服务端通信(使用网站公钥和自己的密钥),再伪装成服务端把收到的信息发送给客户端(使用自己的公钥和客户端的密钥)。fiddler的公钥不是ca认证的,所以requests就无法通过内置的ca公钥解密,验证就会失败。所以要不不验证,要不指定和特定的证书进行对比验证,就能解决问题。

        需要先了解  https原理

 

解决方案:

  • 把fiddler关掉就好

 

  • 去掉requests的ssl验证

         使用fiddler代理,去掉requests自带的证书验证,可以正常使用,verify=False。

response=requests.get(url=url, headers=header,proxies=proxies, verify=False)  # 不使用requests库自带的ssl证书

 

  • 保持fiddler和requests的证书一致

 

         使用从浏览器导出证书,可以放到代码目录下,走fiddler代理

 

 

 

certFile = "浏览器.cer"
response=requests.get(url, proxies=proxies, verify=certFile) 

 

             使用fiddler导出的证书(要用openssl转成pem格式),走fiddler代理

 

cer格式证书转pem格式: 

openssl x509 -inform der -in apple_pay.cer -out apple_pay_certificate.pem

 

certFile = ".\FiddlerRoot.pem"
proxies = {'http': 'http://localhost:8888', 'https': 'http://localhost:8888'}
response=requests.post(url, proxies=proxies, verify=certFile)  # 使用fiddler导出的证书

 

通过fiddler捉包requests发出的https时,要保证requests使用的证书和fiddler的相同,否则都会报错。

 

 

 

  • 关掉fiddler“启动时作为系统代理”

把fiddler,tool——connecting下的“启动时作为系统代理”去掉,但是这样要抓取哪个软件的数据包就要在哪个软件设置通过fiddler代理。但是如果通过fiddler代理https,问题依旧,所以一般不建议这样做

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值