HTTP协议探究(三):HTTPS
一 复习与目标
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的更多相关文章
- 【Loadrunner】使用LR录制HTTPS协议的三种方法
使用LR录制HTTPS协议的三种方法 一.最简单的方法:浏览器配置打开浏览器,安装证书,配置完成后直接用http协议录制即可(配置完成的标识就是打开网页,不显示安全提示) 二.LR配置修改操作步骤如下 ...
- WebSocket协议探究(三):MQTT子协议
一 复习和目标 1 复习 Nodejs实现WebSocket服务器 Netty实现WebSocket服务器(附带了源码分析) Js api实现WebSocket客户端 注:Nodejs使用的Socke ...
- HTTP协议探究(六):H2帧详解和HTTP优化
一 复习与目标 1 复习 HTTP1.1存在的问题 HTTP2.0要兼容HTTP1.1 HTTP2.0的重要概念 分帧层 二进制:流 消息 帧 流的状态.优先级和并发 流量控制 服务器推送 首部压缩 ...
- SSL、TLS协议格式、HTTPS通信过程、RDP SSL通信过程(缺heartbeat)
SSL.TLS协议格式.HTTPS通信过程.RDP SSL通信过程 相关学习资料 http://www.360doc.com/content/10/0602/08/1466362_30787868 ...
- php 伪协议探究
0x01序 PHP伪协议探究 php中支持的伪协议有下面这么多 file:// — 访问本地文件系统 http:// — 访问 HTTP(s) 网址 ftp:// — 访问 FTP(s) URLs p ...
- WebSocket协议探究(序章)
一 WebSocket协议基于HTTP和TCP协议 与往常一样,进入WebSocket协议学习之前,先进行WebSocket协议抓包,来一个第一印象. WebSocket能实现客户端和服务器间双向.基 ...
- TCP协议中三次握手
TCP/IP是互联网相关的各类协议族的总称 TCP/IP协议族分为:应用层,传输层,网络层,数据链路层 应用层:向用户提供应用服务时的通讯的活动 传输层:提供处于网络连接中的两台计算机之间的数据传输 ...
- python摸爬滚打之----tcp协议的三次握手四次挥手
TCP协议的三次握手, 四次挥手 三次握手过程 1, 服务器时刻准备接受客户端进程的连接请求, 此时服务器就进入了LISTEN(监听)状态; 2, 客户端进程然后向服务器发出连接请求报文, 之后客户端 ...
- 【mvrp多协议vlan注册协议给予三种注册方式的验证】
MVRP 多vlan注册协议给予三种注册模式的配置 一:根据项目需求搭建好拓扑图如下 二:配置: 首先对项目做理论分析,sw1,sw2,sw3所组成的直连网络中,为使不同的PC之间进行通信,按vlan ...
随机推荐
- RAFT选举算法-分布式数据库困惑
在做HIS研发工作的时候一直想完善其数据组件,想做一个分布式的数据库支持系统.但一直以来都不清楚这个选举算法应怎么做,原来有一个叫raft的算法https://www.cnblogs.com/just ...
- 2018-2019-2 20165210《网络对抗技术》Exp8 Web基础
2018-2019-2 20165210<网络对抗技术>Exp8 Web基础 实验内容: Web前端HTML 能正常安装.启停Apache.理解HTML,理解表单,理解GET与POST方法 ...
- Linux设备驱动程序 之 中断和锁
中断和锁 1. 硬中断和软中断(包括tasklet和timer)共享数据,硬中断中使用spin_lock/spin_unlock,软中断中使用spin_lock_irq/spin_unlock_irq ...
- error:Cannot pull with rebase
原文文链接:https://blog.csdn.net/u012385190/article/details/70670213git 执行git pull –rebase报错误如下: error: C ...
- C#问答题与附解收集(三)
post.get的区别 答: GET把参数包含在URL中,POST通过request body传递参数.GET请求在URL中传送的参数是有长度限制的,而POST没有.使用post提交的页面在点击[刷新 ...
- 如何使用git cherry-pick将同一个仓库的某个分支的某些commit合并到当前分支?
答: git cherry-pick <another-branch's commit-id>
- [Java读书笔记] Effective Java(Third Edition) 第 7 章 Lambda和Stream
在Java 8中,添加了函数式接口(functional interface),Lambda表达式和方法引用(method reference),使得创建函数对象(function object)变得 ...
- iOS——sqlite3的使用(iOS嵌入式关系数据库)
1>添加sqlite3动态库:libsqlite3.dylib,CoreGraphics.framework,UIKit.framework,Foundation.framework 2> ...
- JUC AQS ReentrantLock源码分析
警告⚠️:本文耗时很长,先做好心理准备,建议PC端浏览器浏览效果更佳. Java的内置锁一直都是备受争议的,在JDK1.6之前,synchronized这个重量级锁其性能一直都是较为低下,虽然在1.6 ...
- python3 正则表达式 re模块之辣眼睛 计算器
额...学到几个常用模块了,也要其中考试了,每天晚上敲一点,敲得脑壳疼,不过又想到好一点的办法了,有时间再改吧. 此非吾所欲也,实属无奈也....复习之路漫漫,吾将到书上求索,在此不多逗留,我挥一挥衣 ...