https加密过程!!! 这才是差不多非常详细的https双方获取共用的秘钥过程!!!!!
前言
先说看了一天各种博客让我恶心的地方,恶心死了,发现每个人说的第一次发送的内容,数字证书里面包含啥,都有各种不一样!到了最后忽然想起来直接搜着报文就行了。
比如这个博客LS/SSL 协议详解 (9) Client hello:https://blog.csdn.net/mrpre/article/details/77867439 这个人的博客有各个报文的每个字段的详细解释!让我纳闷了一天那些博客怎么那么多矛盾,发现都错了好多!
建议搭配这个看 HTTPS工作流程.png
整理了一下我的:
https就是厉害在传输数据是安全的,传输过程中不会被其他方获取你的内容。用什么实现?SSL/TSL,也就是https就是用SSL/TSL实现http的加密传输。SSL“安全套接层”协议,TLS“安全传输层”协议,都属于是加密协议,在其网络数据传输中起到保护隐私和数据的完整性。像对称加密,非对称加密这种基本概念不说了,https主要就是双方偷偷规定一个世界上独一无二的秘钥,之后就用这套秘钥交流,就在于如和偷偷规定这个秘钥。
C:客户端 S:服务端
先来个三次握手 SYN(SYN-SENT) -> ACK+SYN+seq(SYN-RCVD) -> ACK+ack_num=seq+1(ESTABLISHED) 这个过程是客户端发请求,TCP分配到433端口。
1 client hello:
C->S 给个随机数rand1,支持的TLS版本号以及加密算法等。S->C会先回个ACK表示收到了,在这就不算个步骤了。
2 server hello & server certificent & server hello done:
回个使用哪个版本号的TLS和加密算法。还有个随机值rand2。然后发自己的数字证书,还包括签名用的hash算法。将明文hash成摘要,然后用CA的私钥加密摘要生成数字签名。 最后发个server hello done报文。 这个2我把这3个报文写一起了,从上边我说的那个png图可以更清楚的看到顺序。
3 验证证书:
C给S回个ACK表示收到了。开始验证证书,先验证明文部分,看看是否过期,网址是否正确。再用在操作系统或者浏览器上内置的CA公钥把数字签名给变回去,然后判断和证书中的明文的hash值是否相等,不相等说明被篡改了,停止交易。验证阶段还有一些其他东西,比如如果找不到这个CA证书,服务器会返回一个跟证书,让你选择是否信任。
4 client key exchange:
C->S 生成一个rand3,然后用公钥加密rand3生成一个Pre-Master Key,然后客户端发送一个Client Key Exchange报文把pre-master key发过去。服务端用私钥解密获得rand3。这个时候双方都有rand123,然后根据双方选择的加密算法算出来一个公用秘钥session-key。
5 客户端的change cipher spec & finish:
C->S 发一个change cipher spec报文表示之后会话使用秘钥来对称加密,然后发个finish报文,包含用秘钥加密的所有握手数据的摘要。
6 服务端的change cipher spec & finish:
S->C 先回一个ack,再验证一下用秘钥解密的finish报文是否和自己算出来的摘要一样。然后和客户端一样。发个两个报文。
7 搞完了:
客户端也回一个ack,表示知道了,之后就可以使用秘钥进行对称加密了。
关于4中选择哪个加密算法,在最开始的client hello报文里面的Cipher Suite里面有支持的加密算法,然后在server hello中返回的有选择使用哪一种。
这个图就是我开头提到的
思考:
其实归根结底就是如何使3个随机数只有双方知道。就是用服务器给客户的公钥,客户用这个公钥加密一个随机数,这样就只有服务端能解密。进一步就是保证服务器的公钥能够不被篡改,不被替换地到达客户端,所以用到了数字证书,保证不被篡改。
但是到这还有个问题,那么有了公钥直接以后用公私钥的非对称加密不就行了吗,还弄什么秘钥对称加密?当然不行,如果有中间人,只查看,不更改数字证书,中间人也能获得服务器的公钥,尽管不能破解客户端的信息,但有这个公钥就能知道服务端发送的信息,所以还是需要双方定一个秘钥。
参考:
(五)HTTPS抓包了解TLS握手流程:https://zhuanlan.zhihu.com/p/86304211
完全理解HTTPS如何做到传输安全: https://juejin.cn/post/6844903613479796750
HTTPS加密传输过程 :https://www.cnblogs.com/WindrunnerMax/p/12580585.html //这个博客后变推荐的几个博客很赞!!!
https加密过程!!! 这才是差不多非常详细的https双方获取共用的秘钥过程!!!!!的更多相关文章
- https 加密、http2.0、keep-alive
原文地址:https://ainyi.com/44 HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议 ...
- HTTPS加密越来越流行,为何要加密?
继谷歌之后,国内最大的搜索引擎百度在2015年5月实现了全站HTTPS加密.搜狗搜索.360搜索.bing搜索.淘宝.天猫.知乎等也都实现了全站HTTPS加密,互联网即将迎来全网HTTPS加密时代. ...
- 百度HTTPS加密搜索有什么用?
前段时间,我曾提到百度支持移动端HTTPS SSL加密搜索,用以保护用户隐私.最近,百度开始支持PC端HTTPS SSL加密搜索,现在可以启用 https://www.baidu.com 搜索.我很少 ...
- https加密过程
https加密完整过程 step1: “客户”向服务端发送一个通信请求 “客户”->“服务器”:你好 step2: “服务器”向客户发送自己的数字证书.证书中有一个公钥用来加密信息,私钥由“服务 ...
- HTTPS加密原理与过程
HTTPS加密原理与过程 HTTP 超文本传输协议一种属于应用层的协议 缺点: 通信使用明文(不加密),内容可能会被窃听 不验证通信方的身份,因此有可能遭遇伪装 无法证明报文的完整性,所以有可能已遭篡 ...
- HTTPS加密传输过程
HTTPS加密传输过程 HTTPS全称Hyper Text Transfer Protocol over SecureSocket Layer,是以安全为目标的HTTP通道,在HTTP的基础上通过传输 ...
- HTTPS加密通信原理及数字证书系统
https加密通信原理: 公钥私钥成对,公钥公之于众,私钥只有自己知道. 用公钥加密的信息只能由与之相对应的私钥解密. 甲给乙发送数据时,甲先用乙的公钥加密这段数据,再用自己的私钥对这段数据的特征数据 ...
- 为什么站点使用https加密之后还能看到相关数据
为什么站点使用了https加密之后,还是能够用firebug之类的软件查看到提交到的信息,并且还是明文的?例如说这样: 这是因为:https(ssl)加密是发生在应用层与传输层之间,所以在传输层看到的 ...
- 我用阿里云的虚拟云主机,也能配置https加密吗?
我用阿里云的虚拟云主机,也能配置https加密吗?答案是YES. 整个过程比想象中还要简单,都是一些基本的配置,虚拟主机 Web托管都可以很容易的搞定https. 首先我们要了解一下,阿里云是怎么支持 ...
- 白话HTTPS加密机制
在讲主题之前,我们先来区分两个概念:签名和加密有什么区别? 我们从字面意思看: 签名就是一个人对文件签署自己的名字,证明这个文件是我写的或者我认可的,所以只要别人看到我的签名,认识我字迹的人就知道这个 ...
随机推荐
- 找着CA证书位置
php -r "print_r(openssl_get_cert_locations());"
- Html5本地存储概念,有什么优点,与cookie有什么区别?
html5中的Web Storage包括了两种存储方式:sessionStorage和localStorage sessionStorage用于本地存储一个会话(session)中的数据,这些数据只有 ...
- 将map转为Bean的工具类 BeanUtil
Map<String,Object> pbclwhMainMap = (Map<String,Object>)param.get("pbclwhMain") ...
- NGINX+Lua模块编译安装
NGINX+Lua 环境配置 目录 NGINX+Lua 环境配置 一.环境装备 二.解压安装相应的软件 测试Lua环境 上面都是经过安装的一些坑之后安装完成的,下面是安装过程中出现的坑 一.环境装备 ...
- react-signature-canvas 签名功能
基于移动端需要扫码签名的功能,这里记录一下. 1.使用 react-signature-canvas 插件,npm i react-signature-canvas --save 2.此功能签名后生成 ...
- gpio 理解
NVIC :NVIC_Init(&NVIC_Initsture); 1.NVIC只是设置某一种中断的优先级,而不是打开某种中断. 2.ppp_ITConfig():才是开/关具体某种中断使能位 ...
- 三,打包electron
1,在当前项目下运行 npm install --save-dev @electron-forge/cli npx electron-forge import 此时package.json内容如下: ...
- Verilog 变量中位的数值类型
Verilog 变量中位的数值类型 Verilog变量中每个位(bit)的数值类型有四种,分别为1,0,Z,X.其中1,0比较明确就是高.低电平.而x, z在逻辑设计中也经常用到来建模.X,Z既可以大 ...
- java注解-最通俗易懂的讲解
来源:秒懂,Java 注解 (Annotation)你可以这样学 Annotation 中文译过来就是注解.标释的意思,在 Java 中注解是一个很重要的知识点,但经常还是有点让新手不容易理解. 我个 ...
- heimaJava17
java IO流 缓冲流 概念 缓存流也称为高效流.或者高级流.之前学习的字节流也可以称为原始流 作用:缓冲流自带缓冲区.可以提高原始字节流.字符流读写数据的性能 分类 字节缓冲流 字节缓冲输入流:B ...