一 复习与目标

1 复习

  • 代理:转发通信数据(一般协议不变,作为中间人,可对报文进行过滤修改)
  • 网关:转发通信数据(协议改变,作为资源拥有者)
  • 隧道:转发通信数据(协议不变,作为管道,不对报文进行过滤修改)

2 目标

  • HTTP请求的安全问题
  • 简单密码学
  • 对称加密与非对称加密
  • SSL/TLS
  • HTTPS

二 HTTP请求的安全问题

  • 缺乏保密性:HTTP使用明文,内容可能被窃听
  • 缺乏完整性:无法验证报文的完整性,报文可能被篡改
  • 缺乏鉴别性:不验证通信方的身份,可能遭遇伪装(中间人攻击)

三 数字加密

1 简单密码学

(1)基本定义

  • 明文:原始的报文
  • 密文:转换后的报文
  • 加密算法:明文转换成密文
  • 解密算法:密文转换成明文
  • 密码算法:加密和解密算法合称密码算法
  • 密钥:密码算法中参与运算的数值。
  • 对称加密(如DES):加解密使用同一个密钥
  • 非对称加密(如RSA):密钥为一对,公开的称为公钥,自己保留的称为私钥,公钥加密的数据使用私钥解密,反之亦然。

(2)传统加密算法(字符)

  • 替换加密:使用一个符号替换另一个符号
  • 移位加密:字母按照ASCII码移动几位
  • 换位加密:某个字母与另一个字母换位置

(3)现代简单加密算法(位)

  • XOR加密:明文与密钥异或运算
  • 旋转加密:位替换的加密算法(长度不变)
  • 替换加密(S-盒):位替换的加密算法(长度改变)
  • 换位加密(P-盒):位换位的加密算法

(4)现代迭代加密

  • 迭代加密:使用多个密钥(密钥生成器生成)进行迭代加密

(5)总结

  • HTTP明文经过上述某个加密算法变成了密文传输,解决了保密性

2 数字签名

  • 发送方使用私钥对报文进行加密生成签名,对方使用公钥进行解密,验证签名的正确性。
  • 签名使用了非对称加密算法,得知谁编写了该报文,解决鉴别性
  • 签名使用了散列函数(MD5、SHA1等),防止报文被篡改,解决了完整性

注1:非对称加密好处是安全,但是效率不高,并且公钥不一定是真实可信的。

注2:散列函数不可逆运算,所以报文修改将导致hash值改变,接收方就可以知道报文被篡改。

3 数字证书

  • 身份、过期时间
  • 证书颁发者、来自证书颁发者的数字签名
  • 公钥、签名算法的描述信息

注:证书 = 公钥 + 颁发者信息,即由颁发者来证明该公钥的真实性和可信度。所以如果颁发者不可靠,其实该公钥就是不可靠的。

四 SSL/TLS

  • HTTPS,其实就是身披SSL/TLS协议这层外壳的HTTP。

  • SSL协议独立于HTTP协议,位于传输层之上应用层之下的会话层。

  • SSL协议不光只为HTTP协议提供安全支持,还能为WebSocket、SMTP、Telnet等协议提供支持。

  • HTTPS采用了混合加密机制,即充分利用非对称加密和对称加密的优势。

注1:SSL和TLS本质上没有区别,不需要纠结它们关系,真想知道请看《图解HTTP》第156页。

注2:混合多种算法的优势是很常见的,如:jdk中的排序算法就混合了快排和插入算法。

五 HTTPS的安全通信机制

  • 步骤1:Client -> Server,Client Hello报文,报文包含SSL的指定版本、加密组件列表
  • 步骤2:Server -> Client,Server Hello报文,报文包含 SSL 版本以及加密组件,其实就是根据Client报文选择其中一个来进行双方通信的加解密。
  • 步骤3:Server -> Client,Certificate报文,包含证书、公钥等信息
  • 步骤4:Server -> Client,Server Hello Done报文, SSL 握手协商部分结束
  • 步骤5:Client -> Server,Client Key Exchange 报文,包含Pre-master secret 的随机密码串(共享密钥)
  • 步骤6:Client -> Server,Change Cipher Spec 报文,提示服务器,之后报文采用 Pre-master secret 密钥加密
  • 步骤7:Client -> Server,Finished 报文,包含连接至今全部报文的整体校验值,Server根据私钥解密成功则进入下一步,否则协商失败。
  • 步骤8:Server -> Client,Change Cipher Spec报文
  • 步骤9:Server -> Client,Finished报文,包含连接至今全部报文的整体校验值,Client根据公钥解密成功则进入下一步,否则协商失败。
  • 步骤10:Client -> Server 此时双方已建立起SSL通信管道了,发送HTTP请求。
  • 步骤11:Server -> Client,发送HTTP响应
  • 步骤 12: 最后由客户端断开连接,发送close_notify 报文。

