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建立 ...
随机推荐
- linux下lampp的启动和停止脚本
今天试着写了lampp的启动停止脚本,和上一篇的tomcat的启动停止有一点小区别,就是lampp启动之后有很多的进程号,如果按照tomcat的停止脚本写就会出错,下面做细细的介绍 1.lampp的停 ...
- 爬虫模块介绍--Beautifulsoup (解析库模块,正则)
Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.Beautiful Soup会帮你节省数小时 ...
- Python 斗地主发牌
#coding = utf-8 import random def Creat_Card(): card_type = ['♥','♠','♦','♣'] card_values= ['A', '2' ...
- Python 限制线程的最大数量(Semaphore)
import threadingimport time sem = threading.Semaphore(4) # 限制线程的最大数量为4个 def gothread(): with sem: # ...
- db2 varchar字段类型太大问题
[DB2]SQL1585N 由于没有具有兼容页面大小的可用系统临时表空间,因此无法创建临时表.SQLSTATE=54048 自己写了一段SQL,SQL中包含ORDER BY 字句,但是在执行的时候报错 ...
- Java高级特性 第7节 多线程
一.进程与线程的概念 1. 进程 进程是应用程序的执行实例,有独立的内存空间和系统资源. 如上图,标红色的是一个Office Word进程. 进程的特点: 动态性:进程是动态的创建和消亡: 并发性:操 ...
- git的基本应用(一)
Git常用的命令: mkdir 文件夹名称 创建文件夹 git init 将文件夹交个git管理 ls -ah ...
- IntelliJ IDEA 下载安装以及破解
转载自:http://blog.csdn.net/my_jack/article/details/69248495 IDEA开发工具是java语言开发的集成环境,IntelliJ在业界被公认为最好的j ...
- Optaplanner规划引擎的工作原理及简单示例(1)
在之前的文章中,老猿已介绍过APS及规划的相关内容,也对Optaplanner相关的概念和一些使用示例进行过介绍,接下来的文章中,我会自己做一个规划小程序 - 一个关于把任务分配到不同的机台上进行作来 ...
- 工控随笔_18_西门子_WinCC的VBS脚本_07_变量作用域和传值、传址
在vbs脚本中也存在和其他编程语言一样的概念,那就是变量的作用域,变量的作用域决 定在什么范围内可以访问. 同样的在vbs脚本中对于变量也有一个生命周期, 变量的生命周期决定了变量的存续时间 这个主要 ...