HTTPS 基本流程2
Https在真正请求数据前,先会与服务有几次握手验证,以证明相互的身份,以下图为例
2.1 验证流程
注:文中所写的序号与图不对应但流程是对应的
1 客户端发起一个https的请求,把自身支持的一系列Cipher Suite(密钥算法套件,简称Cipher)发送给服务端
2 服务端,接收到客户端所有的Cipher后与自身支持的对比,如果不支持则连接断开,反之则会从中选出一种加密算法和HASH算法
以证书的形式返回给客户端 证书中还包含了 公钥 颁证机构 网址 失效日期等等。
3 客户端收到服务端响应后会做以下几件事
3.1 验证证书的合法性
颁发证书的机构是否合法与是否过期,证书中包含的网站地址是否与正在访问的地址一致等
证书验证通过后,在浏览器的地址栏会加上一把小锁(每家浏览器验证通过后的提示不一样 不做讨论)
3.2 生成随机密码
如果证书验证通过,或者用户接受了不授信的证书,此时浏览器会生成一串随机数,然后用证书中的公钥加密。
3.3 HASH握手信息
用最开始约定好的HASH方式,把握手消息取HASH值, 然后用 随机数加密 “握手消息+握手消息HASH值(签名)” 并一起发送给服务端
在这里之所以要取握手消息的HASH值,主要是把握手消息做一个签名,用于验证握手消息在传输过程中没有被篡改过。
4 服务端拿到客户端传来的密文,用自己的私钥来解密握手消息取出随机数密码,再用随机数密码 解密 握手消息与HASH值,并与传过来的HASH值做对比确认是否一致。
然后用随机密码加密一段握手消息(握手消息+握手消息的HASH值 )给客户端
5 客户端用随机数解密并计算握手消息的HASH,如果与服务端发来的HASH一致,此时握手过程结束,之后所有的通信数据将由之前浏览器生成的随机密码并利用对称加密算法进行加密
因为这串密钥只有客户端和服务端知道,所以即使中间请求被拦截也是没法解密数据的,以此保证了通信的安全
非对称加密算法:RSA,DSA/DSS 在客户端与服务端相互验证的过程中用的是对称加密
对称加密算法:AES,RC4,3DES 客户端与服务端相互验证通过后,以随机数作为密钥时,就是对称加密
HASH算法:MD5,SHA1,SHA256 在确认握手消息没有被篡改时
==================================================================================
每个人都讲得不太一样,虽然基本上是相同的。
第一二步的时候,是需要随机数的,这里没有写出来。
关于 3.3 HASH握手信息 就更加迷惑了。
用最开始约定好的HASH方式,把握手消息取HASH值, 然后用 随机数加密 “握手消息+握手消息HASH值(签名)” 并一起发送给服务端
首先,握手消息是什么?看其他的文章,一般就是pre-master (又称为premaster、premaster secret ?),把premaster 按照第一次握手确定的hash算法 取hash,然后 “ 随机数加密 ”, 这里又是一个 随机数? 搞不懂了! 这个随机数是如何产生的? 内容是? 我总觉得这里可能是写错了, 这里应该是 用服务器公钥加密 " 握手消息+握手消息HASH值 "。
但是有的书上又说用 " 服务器公钥加密 premaster (也就是握手消息) ", 这里是没有用公钥加密 premaster 的hash 的 。 如果这样做,也没有什么,但这样又会衍生一点问题: 假设服务端拿到这个加密后的 “ 握手消息+握手消息HASH值 ”, 用私钥解密, 那么得到 “ premaster握手消息+premaster握手消息HASH值 ”, 那么我需要把premaster 取出来, 但是现在 premaster 和 premaster 的hash 混在了一块, 如何分离? 除非 中间有个固定的分隔符?其实这样想是错的, premaster 并不会发送, 永远不会发送。
“ 并一起发送给服务端 ” 这里的并一起,是指哪些内容? 想了想, 应该是这样的: 先发送 premaster 公钥加密值, 再发送premaster 的hash 的 公钥加密值。分别发送,(应该是分两次发送, 不然, 又需要一个 分隔符了, 比较麻烦, 看到其他资料的介绍也是 分多次 )。 所以说呢,这里的 “ 并一起 ” 有相当大的 迷惑,容易产生误解。。
但是呢, premaster 的hash 的 公钥加密值, 有必要发送吗? 发送是保险起见, 为了验证premaster 是否已经被更改, 因为服务器的公钥是 任何人都可见的,如果流量被middleman 劫持,随便加密了一个 随机数,然后 用公钥加密,然后发送过来, 服务器端没法确定它是否已经发生 改变,然后把middleman 当做最开始通信的客户端,然后和middleman 通信,这样就出问题了。 因为http是无状态的, 客户端-服务端 建立通信过程有很多步骤,每一个步骤都可能 被劫持,因此, 在没有完全建立通信、信道 之前,每一个步骤都要验证。所以后面这一句是 非常正确的:
在这里之所以要取握手消息的HASH值,主要是把握手消息做一个签名,用于验证握手消息在传输过程中没有被篡改过。
握手消息的HASH值 是必不可少需要发送给服务端的。但是我又看到有资料这样描述:
encrypted_handshake_message,结合之前所有通信参数的 hash 值与其它相关信息生成一段数据,采用协商密钥 session secret 与算法进行加密,然后发送给服务器用于数据与握手验证
这样的描述,也十分的不清晰, " 结合之前所有通信参数的 hash 值 " 到底是什么? 莫非就是前面说的 premaster 的hash ? “ 与其它相关信息生成一段数据 ” 具体什么数据不要紧,因为 我们仅仅是用它做比较, 以验证 协商密钥 session secret (我觉得就是 master secret) 的正确。 问题是 这里的 “ 与 ”, 怎么理解, 是直接拼在一起吗? 这样的话,premaster 的hash 和 “ 一段数据 ” 中间是不是又需要一个分隔符?
random client 和 random server, Pre-master, 容易理解, Master secret 还好理解, key material, 又是什么?
Key 经过12轮迭代计算会获取到12个 hash 值,分组成为6个元素,列表如下:
竟然出现了 12个 hash 值 ,我看一般资料根本没有题这么详细。 是真的有吗?
(2).密钥使用
Key 经过12轮迭代计算会获取到12个 hash 值,分组成为6个元素,列表如下:
(a) mac key、encryption key 和 IV 是一组加密元素,分别被客户端和服务器使用,但是这两组元素都被两边同时获取;
(b) 客户端使用 client 组元素加密数据,服务器使用 client 元素解密;服务器使用 server 元素加密,client 使用 server 元素解密;
(c) 双向通信的不同方向使用的密钥不同,破解通信至少需要破解两次;
(d) encryption key 用于对称加密数据;
(e) IV 作为很多加密算法的初始化向量使用,具体可以研究对称加密算法;
(f) Mac key 用于数据的完整性校验;
(3).数据加密通信过程
(a) 对应用层数据进行分片成合适的 block;
(b) 为分片数据编号,防止重放攻击;
(c) 使用协商的压缩算法压缩数据;
(d) 计算 MAC 值和压缩数据组成传输数据;
(e) 使用 client encryption key 加密数据,发送给服务器 server;
(f) server 收到数据之后使用 client encrytion key 解密,校验数据,解压缩数据,重新组装。
注:MAC值的计算包括两个 Hash 值:client Mac key 和 Hash (编号、包类型、长度、压缩数据)。
---------------------
作者:hherima
来源:CSDN
原文:https://blog.csdn.net/hherima/article/details/52469674
版权声明:本文为博主原创文章,转载请附上博文链接!
这里的“ 数据加密通信过程 ” 不好理解,分片,压缩,计算MAC,可以理解。client encryption key 是什么? 是不是就是 cipher suite 中 确认过的 对称加密算法 的密钥吗 ? 不应该就是 协商密钥吗? 不应该就是 master secret 吗? server encryption key 就更加不好理解了, 通信建立ok了后,就进入了 对称加密的 通道了吧!
HTTPS 基本流程2的更多相关文章
- [信息安全] 3.HTTPS工作流程
[信息安全]系列博客:http://www.cnblogs.com/linianhui/category/985957.html 0. 简单回顾 在前面两篇博客中介绍了密码相关的一些基本工具,包括(对 ...
- HTTPS加密流程超详解(一)前期准备
0.前言 前一阵子想写一个HTTPS的嗅探工具,之前只是大致了解SSL/TLS协议的加密流程,真正上起手来一步一步分析发现还是有点复杂的,于是我参考了wireshark的源码以及各种RFC,弄清楚了S ...
- HTTPS 通讯流程
原文地址 https://blog.csdn.net/wangweilica6/article/details/50171457 一.简介 前一篇文章,我总结了下,如何部署https服务,开通ssl通 ...
- https 通信流程和Charles 抓包原理
1. https 通信流程 ①客户端的浏览器向服务器传送客户端SSL 协议的版本号,加密算法的种类,产生的随机数,以及其他服务器和客户端之间通讯所需要的各种信息.②服务器向客户端传送SSL 协议的版本 ...
- TCP连接、释放及HTTPS连接流程
一.建立连接是三次握手 为什么三次握手?前两次握手为了确认服务端能正常收到客户端的请求并愿意应答,后两次握手是为了确认客户端能正常收到服务端的请求并愿意应答.三次握手可以避免意外建立错误连接而导致浪费 ...
- HTTPS加密流程理解
HTTPS加密流程 由于HTTP的内容在网络上实际是明文传输,并且也没有身份验证之类的安全措施,所以容易遭到挟持与攻击 HTTPS是通过SSL(安全套接层)和TLS(安全传输协议)的组合使用,加密TC ...
- HTTPS工作流程
HTTPS工作流程 RSA算法 RSA的密钥分成两个部分: PublicKey 加密数据 验证签名 不能解密 任何人都可以获得 Private Key 数据签名(摘要算法) 解密 加密(不用此功能) ...
- https基础流程
背景: https基于SSL,目的是保护http通信的过程,防止中间人篡改信息,或假冒服务端的问题. 要解决的问题: 1. 客户端如何证明是与正确的服务端进行通信 2. 客户端如何确认收到服务端的 ...
- HTTPS加密流程超详解(二)
2.进入正题 上篇文章介绍了如何简单搭建一个环境帮助我们分析,今天我们就进入正题,开始在这个环境下分析. 我们使用IE浏览器访问Web服务器根目录的test.txt文件并抓包,可以抓到如下6个包(前面 ...
- https加密流程
引用其它博主博客,在这里谢谢这位博主,原博客地址:https://blog.csdn.net/xincai/article/details/51954468 1,下面,用一幅图展示一下https建立 ...
随机推荐
- Android Historian安装使用
1.先安装docker 2.安装Historian,可使用如下docker镜像: sudo docker run -p 9000:9999 registry.cn-hangzhou.aliyuncs. ...
- 服务器A制定计划任务,BAT脚本自动备份oracle数据文件,拷贝至服务器B的共享目录。
运行环境:windows server 2008 R2 目的:在数据库服务器A进行数据库自动备份,并且保留5天. 为了安全,需要在web应用服务器B进行数据库的冗余备份,建立双保险.(保留15天) A ...
- 移动端web页面列表类上拉加载,查看详情,iframe嵌套第三方页面遇到的问题以及解决办法
1.移动端上拉加载 网上有很多成熟的插件,比如iscroll.在这里介绍一下用jquery和js写的上拉加载方法.使用原生的去写上拉加载更多需要三个高度去做对比,以新闻类列表举例,首先需要整个dom的 ...
- python的xml模块用法
xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单,不过,古时候,在json还没诞生的黑暗年代,大家只能选择用xml呀,至今很多传统公司如金融行业的很多系统的 ...
- Docker系列(一)CentOS 6.5 离线安装、不升级内核
本特安装教程特点 1.由于是离线下载,需要提前下载好需要的依赖包 2.使用的版本为Centos6.5 3.不升级内核 4.提供异常解决方案. 安装过程 一.下载依赖包(使用能联网的节点) 依赖包可以自 ...
- SaaS外包商 承接SaaS产品开发 Software-as-a-Service(软件即服务)
SaaS: Software-as-a-Service(软件即服务) 所谓SaaS.这一层是和你的生活每天接触的一层,大多是通过网页浏览器来接入.任何一个远程服务器上的应用都可以通过网络来运行,就是S ...
- 【C++】Lambda表达式
转自 https://www.cnblogs.com/DswCnblog/p/5629165.html 作者:dsw846 C++11的一大亮点就是引入了Lambda表达式.利用Lambda表达式,可 ...
- bootloader介绍
Bootloader是系统加电后运行的第一段软件代码,主要任务就是将内核映像从硬盘读到RAM中,然后跳转到内核的入口点去运行,也即开始启动操作系统. 简单的说,Bootloader就是在操作系统运行内 ...
- Linux中的configure,make,make install到底在做些什么
在Linux下经常要安装部署一些软件包或者工具,拿到安装包之后一看,简单,configure,make, make install即可搞定. 有时候我就在想,这个configure,make ,mak ...
- Selenium之动作链(ActionChains)
用selenium做自动化,有时候会遇到需要模拟鼠标操作才能进行的情况,比如单击.双击.点击鼠标右键.拖拽等等.而selenium给我们提供了一个类来处理这类事件——ActionChains se ...