六 HTTPS的抓包分析

# TCP三次握手连接
192.168.1.46 103.61.37.178 TCP 64600 → 443 [SYN] Seq=0 Win=64240 Len=0 MSS=1460 WS=256 SACK_PERM=1
103.61.37.178 192.168.1.46 TCP 443 → 64600 [SYN, ACK] Seq=0 Ack=1 Win=29200 Len=0 MSS=1410 SACK_PERM=1 WS=128
192.168.1.46 103.61.37.178 TCP 64600 → 443 [ACK] Seq=1 Ack=1 Win=66048 Len=0 # HTTPS握手协议
192.168.1.46 103.61.37.178 TLSv1.2 Client Hello
103.61.37.178 192.168.1.46 TCP 443 → 64600 [ACK] Seq=1 Ack=518 Win=30336 Len=0 103.61.37.178 192.168.1.46 TLSv1.2 Server Hello
103.61.37.178 192.168.1.46 TLSv1.2 Certificate [TCP segment of a reassembled PDU]
192.168.1.46 103.61.37.178 TCP 64600 → 443 [ACK] Seq=518 Ack=2821 Win=66048 Len=0
103.61.37.178 192.168.1.46 TLSv1.2 Server Key Exchange, Server Hello Done
192.168.1.46 103.61.37.178 TLSv1.2 Client Key Exchange, Change Cipher Spec, Encrypted Handshake Message 192.168.1.46 103.61.37.178 TLSv1.2 Application Data
192.168.1.46 103.61.37.178 TLSv1.2 Application Data # TLS优化相关内容:https://imququ.com/post/optimize-tls-handshake.html
# Session Ticket可以使得客户端不需要多次重复获取证书
103.61.37.178 192.168.1.46 TLSv1.2 New Session Ticket, Change Cipher Spec, Encrypted Handshake Message
103.61.37.178 192.168.1.46 TLSv1.2 Application Data
192.168.1.46 103.61.37.178 TCP 64600 → 443 [ACK] Seq=1058 Ack=3392 Win=65536 Len=0 ...... # 四次挥手断开
103.61.37.178 192.168.1.46 TLSv1.2 Encrypted Alert
103.61.37.178 192.168.1.46 TCP 443 → 64600 [FIN, ACK] Seq=5125 Ack=2501 Win=36736 Len=0
192.168.1.46 103.61.37.178 TCP 64600 → 443 [ACK] Seq=2501 Ack=5126 Win=65536 Len=0
192.168.1.46 103.61.37.178 TCP 64600 → 443 [FIN, ACK] Seq=2501 Ack=5126 Win=65536 Len=0
103.61.37.178 192.168.1.46 TCP 443 → 64600 [ACK] Seq=5126 Ack=2502 Win=36736 Len=0

注:HTTP/HTTPS优化,后面讲解,这一节知道什么是HTTPS即可。

参考:

  • 《图解HTTP》
  • 《HTTP权威指南》
  • 《Web性能调优指南》
  • 《数据通信与网络》

