HTTPS 详细解析 (超详细,半小时搞懂HTTPS)

https S 代表的是SSL/TLS

先做个实验: 在浏览器的地址栏上输入 http:\\www.meituan.com

用http header LIVE  抓个包如下

过程如下:

浏览器先以HTTP协议来连接服务器。服务器因配置了HTTPS,所以使用了302跳转至https页面,浏览器再去连接服务器的443端口。

上述小实验只是https步骤的第一步 ,接下来先进行TCP三次握手,然后进行SSL/TLS四次握手

接下来就是难点了。再讲难点之前,先讲难点细分讨论

什么是对称加密

只有一个密钥,它可以对内容进行加密,也可以用该密钥对密文进行解密。

但问题来了,密钥如何保护呢?

什么是公钥加密  (非对称加密)

有两把密钥,一把公钥,一把私钥,公钥加密的内容必须用私钥才能解开,私钥加密的内容必须用公钥解开

单个公钥私钥,只能保障单方向的安全性,为什么这么说呢

服务器将他的公钥明文发送给浏览器,浏览器将数据用公钥加密发给服务器,只有服务器有私钥可以查看数据。

服务器将数据用私钥加密发送给浏览器,浏览器用公钥解密

想想看,公钥是一开始是明文传输的,意味着只要截获了公钥就可以查看服务器发送的消息,那怎样可以保障双方向的通信安全呢?

服务器一对公钥私钥,浏览器一对公钥私钥

服务器明文传输自己的公钥A给浏览器,浏览器明文传输自己的公钥B给服务器

以后浏览器给服务器发送的数据都用公钥A加密,服务器给浏览器发送的数据用公钥B加密,这样就保障了双向通信的安全性

但非对称性加密非常耗时,如何解决呢 ?

对称加密+非对称加密结合

浏览器用公钥A将自己的对称密钥X发送给服务器

服务器用私钥A解密获得对称密钥X

双方用对称密钥X进行数据交换

这样看起来很安全,但其实还要一个小问题

在发送自己的公钥给对面时,有个中间人截获双方的公钥,并且把自己的公钥发送给浏览器和服务器

这时候中间人就可以收到用中间人的公钥加密的对称密钥X,这样看来,还是很危险,客户端根本不知道接受的公钥是否可信

数字证书

数字证书是网站的身份证,有了证书就可以证明该网站的合法性;

网站在使用HTTPS之前,需要向CA机构申请一份数字证书,数字证书里有持有者和网站公钥的信息,服务器只需要把证书传给浏览器即可

但如何证明证书的真伪性呢?

数字签名

把证书的内容生成一份签名,对比证书的内容和签名是否一致

签名如何制作呢: 将证书的明文信息用hash函数加密一次得到一个固定长度的序列,称消息摘要,哈希值,然后CA用私钥进行加密得数字签名   明文和数字签名组成数字证书

如何验证呢:用CA机构的公钥对数字签名进行解密,得到哈希值,用证书里的hash算法对证书明文进行hash ,查看两次得到的hash是否相同

CA公钥是否可信?

操作系统,浏览器会默认安装信任的证书,证书里包含信任的公钥

现在来理解一下四次握手:

1.创建一个属于浏览器与服务器之间的session,避免多次重复验证

2.服务器将自己的证书发送给浏览器

3.浏览器发送对称密钥给服务器

4.安全的会话建立,数据采用私钥加密

https中涉及的数据包

client hello报文:

TSL版本

SID(session id):保持会话;扩展:不过只保留在一台服务器上,如果请求域名的流量很大的时候,往往右很多的服务器提供服务,就无法恢复对话。采用session ticket

密文族:密钥交换算法-对称加密算法-哈希算法

server_name:请求访问的域名

服务器在收到client hello报文后,会回复三个数据包

server hello:session id 、选择的密文族、选择的TSL版本

Certificate报文:服务器的数字证书

server hello done 和server key exchange

客户端验证证书的真伪: 根据数字签名

密钥交换:客户端通过服务器的证书将非对称加密的密钥发送给服务器

到此建立TSL连接结束了 ,其中还要很多细节之处由于水平有限,未能提出

原文地址:https://www.cnblogs.com/dhfblog/p/12115477.html

时间: 2024-08-03 20:49:58

HTTPS 详细解析 (超详细,半小时搞懂HTTPS)的相关文章

mybatis源码-解析配置文件(三)之配置文件Configuration解析(超详细, 值得收藏)

1. 简介 1.1 系列内容 本系列文章讲解的是mybatis解析配置文件内部的逻辑, 即 Reader reader = Resources.getResourceAsReader("mybatis-config.xml"); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); 其背后的逻辑. 1.2 适合对象 了解如何使用 mybatis 来访问数据库.可参看<

王爽《汇编语言》(第三版)实验8解析(超详细)

