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加密机制
在讲主题之前,我们先来区分两个概念:签名和加密有什么区别? 我们从字面意思看: 签名就是一个人对文件签署自己的名字,证明这个文件是我写的或者我认可的,所以只要别人看到我的签名,认识我字迹的人就知道这个 ...
随机推荐
- vue v-model的原理
关于v-model v-model 可以实现表单与data里的双向绑定 很多插件上可以在组件上使用v-model,他是如何实现的呢,其实v-model就是一个语法糖 <input v-model ...
- Pytest Fixture(三)
name: name参数表示可以对fixture的名称进行重命名: 注意:通过name重命名后,继续使用以前的名字调用会报错. import pytest @pytest.fixture(name=' ...
- 「SOL」旧试题 (LOJ/SDOI)
数论+图论,妙不可言 # 题面 给定 \(A,B,C\),求: \[\sum_{i=1}^A\sum_{j=1}^B\sum_{k=1}^C\sigma_0(ijk) \] 数据规模:\(A,B,C\ ...
- Spark RDD编程
1. 准备文本文件从文件创建RDD lines=sc.textFile()筛选出含某个单词的行 lines.filter()lambda 参数:条件表达式 2. 生成单词的列表从列表创建RDD wor ...
- Oracle存储过程 Call使用
在 Oracle 中,可以将存储过程(PROCEDURE)定义在一个包(PACKAGE)中. 要调用包中的存储过程,需要使用包名和存储过程名来引用它们.以下是一个示例: 假设我们有一个名为 my_pa ...
- vue+element el-table有关Checkbox的一些功能
在做项目的时候会碰到一些表格操作的问题其中我归整了一下有关于多选功能的一些记录 一:默认选中其中一行 <el-table class="editTable" :data=&q ...
- Spring系列之基于 Java 的容器配置-9
目录 组合基于 Java 的配置 使用`@Import`注解 有条件地包含`@Configuration`类或`@Bean`方法 结合 Java 和 XML 配置 组合基于 Java 的配置 Spri ...
- 一,创建一个electron应用程序
之前我们已经用html+css+js创建了一个项目,现在将这个项目用electron以应用程序呈现. 1,首先新建一个文件夹,从终端进入该文件夹: 2,在该文件夹下执行npm init,初始化该项目. ...
- Linux_Tomcat实战
Tomcat实战 tomcat简述 tomcat安装 部署jspgou项目 tomcat简述 Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,Tomcat是Apache 软件基金会(A ...
- python-文件内容操作
1.按文件中数据的组织形式把文件分为文本文件和二进制文件两类. 文本文件:文本文件存储的是常规字符串,由若干文本行组成,通常每行以换行符'\n'结尾.常规字符串是指记事本或其他文本编辑器能正常显示.编 ...