HTTP协议探究(三):HTTPS的更多相关文章

  1. 【Loadrunner】使用LR录制HTTPS协议的三种方法

    使用LR录制HTTPS协议的三种方法 一.最简单的方法:浏览器配置打开浏览器,安装证书,配置完成后直接用http协议录制即可(配置完成的标识就是打开网页,不显示安全提示) 二.LR配置修改操作步骤如下 ...

  2. WebSocket协议探究(三):MQTT子协议

    一 复习和目标 1 复习 Nodejs实现WebSocket服务器 Netty实现WebSocket服务器(附带了源码分析) Js api实现WebSocket客户端 注:Nodejs使用的Socke ...

  3. HTTP协议探究(六):H2帧详解和HTTP优化

    一 复习与目标 1 复习 HTTP1.1存在的问题 HTTP2.0要兼容HTTP1.1 HTTP2.0的重要概念 分帧层 二进制:流 消息 帧 流的状态.优先级和并发 流量控制 服务器推送 首部压缩 ...

  4. SSL、TLS协议格式、HTTPS通信过程、RDP SSL通信过程(缺heartbeat)

    SSL.TLS协议格式.HTTPS通信过程.RDP SSL通信过程   相关学习资料 http://www.360doc.com/content/10/0602/08/1466362_30787868 ...

  5. php 伪协议探究

    0x01序 PHP伪协议探究 php中支持的伪协议有下面这么多 file:// — 访问本地文件系统 http:// — 访问 HTTP(s) 网址 ftp:// — 访问 FTP(s) URLs p ...

  6. WebSocket协议探究(序章)

    一 WebSocket协议基于HTTP和TCP协议 与往常一样,进入WebSocket协议学习之前,先进行WebSocket协议抓包,来一个第一印象. WebSocket能实现客户端和服务器间双向.基 ...

  7. TCP协议中三次握手

    TCP/IP是互联网相关的各类协议族的总称 TCP/IP协议族分为:应用层,传输层,网络层,数据链路层 应用层:向用户提供应用服务时的通讯的活动 传输层:提供处于网络连接中的两台计算机之间的数据传输 ...

  8. python摸爬滚打之----tcp协议的三次握手四次挥手

    TCP协议的三次握手, 四次挥手 三次握手过程 1, 服务器时刻准备接受客户端进程的连接请求, 此时服务器就进入了LISTEN(监听)状态; 2, 客户端进程然后向服务器发出连接请求报文, 之后客户端 ...

  9. 【mvrp多协议vlan注册协议给予三种注册方式的验证】

    MVRP 多vlan注册协议给予三种注册模式的配置 一:根据项目需求搭建好拓扑图如下 二:配置: 首先对项目做理论分析,sw1,sw2,sw3所组成的直连网络中,为使不同的PC之间进行通信,按vlan ...

随机推荐

  1. 解决python在命令行中运行时导入包失败,出现错误信息 "ModuleNotFoundError: No module named ***"

    转自https://www.cnblogs.com/dreamyu/p/7889959.html https://www.cnblogs.com/lifeofershisui/p/8135702.ht ...

  2. MAC升级Nodejs和Npm到最新版及CNPM使用

    1.MAC升级Nodejs和Npm到最新版 第一步,先查看本机node.js版本: node -v 第二步,清除node.js的cache: sudo npm cache clean -f 第三步,安 ...

  3. opencv_traincascade级联训练人脸数据

    正负样本格式:  正样本 灰度化 24*24 2000张  负样本 灰度化 50*50 1000张 训练过程  第一步:dir /b >pos.txt 以及dir /b >neg.txt ...

  4. 阶段5 3.微服务项目【学成在线】_day02 CMS前端开发_22-CMS前端页面查询开发-Api调用-跨域解决

    点击页面查询按钮 ,报错.跨域问题. 前端端口是11000 请求后端的服务地址端口是31001 出现跨域 开始解决跨域 把前面带端口的地址 用变量代替 只有带/api/cms开头的就转发的服务端310 ...

  5. charles-mock数据的方法(有空自己写一个)

    https://www.jianshu.com/p/75d24f264ce2 这个也可以参考下 https://www.cnblogs.com/kaibindirver/p/9104996.html ...

  6. 图解 HTTP 笔记(八)——常见 Web 攻击技术

    本章主要讲解 HTTP 通信过程中的一些常见 Web 攻击技术 一.跨站脚本攻击 跨站脚本攻击(Cross-Site Scripting, XSS)是指通过存在安全漏洞的 Web 网站注册用户的浏览器 ...

  7. Jenkins+gitlab+maven持续集成

    https://blog.csdn.net/tq08g2z/article/details/79718425 https://www.jianshu.com/p/3507d8b2ac87 报错用下面解 ...

  8. Python实现字符串反转

    将字符串 s=‘helloword’ 反转输出为 ‘drowolleh’,以下通过多种方法实现 1.字符串切片法(常用) s='helloword' r=s[::-1] print(r) #结果:dr ...

  9. .Netcore 2.0 Ocelot Api网关教程(6)- 配置管理

    本文介绍Ocelot中的配置管理,配置管理允许在Api网关运行时动态通过Http Api查看/修改当前配置.由于该功能权限很高,所以需要授权才能进行相关操作.有两种方式来认证,外部Identity S ...

  10. IEEE754二进制浮点数算术标准

    对于32位浮点数 sign: 符号,1位 exponent: 指数,8位,偏码 fraction: 分数,23位,原码 特殊值   指数域的编码值 = 指数的实际值 + 127 这样按照字典序的顺序就 ...