1987WEB视界-分享互联网热点话题和事件

您现在的位置是:首页 > 域名 > 正文

域名

[接口测试_B]10requests处理SSL证书验证

1987web2023-09-26域名75

requests支持的证书验证方式

  • SSL证书验证

  • 客户端证书验证

  • CA证书验证

SSL证书验证

来个大写的问题,SSL是什么,为什么在发起HTTPS请求的时候需要证书验证?

  • SSL:Secure Sockets Layer,安全套接层。是为了解决HTTP协议是明文,避免传输的数据被窃取、篡改、劫持等。

  • TSL:Transport Layer Security,传输层安全协议。TSL其实是SSL标准化后的产物,即SSL/TSL实际上是表示同一个东西。

  • HTTPS:HTTPS是兼容HTTP的,可以把HTTPS理解为‘HTTP over TSL’,即HTTPS是HTTP协议和TSL协议的组合。

  • HTTPS在传输数据时,同样会先建立TCP连接,建立起TCP连接之后,会建立TSL连接,这个过程可以通过wireshark抓包查看。

    TSL.png

  • 事实上,SSL协议分为2层,包括SSL记录协议和SSL握手协议,同时,SSL协议还包括加密算法的一些概念,嗯,太复杂了,我也编不下去了,,希望在后面的学习中,能把前面浏览的知识总结起来。

  • 还有一个问题是,SSL协议处于网络7层结构的哪一层呢?有的资料直接说明SSL协议处于传输层,有的资料则说SSL协议处于传输层与应用层之间。

Requests 为 HTTPS 请求验证 SSL 证书

  • Requests 可以为 HTTPS 请求验证 SSL 证书,就像 web 浏览器一样。SSL 验证默认是开启的,如果证书验证失败,Requests 会抛出 SSLError:

>>>importrequests>>>requests.get(https://github.com)
requests.exceptions.SSLError: HTTPSConnectionPool(host=github.com, port=443): Max retries exceededwithurl: / (Caused by SSLError(SSLError(1,[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:777)),))
  • 要能成功验证的方式如下,(为什么没有示例?嗯,我构造不出来):

    image.png

  • 通常,我们遇到requests的ssl验证,都是直接跳过不验证的,将verify=False即可。

>>>requests.get(https://github.com, verify=False)
D:\Program Files\Python36\lib\site-packages\urllib3\connectionpool.py:858: InsecureRequestWarning: Unverified HTTPS requestisbeing made. Adding certificate
verificationisstrongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.htmlssl-warningsInsecureRequestWarning)
200]>

可以看到,将verify设为False后,可以跳过ssl验证,但存在一个告警信息InsecureRequestWarning。要忽略这个告警信息可以怎么做呢?

importrequestsfromrequests.packagesimporturllib3关闭告警信息urllib3.disable_warnings()

url =https://github.comr = requests.get(url, verify=False)print(r.status_code)

客户端证书验证方式

image.png

总结

  • https请求进行ssl验证或忽略ssl验证才能请求成功,忽略方式为verify=False

  • SSL证书是由CA机构颁发的,嗯,所以安全也是要钱的

  • 要完全理解HTTP协议,不能只到分辨HTTP的get、post等动作的程度,还要去理解7层网络结构中每层使用的协议,以及数据传输的过程

[接口测试_B] 01 接口测试环境搭建

[接口测试_B] 02 Pytest的简单示例

[接口测试_B] 03 Pytest断言处理_assert和异常断言

[接口测试_B] 04 Pytest断言处理_告警断言

[接口测试_B] 05 Pytest参数化处理

[接口测试_B] 06 Pytest的setup和teardown

[接口测试_B] 07 Pytest的测试报告

[接口测试_B] 08 requests的基本用法

[接口测试_B] 09 requests中Cookie和会话对象session处理

[接口测试_B] 11 requests的身份认证方式(文末附有系列文章)

作者: 乐大爷

博客:https://www.jianshu.com/u/39cef8a56bf9

声明:本文已获作者授权转载,著作权归作者所有。