图解HTTPS建立过程

阅读目录

关于网络安全加密的介绍可以看之前文章:

1. 网络安全——数据的加密与签名,RSA介绍
2. Base64编码、MD5、SHA1-SHA512、HMAC(SHA1-SHA512)
3. When I see you again(DES、AES、RSA、Base64、MD5加密原理介绍,代码实现)

HTTPS建立过程相当复杂,下图为示意图,可以有整体认识,一般我们编程知道这些已足够。

如果你想仿照HTTPS实现类似加密,可以阅读下具体过程,作为参照

准备工作(对应图中prepare1234)

可以看到,在客户端向服务器发起请求前,还有一些准备工作要做,或者说是有一些工作已经做好了。

  • 从CA证书颁发机构,获取数字证书。

    • 服务器:生成一对公私钥S.pub,S.pri,私钥自己保留,用于解密和签名,不能外泄。将公钥S.pub,身份信息,传给CA(Certificate Authority)机构;
    • CA机构:也有公私钥C.pub,C.pri;由S.pub,身份信息另外附加CA签名生成数字证书(签名使用C.pri进行签名)
    • 将数字证书颁发给申请者(服务器)
  • 客户端(比如我们经常使用的浏览器),为了安全性,会内置一份CA根证书,它包含C.pri,用于对数字证书验证

发起链接

https使用的是443端口,而http使用的是80端口

TCP端口号是一个2字节的整型,处于TCP报文段的前四个字节(2字节源端口号,2字节目的端口号)。

很明显范围是0~65535。其中0~1023具有特殊意义,已经被绑定,比如上面说的443,80,还有ftp的21端口。从1024~49151也具有特殊含义,但是还没有被用完,比如8080端口重定向。剩下的我们就可以随便使用,自定义了。

其实之前在嵌入式开发中,没有连接外网,也没有使用浏览器等等这些。所以端口完全自定义随便用,不用担心冲突:)。

下面的过程为具体详细一点的过程,如果不想看,可以完全只看示意图即可,对我们平时开发用处并不大。或者你在用wireshark类似的抓包工具时看的抓狂不认识,可以看看(反正我用Charles抓包):

1 客户端发起请求(对应图中1)

同样需要三次握手,建立TCP连接(毫无疑问HTTPS也是基于TCP的)

2 客户端发送Client Hello包(对应图中2)

  • 随机数

里面有1970年1月1日到现在的秒数,后面还有一个客户端发来的随机数Client.random

  • Session ID

如果客户端与服务器费尽周折建立了一个HTTPS链接,刚建完就断了,也太可惜,所以用Session ID将其保存,如果下次再来可以直接使用之前的链接进行对话(对称密钥)。

  • 密文族

告诉服务器,自己支持的加密算法种类

  • Server_name

3 Server Hello(对应图中2)

  • 随机数:对应服务器时间,服务器sever.random
  • Seesion ID,如果客户端发给服务器的session ID在服务端有缓存,服务端会尝试使用这个session;否则服务器会启用新的并返回给客户端;
  • 服务器挑选一个密文族

4 Certificate(对应图中2)

服务器终于发来我们想要的数字证书,包含了:签发机构、过期时间、主题名称、公共密钥信息、指纹信息等等

5 Server Hello Done(对应图中2)

服务器发送结束

6 客户端验证(对应图中3)

客户端从内置的CA根证书获取C.pub,对服务器发送来的数字证书进行验签,如果一致,说明证书是CA颁发的(前提是C.pub是真实的,确实是CA机构的公钥)。然后看看证书是否过期,域名是否匹配

7 生成对称密钥(对应图中4、5、6)

客户端根据之前的:Client.random + sever.random + pre-master生成对称密钥

经过S.pub加密发送给服务器,之后即可通过对称密钥进行通讯。(就是之前我们熟悉的http)

最后

在整个过程中,一共涉及2对公私密钥对,一对由服务器产生,主要用于加密,一对由CA产生,主要用于签名。

为什么要多一个CA呢?

假设没有CA,那么如果服务器返回的包含公钥的包被hack截取,然后hack也生成一对公私钥,他将自己的公钥发给客户端。hack得到客户端数据后,解密,然后再通过服务器的公钥加密发给服务器,这样数据就被hack获取。

有了CA后,客户端根据内置的CA根证书,很容易识别出hack的公钥不合法,或者说hack的证书不合法。

http://www.cnblogs.com/mddblog/p/6948980.html

标题中的新版指:版本 56.0.2924.87 (64-bit)

原来的版本可以点击绿色的小锁进入查看页面,新版的已经改了

新版的进入方式为F12-->Security选项卡(找不到的点右箭头>>),然后点击View certificate

时间: 2024-12-25 19:06:27

图解HTTPS建立过程的相关文章

HTTPS数据传输过程简介