题目 分析程序,在运行前思考:这个程序是否能够正确返回? 运行之后再思考:为什么是这种结果? 通过这个程序加深对相关内容的理解. 贴入代码如下: assueme cs:codesg codesg segment mov ax,4c00h int 21h start: mov ax,0 s: nop nop mov di,offset s mov si,offset s2 mov ax,cs:[si] mov cs:[di],ax s0: jmp short s s1: mov ax,0 int

猫猫学IOS(四)UI之半小时搞定Tom猫

话不多说 先上效果 项目源码素材下载地址: Tom猫游戏代码iOS 素材http://blog.csdn.net/u013357243/article/details/44457357 效果图 曾经风靡一时的tom猫其实制作起来那是叫一个相当的easy啊 功能全部实现,(关键是素材,没有素材的可以加我微信) 新手也可以很快的完成tom这个很拉轰的ios应用哦 做过android的我表示,android党默哀下把,那个做起来真心痛苦.... 然后呢你需要准备这些素材... 拖拽控件吧,因为这一个项

搞懂分布式技术17,18:分布式事务总结

搞懂分布式技术17:浅析分布式事务 众所周知,数据库能实现本地事务,也就是在同一个数据库中,你可以允许一组操作要么全都正确执行,要么全都不执行.这里特别强调了本地事务,也就是目前的数据库只能支持同一个数据库中的事务.但现在的系统往往采用微服务架构,业务系统拥有独立的数据库,因此就出现了跨多个数据库的事务需求,这种事务即为"分布式事务".那么在目前数据库不支持跨库事务的情况下,我们应该如何实现分布式事务呢?本文首先会为大家梳理分布式事务的基本概念和理论基础,然后介绍几种目前常用的分布式事

【公众号系列】超详细SAP HANA JOB全解析

公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[公众号系列]超详细SAP HANA JOB全解析 写在前面 你一定知道SM36/SM37,ERP里的JOB我们都很熟悉,可以让一些功能性的程序定期地完成一些我们需要的指定性的操作.这样既可以节省时间,又可以避开服务器使用的高峰期,所以很多时候JOB是项目实施的必要手段. 那么,这些事情(定时执行定时任务的功能)是否可以在HANA里来完成呢,由于

算法核心——空间复杂度和时间复杂度超详细解析

算法核心——空间复杂度和时间复杂度超详细解析 一.什么是算法 算法: 一个有限指令集 接受一些输入(有些情况下不需要收入) 产生输出 一定在有限步骤之后终止 每一条指令必须: 有充分明确的目标,不可以有歧义 计算机能处理的范围之内 描述应不依赖于任何一种计算机语言以及具体的实现手段 其实说白了,算法就是一个计算过程解决问题的方法.我们现在已经知道数据结构表示数据是怎么存储的,而“程序=数据结构+算法”,数据结构是静态的,算法是动态的,它们加起来就是程序. 对算法来说有输入,有输出,相当于函数有参

超详细JSON解析步骤

JSON简介 JAVAScript Object Notation是一种轻量级的数据交换格式 具有良好的可读和便于快速编写的特性. 业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语言的支持) JSON采用兼容性很高的文本格式,同时也具备类似于C语言体系的行为. – Json.org JSON作为数据是目前网络中主流的数据传输格式之一,应用十分广泛,说是使用率达到99%一点也不勉强 JSON支持的数据类型 我们要学习使用JSON解析,必须对JSON解析的规则原理有深

【智能算法】粒子群算法(Particle Swarm Optimization)超详细解析+入门代码实例讲解

喜欢的话可以扫码关注我们的公众号哦,更多精彩尽在微信公众号[程序猿声] 01 算法起源 粒子群优化算法(PSO)是一种进化计算技术(evolutionary computation),1995 年由Eberhart 博士和kennedy 博士提出,源于对鸟群捕食的行为研究 .该算法最初是受到飞鸟集群活动的规律性启发,进而利用群体智能建立的一个简化模型.粒子群算法在对动物集群活动行为观察基础上,利用群体中的个体对信息的共享使整个群体的运动在问题求解空间中产生从无序到有序的演化过程,从而获得最优解.

JFinal 源码超详细解析之DB+ActiveRecord

我记得以前有人跟我说,"面试的时候要看spring的源码,要看ioc.aop的源码"那为什么要看这些开源框架的源码呢,其实很多人都是"应急式"的去读,就像读一篇文章一下,用最快的速度把文章从头到尾读一遍,那结果就是当你读完它,你也不清楚它讲了一个什么故事,想表达什么. 一个优秀的架构的源码我认为就好像一本名著一样,你的"文学"水平越高,你就越能读出作者设计的精妙之处.一篇源码在你不同水平的时候,能读出不同的东西,因此,我觉得优秀的框架的源码是经久