如何使用Python requests库验证证书

Python requests库验证证书方法

问题分析

在进行某些APP的抓包时,有时会遇到即使信任了抓包软件的CA根证书也无法抓包的情况。这是因为一些APP采用了"SSL Pinning"技术,只信任代码中认为可信的证书。虽然我对逆向工程不太擅长,但我可以尝试用Python来模拟类似的技术。

解决方案

真正的SSL Pinning通常是通过预置网站所使用的根证书或中间证书来实现的。这样即使证书过期或更换,也能继续验证。

但我认为没有必要这么麻烦。一般Python程序连接的后端也不必在浏览器中调用,可以自签一个证书,然后自行验证。

因为中间人攻击重新签署的公钥证书的指纹与原始网站的不同,可利用这一点判断是否被抓包。

在Python中,一般使用requests库进行请求,而不是直接使用socket和ssl包。

我查了一下资料,发现有一些方法可以实现这个功能。

但是,用socket操作相对繁琐,于是我尝试询问AI,结果并不理想。

最终,我在Stack Overflow上找到了一些讨论,根据其建议,对代码进行了简单修改,最终实现了所需功能。

import requests
import hashlib

HTTPSConnection = requests.packages.urllib3.connection.HTTPSConnection
orig_HTTPSConnection_connect = HTTPSConnection.connect

def new_HTTPSConnection_connect(self):
    orig_HTTPSConnection_connect(self)
    try:
        self.peer_certificate = self.sock.getpeercert(binary_form=True)
    except AttributeError:
        pass

HTTPSConnection.connect = new_HTTPSConnection_connect

def verify_cert_request(url):
    with requests.get(url, stream=True, verify=False) as r:
        result = [hashlib.sha256(r.raw.connection.sock.getpeercert(binary_form=True)).hexdigest(), r.text]
    return result

result = verify_cert_request('https://www.baidu.com')
print(result[0])
print(result[1][:10])

使用这段代码,可以获取请求网站的证书指纹。如果不希望被抓包,可以先计算自己证书的hash指纹,在代码中判断请求网站的指纹是否与自己的相符。若不符,可考虑采取进一步反制措施。

总结

虽然Python作为解释型语言,代码相对容易查看,但这并不意味着不受保护。即使使用Cython加壳等方法,依然可能暴露源代码。一种可能的防御方法是修改依赖的库,使其返回正确的结果,以防止大多数抓包者的攻击。


文章来源地址https://www.toymoban.com/diary/python/748.html

到此这篇关于如何使用Python requests库验证证书的文章就介绍到这了,更多相关内容可以在右上角搜索或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

原文地址:https://www.toymoban.com/diary/python/748.html

如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请联系站长进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用
网站被降权了怎么处理,如何判断网站是否被降权?
上一篇 2024年03月16日 17:29
CentOS 7.6源码编译rpm包及打包到ISO镜像的实践教程
下一篇 2024年03月17日 21:36

相关文章

  • 使用Python的requests库发送HTTPS请求时的SSL证书验证问题

    问题描述 使用python的requests库去发送https请求,有时候不设置verify=False不报错,有时候又报错。 问题原因 使用Python的requests库发送HTTPS请求时,设置verify=False参数可以跳过SSL证书验证。默认情况下,requests库会验证SSL证书以确保请求的安全性。然而,在某些情况下,可能会出现

    2024年02月17日
    浏览(19)
  • 【网络安全】https与证书原理 | SSL Pinning及其绕过

    参考: https://segmentfault.com/a/1190000009002353?sort=newest https://zhuanlan.zhihu.com/p/353571366 https://juejin.cn/post/6863295544828444686 HTTPS=HTTP+TLS,其它的协议也类似,如FTPS=FTP+TLS 1) ClientHello Client 首先发送本地的 TLS 版本、支持的加密算法套件,并且生成一个随机数 R1 。 2)Server Hello Server 端确

    2024年02月05日
    浏览(15)
  • Python Requests模块忽略SSL证书、关闭警告

    目录 证书处理(SSL Cert Verification) 解决证书问题 很多网站都是https,但是不用证书也可以访问,大多数情况都是可以携带也可以不携带证书如知乎百度 等都是可带可不带但有硬性要求的,则必须带,比如对于定向的用户,拿到证书后才有权限访问某个特定网站。 关闭警告 一、忽

    2024年02月13日
    浏览(11)
  • C#/.Net 爬虫request.GetResponse()报错:基础连接已经关闭: 未能为 SSL/TLS 安全通道建立信任关系/根据验证过程,远程证书无效

    首先,先放置一张报错的图片: 原因: 网站的证书应该是失效了,并且我发起的请求是基于Https的,所以被系统认定为不安全的连接。并且通过微软官方文档的解释如下: 解决方案: 1.需要使用 ServicePointManager.SecurityProtoco 属性,这个属性的解释如下,详细可以看官方文档:

    2024年02月16日
    浏览(12)
  • Python爬虫学习日记——SSL证书验证

    问题引入:现在很多网站是使用HTTPS协议的,但是有些网站并没有设置好HTTPS证书,或者HTTPS的证书不被CA机构认可,这个时候访问这些网站就会报SSL证书错误 实例:访问https://www.ssr2.scrape.center/ 对于这种情况我们使用代码来爬取的效果 代码提示我们是SSL错误 因此如果就是要爬

    2024年02月16日
    浏览(19)
  • SSL证书如何使用?SSL保障通信安全

    由于SSL技术已建立到所有主要的浏览器和WEB服务器程序中,因此,仅需安装数字证书或服务器证书就可以激活功能了。SSL证书主要是服务于HTTPS,部署证书后,网站链接就由HTTP开头变为HTTPS。 SSL安全证书主要用于发送安全电子邮件、访问安全站点、网上招标与投标、网上签约

    2024年02月12日
    浏览(17)
  • 宝塔SSL踩坑:SSL证书域名验证无反应

    1、申请: 2、验证域名: 申请通过之后就会校验域名,这里有坑:一开始我在这里点击验证域名,一直提示等待验证,我还以为要等一会,结果等了半天也没反应,百度了一下说要第二天,结果我等到第二天也没成功。 这里的验证是需要登录到宝塔官网处理的: 这里是第二

    2024年02月16日
    浏览(11)
  • 解决IIS 验证远程SSL证书无效

    我们给IIS上的网站设置的类型为:https,并且设置了SSL,我们在访问程序时可能会报错:System.Security.Authentication.AuthenticationException: 根据验证过程,远程证书无效 。 System.Security.Authentication.AuthenticationException: 根据验证过程,远程证书无效 。”这个异常,是因为远程url使用的域

    2024年02月21日
    浏览(20)
  • 发送https请求并跳过ssl证书验证

     平台服务调用https接口报错: org.springframework.web.client.ResourceAccessException: I/0 error on PoST request for ?\\\"https://XXXXX\\\": java.security.centp.CertificateException: No subject alternative names present; nested exception is javax.net.ssl..SSLHandshakeException: java.security.cert.CertificateException: No subject alternative namesspresent 第

    2024年02月16日
    浏览(14)
  • curl 忽略https的ssl的证书验证

    今天使用curl 测试url请求出现了需要ssl证书的验证 curl的用法

    2024年02月17日
    浏览(13)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包