https详解,ssl详解,学不会来打死我

http

在了解https之前呢我们先来了解一下http。
超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息。HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此HTTP协议不适合传输一些敏感信息,比如信用卡号、密码等。

这时候https就诞生了。

https

为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS。HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer 或 Hypertext Transfer Protocol Secure,超文本传输安全协议),是以安全为目标的HTTP通道。HTTPS并不是一个新协议,而是HTTP+SSL(TLS)。

ssl

SSL 是“Secure Sockets Layer”的缩写,中文叫做“安全套接层”。标准化之后SSL被改为 TLS(Transport Layer Security传输层安全协议)。

ssl协议可以说是https的核心,对数据进行加密就是通过ssl,而ssl协议既不是工作在应用层也不是工作在传输层而是工作在他们之间的ssl层:

在https工作开始前,首先要通过ssl握手建立ssl连接,这类似于一种什么感觉呢?就想TCP在传输数据前,要通过tcp的三次握手来建立一条TCP的端到端的连接。

为什要进行握手?

像两个人沟通一样,握手是表示一个回话的开始。对于SSL/TLS来说,通过握手建立连接,交换客户端与服务器之间的信息从而生成会话秘钥(主秘钥),用来加密之后的消息。

在TLS中有两种主要的握手类型:一种基于RSA,一种基于Diffie-Hellman。 这两种握手类型的主要区别在于主秘钥交换和认证上

三个“2”

搞笑的是https协议跟“2”这个数字有很大渊源,https当中的三个“2”。(方便记忆)
1.https的工作过程分为2个阶段:第一个是ssl连接建立阶段,一个是ssl数据传输阶段。
2.https协议分为两个协议http协议、ssl协议
3.ssl协议又分为两个协议:

