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

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:
>>> import requests>>> requests.get('https://github.com')
requests.exceptions.SSLError: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: / (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 request is being made. Adding certificate
verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings
  InsecureRequestWarning)
<Response [200]>

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

import requests
from requests.packages import urllib3

# 关闭告警信息
urllib3.disable_warnings()

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

客户端证书验证方式

image.png

总结

  • https请求进行ssl验证或忽略ssl验证才能请求成功,忽略方式为verify=False
  • SSL证书是由CA机构颁发的,嗯,所以安全也是要钱的
  • 要完全理解HTTP协议,不能只到分辨HTTP的get、post等动作的程度,还要去理解7层网络结构中每层使用的协议,以及数据传输的过程

作者: 乐大爷 博客:https://www.jianshu.com/u/39cef8a56bf9 声明:本文已获作者授权转载,著作权归作者所有。

原文发布于微信公众号 - 开源优测(DeepTest)

原文发表时间:2018-04-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏IMWeb前端团队

Nodejs进阶:核心模块https 之 如何优雅的访问12306

本文作者:IMWeb 陈映平 原文出处:IMWeb社区 未经同意,禁止转载 模块概览 这个模块的重要性,基本不用强调了。在网络安全问题日益严峻的今天,...

312100
来自专栏FreeBuf

直面冥王:最新爆发的C#敲诈木马HadesLocker解读

近日哈勃分析系统捕获到一类由C#语言编写的新的敲诈勒索木马。之前出现 的C#语言编写的木马只是简单地调用了一些C#库来辅助开发。与之相比,这次的变种增加了多层嵌...

31760
来自专栏PHP在线

JSON Web Token - 在Web应用间安全地传递信息

JSON Web Token(JWT)是一个非常轻巧的规范。这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息。

22170
来自专栏码神联盟

短信 | 教你使用 JAVA实现 【短信发送】 功能

66240
来自专栏PHP在线

JSON Web Token - 在Web应用间安全地传递信息

JSON Web Token(JWT)是一个非常轻巧的规范。这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息。 让我们来假想一下一个场景。在A用户...

39060
来自专栏安恒网络空间安全讲武堂

WriteUp分享 | LCTF的一道padding oracle攻击+sprintf格式化字符串导致的SQL注入

0x00题目 http://111.231.111.54/ 泄露了两个源码 .login.php.swp .admin.php.swp 源码丢在最下面,可用vi...

24880
来自专栏小白安全

小白博客 Linux下暴力破解工具Hydra详解

Number one of the biggest security holes are passwords, as every password secu...

79070
来自专栏mantou大数据

深入浅出JWT(JSON Web Token )

JSON Web Token(JWT)是一个开放式标准(RFC 7519),它定义了一种紧凑(Compact)且自包含(Self-contained)的方式,用...

676110
来自专栏七夜安全博客

你不知道的 HTTPS中间人攻击

研究生毕业了,好好给自己放了个假期,休息了两周,文章博客都没有更新。从大学开始基本上没过暑假,匆匆忙忙的。再过两天,就要去腾讯工作了,做了自己喜欢的网络安全,重...

18230
来自专栏FreeBuf

一个纯JS脚本的文档敲诈者剖析(附解密工具)

0x00 概述 近日,腾讯反病毒实验室拦截到一个名为RAA的敲诈者木马,其所有的功能均在JS脚本里完成。这有别于过往敲诈者仅把JS脚本当作一个下载器,去下载和执...

55270

扫码关注云+社区

领取腾讯云代金券