一 复习与目标

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. 20175313 张黎仙《Java程序设计》第十一周学习总结

    目录 一.教材学习内容总结 二.教材学习中的问题和解决过程 三.代码托管 四.心得体会 五.学习进度条 六.参考资料 一.教材学习内容总结 第十三章内容 主要内容 URL类 InetAdress类 套 ...

  2. hystrix(一) 简单使用, 以及动态配置更新

    本文转载自https://my.oschina.net/u/1169457/blog/1787414 hystrix 简单使用, 以及动态配置更新 概述 只介绍同步模式下简单的使用, 有助于快速接入, ...

  3. Git 基本应用

    微信公众号:Java修炼指南博客园:https://home.cnblogs.com/u/wuyx/CSDN: https://mp.csdn.net/简书:https://www.jianshu.c ...

  4. vue 调用微信支付方法

    pay(){ let data ={ order_id:this.order_id, wechatpay_type:this.wechatpay_type, merchant_id:localStor ...

  5. oracle赋予一个用户具有查询另一个用户所有表数据

    一  以需要被查询的用户登录oracle(假如为A)   B为要查询A用户下的表的用户 二  执行查询语句: select 'grant select on A.'|| tname ||' to  B ...

  6. Linux-文件系统的简单操作

    文件系统的简单操作 磁盘与目录的容量:df.du df [option] [目录或文件名] 参数: -a:列出所有的文件系统,包括系统特有的/proc等系统 -k:以KB的容量显示各文件系统 -m:以 ...

  7. 使用XCode7打包动态库(Framework)

    iOS中的静态库和动态库 概念 静态库(Static Library)以 .a 为后缀,它是你的源码的实现.m文件编译而成的二进制文件集合,需要配合上暴漏的.h文件使用,它在引用链接时拷贝至可执行文件 ...

  8. save()和savaorupdate的区别

    hibernate的保存 hibernate对于对象的保存提供了太多的方法,他们之间有很多不同,在这里细说一下,以便区别: 一.预备知识:     在所有之前,说明一下,对于hibernate,它的对 ...

  9. idea-配置文件提示红色

    Idea建立spring配置文件首行红色 提示URI is not registered 复制出现红色字体的路径...File -  Settings  - schemas and DtDs 点击加号 ...

  10. 【VS开发】图像颜色

    版权声明:本文为博主原创文章,转载请注明出处http://blog.csdn.net/lg1259156776/. 最近被图像颜色整的乱七八糟的,一会儿YUV422,一会儿RGB,一会儿gray... ...