SSL记录协议
(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能。-----------更针对数据传输阶段

SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。------------更针对于ssl连接建立阶段

https的重点是ssl协议,而ssl协议的重点则是ssl握手协议,所以我们就来具体的讲一下ssl握手的两种方式!

DH握手

DH握手原理图:

DH抓包图:

DH握手发包图:

ssl握手一共可以分为4个阶段:
(1)双方相互问候阶段

客户端首先发送ClientHello消息到服务端,服务端收到ClientHello消息后,再发送ServerHello消息回应客户端。
(Client Hello)握手第一步是客户端向服务端发送 Client Hello 消息,这个消息里包含了一个客户端生成的随机数 Random1、客户端支持的加密套件(Support Ciphers)、会话ID、压缩方法和 SSL Version 等信息。

服务器会看客户端发来的问候信息,看自己是否支持
(ServerHello)如果支持,第二步是服务端向客户端发送 Server Hello 消息,这个消息会从 Client Hello 传过来的 Support Ciphers 里确定一份加密套件,这个套件决定了后续加密和生成摘要时具体使用哪些算法,另外还会生成一份随机数 Random2。

注意,至此客户端和服务端都拥有了两个随机数(Random1+ Random2),这两个随机数会在后续生成对称秘钥时用到。

这个阶段之后,客户端服务端知道了下列内容:
1.SSL版本
2.密钥交换、信息验证和加密算法
3.压缩方法
4.有关密钥生成的两个随机数。

(2)第二阶段:服务端为消息的唯一发送方

该阶段分4步:
1.证书(可选):服务器将数字证书和到根CA整个链发给客户端,使客户端能用服务器证书中的服务器公钥认证服务器。
2.服务器密钥交换:这里视密钥交换算法而定
3.证书请求(可选):服务端可能会要求客户自身进行验证。
4.服务器握手完成:第二阶段的结束,第三阶段开始的信号

Certificate消息:第一次建立必须要有证书
一般情况下,除了会话恢复时不需要发送该消息,在SSL握手的全流程中,都需要包含该消息。消息包含一个X.509证书,证书中包含公钥,发给客户端用来验证签名或在密钥交换的时候给消息加密。 这一步是服务端将自己的证书下发给客户端,让客户端验证自己的身份,客户端验证通过后取出证书中的公钥。

Server Key Exchange:
根据之前在ClientHello消息中包含的CipherSuite信息,决定了密钥交换方式(例如RSA或者DH),因此在Server Key Exchange消息中便会包含完成密钥交换所需的一系列参数。

Certificate Request(可选)------可以是单向的身份认证,也可以双向认证。

Server Hello Done :
该消息表示服务器已经将所有信息发送完毕,接下来等待客户端的消息。

(3)第三阶段:客户端是唯一消息发送方。

该阶段分3步:
1.证书(可选):为了对服务器证明自身,客户要发送一个证书信息,这是可选的。
2.客户机密钥交换(Pre-master-secret):这里客户端将预备主密钥发送给服务端,注意这里会使用服务端的公钥进行加密。
3.证书验证(可选),对预备秘密和随机数进行签名,证明拥有(a)证书的公钥。

最重要的一个包 ---------Client Key exchange :
根据之前从服务器端收到的随机数,按照不同的密钥交换算法,算出一个pre-master(预备主密钥,会话秘钥的前身),发送给服务器,服务器端收到pre-master算出main master(会话秘钥)。而客户端当然也能自己通过pre-master算出main master。如此以来双方就算出了对称密钥。

如果是RSA算法,会生成一个48字节的随机数,然后用server的公钥加密后再放入报文中。如果是DH算法,这是发送的就是客户端的DH参数,之后服务器和客户端根据DH算法,各自计算出相同的pre-master secret。

本消息在给服务器发送的过程中,使用了服务器的公钥加密。服务器用自己的私钥解密后才能得到pre-master key.(向服务器证明自己的确持有客户端证书私钥)

(4)最后一个阶段:该阶段分为4步,前2个消息来自客户机,后2个消息来自服务器。

ChangeCipherSpec :
编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送。

Clinet Finished:
客户端握手结束通知, 表示客户端的握手阶段已经结束。这一项同时也是前面发送的所有内容的hash值,用来供服务器校验(使用HMAC算法计算收到和发送的所有握手消息的摘要,然后通过RFC5246中定义的一个伪函数PRF计算出结果,加密后发送。此数据是为了在正式传输应用数据之前对刚刚握手建立起来的加解密通道进行验证。)

Server Finished:
服务端握手结束通知。

客户端这边的最后过程:
1.客户端发送一个Change Cipher Spec消息,并且把协商得到的CipherSuite拷贝到当前连接的状态之中。
2.然后,客户端用新的算法、密钥参数发送一个Finished消息,这条消息可以检查密钥交换和认证过程是否已经成功。其中包括一个校验值,对客户端整个握手过程的消息进行校验。

服务器这边的最后过程:
1.使用私钥解密加密的Pre-master数据,基于之前(Client Hello 和 Server Hello)交换的两个明文随机数 random_C 和 random_S,计算得到协商密钥:enc_key=Fuc(random_C, random_S, Pre-Master)。
2.计算之前所有接收信息的 hash 值,然后解密客户端发送的 encrypted_handshake_message,验证数据和密钥正确性。
3.发送一个 ChangeCipherSpec(告知客户端已经切换到协商过的加密套件状态,准备使用加密套件Session Secret加密数据了)
4.服务端也会使用 Session Secret 加密一段 Finish 消息发送给客户端,以验证之前通过握手建立起来的加解密通道是否成功。

此时双方握手完成,安全的建立起一条ssl连接,都拿到会话秘钥,接下来数据传输用会话秘钥来加密。

RSA握手

RSA握手原理图:

RSA抓包图:

其实rsa握手和dh握手大致上是相同的,只不过rsa握手没有发送sever key exchange。所以在这里不做详细解释,看DH握手。在RSA中是由客户端发送客户端密钥交换信息完成密钥交换,通过客户端公钥加密,服务端私钥解密完成身份认证。

https详解,ssl详解,学不会来打死我相关推荐

  1. nginx安装、nginx前端配置、后端配置、前后端分离配置、https支持(ssl配置)、负载均衡配置、nginx location详解

    nginx配置 一.nginx安装 二.nginx配置 仅前端配置 仅后端配置 前后分离配置(1) 前后分离配置(2) 前后不分离配置 https/ssl配置 负载均衡配置 数据压缩配置 三.完整ng ...

  2. HTTPS简介以及SSL协议详解

    HTTPS简介以及SSL协议详解 1.HTTPS简介 2.SSL协议介绍 2.1.SSL协议的功能 2.2.SSL协议在协议栈的位置 2.3.SSL协议组成 2.3.1.纪录协议的功能 2.3.2.S ...

  3. HTTPS篇之SSL握手过程详解

    由于最近接触到的一个项目数据有些敏感,所以需要通过加密算法保证数据的安全性.由于公司之前有一套自定义传输协议并且有配套的公共代码导致客户端人员不太愿意使用 WWS 协议.且之前的协议没有协议层的数据加 ...

  4. 清默网络——CISCO ASA SSL ***详解

    CISCO ASA SSL ×××详解 清默网络 CCIE Team 制作清默网络 CCIE Team 制作oCisco ASAWebN××× 配置详解实验环境如拓朴图.在做实验之前让我们先来了解一下 ...

  5. 深度学习网络模型——Vision Transformer详解 VIT详解

    深度学习网络模型--Vision Transformer详解 VIT详解 通用深度学习网络效果改进调参训练公司自己的数据集,训练步骤记录: 代码实现version-Transformer网络各个流程, ...

  6. 详解Python序列解包(5)

    如果一个函数需要以多种形式来接收参数,定义时一般把位置参数放在最前面,然后是默认值参数,接下来是一个星号的可变长度参数,最后是两个星号的可变长度参数:调用函数时,一般也按照这个顺序进行参数传递.调用函 ...

  7. 详解Python序列解包(4)

    本文主要介绍调用函数传递参数时序列解包的用法.在定义函数时在形参前面加2个星号**表示可变长度参数,可以收集若干关键参数形式的参数传递并存放到一个字典之中.与之相对,如果实参是个字典,可以使用两个星号 ...

  8. 详解Python序列解包(3)

    本文主要介绍调用函数传递参数时序列解包的用法.在调用函数传递参数时,可以在实参序列前加一个星号*进行序列解包,或在实参字典前加两个星号**进行解包,本文介绍第一种用法,第二种用法后面再单独发文介绍. ...

  9. linux内核如何读写ddr,linux内核解压详解.doc

    linux内核解压详解 Description: /*?OldLinux论坛 -- 有关早期Linux内核代码发展的论坛. 9!%83gY* ?linux/arch/arm/boot/compress ...

最新文章

  1. java监听mysql_java实时监控mysql数据库变化
  2. linux下的SIGINT的作用,signal(SIGINT,stop)的问题,大家进来看下!!!
  3. 像癌症一样传播:世界首个PLC病毒问世
  4. python二叉树深度 判断平衡树
  5. python实现文件共享_改进的一行Python实现文件共享--支持并发
  6. MQTT数据处理之从tcp连接获取数据过程
  7. Netty+SpringBoot+FastDFS+Html5实现聊天App详解(一)
  8. python画图显示不了中文_完美解决Python matplotlib绘图时汉字显示不正常的问题
  9. 19个神经元控制自动驾驶汽车,MIT等虫脑启发新研究登Nature子刊
  10. python群发邮箱软件_maily:命令行邮件(批量)发送工具
  11. android gallery2源码分析,Android4.2.2 Gallery2源码分析(8)——假装的Activity
  12. word2016 图片去底灰_几块钱买的葫芦,三四十双手套轮换用,他个个盘出玻璃底...
  13. java虚拟机安装_java虚拟机官方下载|Java Virtual Machine(java虚拟机)下载v5.0官方版 附安装教程 - 欧普软件下载...
  14. 快速入门Maxwell基本操作流程(2D部分)
  15. wps带阴影的边框怎么设置_win10系统设置wps阴影边框的具体办法
  16. 智能水表营收管理系统
  17. iredmail mysql_iRedmail配置手册
  18. 如何通过API接口,获取拼多多商品详情数据
  19. 历年考研计算机专业英语平均分,历年考研英语平均分及难度分析(截止至2020年)...
  20. 如何判断一个点是否在多边形内?

热门文章

  1. 计算机音乐外国,趣闻,国内外大神教你,用计算器圆你的音乐梦
  2. 自定义Dialog不显示视图
  3. Tableau培训学习笔记3:空间数据分析——科比投篮以及新冠肺炎分析(带数据)
  4. 4p、4c、4R营销理论概要
  5. django自强学堂地址
  6. 软件工程导论张海蕃书籍pdf_软件工程导论张海蕃 课后习题答案
  7. SQL简单基础(2)
  8. 电脑鼠硬件参数及清单
  9. UnityMMD+UnityChan+Shader从0到放弃
  10. 编程实现执行CMD命令-用照片查看器打开图片