HTTPS数据传输过程 ①客户端发起HTTPS连接握手 ②服务端收到HTTPS握手连接请求,与客户建立握手过程,和TCP的三次握手类似,并发送一系列的加密算法组合给客户端,与客户端协商加密算法组合 ③客户端收到这一系列的组合,从中选择一个自己能够支持的并且加密级别最高的加密算法组合,通告给服务端 ④服务端收到并确认客户端选择的加密组合,并将公钥证书发送给客户端,(这个公钥证书使用了非对称加密算法,使用这个公钥加密的信息只能由私钥解开,而这个私钥只有公钥的颁布者也就是服务端拥有,也就是说客户端用公

strongswan——IKE建立过程

strongswan的主进程为charon进程,负责IKE SA.IPSec SA建立.拆除.更新及其他相关的操作. charon进程默认通过socket-default插件与内核交互,用于IKE协议报文的收发.socket-default插件被编译为动态库,charon进程启动的时候,在初始化阶段动态加载.如下图 Socket-default通过poll机制阻塞等待内核收到的IKE协议报文.,如下图 如果使用的内核是裁剪过或二次开发的内核,要特别注意是否支持poll机制.比如说,如果仅支持se

浅谈HTTPS传输过程

HTTPS是什么 HTTPS不是一个新的协议,可以理解为是一个HTTP协议的加密"版本"(HTTP+SSL(TLS)).那为什么HTTP协议需要加密,不加密会出现什么问题呢?先来了解下传统的加密方式 加密方式 对称加密:对称加密是Server和Client都拿一个相同的密钥进行加密和解密,他的优点的性能好一点,但是也存在很多问题. 问题: 1.服务器如何把密钥安全的给到客户端(存在请求被拦截.窜改) 2.假设一个客户端的密钥泄露了被公开,所有的客户端以及服务器的连接传输都是不安全的 非

【数通面试私房菜之BGP专题】第一期:BGP邻居建立过程

BGP邻居建立过程 BGP(Border Gateway Protocol)是一种用于自治系统(Autonomous System)之间的动态路由协议.BGP使用TCP作为其传输层协议(监听端口号为179). BGP对等体间通过以下5种报文进行交互,其中Keepalive报文为周期性发送,其余报文为触发式发送: ? Open报文:用于建立BGP对等体连接.? Update报文:用于在对等体之间交换路由信息.? Notification报文:用于中断BGP连接.? Keepalive报文:用于保持

PCM data flow - part 6: 声卡和PCM设备的建立过程

前面几章分析了Codec.Platform.Machine驱动的组成部分及其注册过程,这三者都是物理设备相关的,大家应该对音频物理链路有了一定的认知.接着分析音频驱动的中间层,由于这些并不是真正的物理设备,故我们称之为逻辑设备. PCM逻辑设备,我们又习惯称之为PCM中间层或pcm native,起着承上启下的作用:往上是与用户态接口的交互,实现音频数据在用户态和内核态之间的拷贝:往下是触发codec.platform.machine的操作函数,实现音频数据在dma_buffer<-> cpu

图解IIS配置过程

环境介绍: 操作系统:win7,64位.IIS7 开发软件:VS2010,32位 图解IIS配置过程: 此过程之前确保已安装了IIS. 1.在"控制面板"中找到"管理工具",点击打开之后,双击"Internet 信息服务(IIS)管理器",弹出"Internet 信息服务(IIS)管理器"窗口,如图 2.在"Internet 信息服务(IIS)管理器"窗口中,右键"应用程序池".点击&q

驱动学习之gpiolib的建立过程

1:gpiolib的学习重点 (1)gpiolib的建立过程:gpiolib和虚拟地址映射类似,也是需要一个建立 过程的,因此在学习的时候,我们需要明白gpiolib是什么时候建立的,建立函数在哪被调用的. (2)gpiolib的使用方法:申请.使用.释放 (3)gpiolib的架构:涉及哪些目录的哪些文件 2:什么是gpiolib,为什么需要使用gpiolib linux中从2.6.35以后就开始有gpiolib库了,gpiolib的作用是对所有的gpio实行统一管理,因为驱动在工作的时候,会

OSPF邻接建立过程

OSPF邻接建立过程

tcp/ip 建立过程

1. tcp /ip : 在osi网络参考模型中,它提供着可靠的传输服务/ 定义:传输控制协议 a:   tcp/ip 的建立过程,通过三次握手,和四次挥手来完成. 2. 何为三次握手? 首先在这假设,syn="m"   ,syn 就是客户端在向务端发送链接请求,服务端会收到这个syn的链接请求 包,客户端的状态为:syn_sent 第一次握手:当客户端给服务器发送syn(m)链接请求,等待服务器的确认,然后客户端的状态为 syn_sent 第二次握手:当服务端收到syn(m)的包的链