Https连接过程详解

Posted microhex

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Https连接过程详解相关的知识,希望对你有一定的参考价值。

概述

HTTPS相比较于HTTP而言,就是多了一个S,这个S我们可以称之为安全,说得通俗一点就是加密通信的HTTP而已。说的简单一点,就是每次通信,通信双方都会使用加密之后的数据通信。

连接

HTTPS连接大致可以分为5个步骤,我也是经过学习和看不同的资料才稍微有些感触,如果有不对的地方,请轻喷。
大致可以分为7个部分:

  1. Client Hello
  2. Server Hello
  3. 服务器发送证书
  4. 客户端验证证书
  5. 客户端生成随机数,通过证书中的公钥进行非对称加密,发送到服务器
  6. 服务器使用私钥解密,获取到该随机数,将该随机数设置为密钥,使用对称加密加密需要发送的数据
  7. 客户端解密数据,SSL通信开始

虽然一个HTTPS通信看上去很简单,其实内部还是非常复杂的,用到了证书验证,一次非对称加密,n次对称加密,单单捋起来还是比较复杂的。

client hello

客户端此时向服务器发送的报文此时包括:

  1. 当前支持的TLS版本集合
  2. 当前支持的非对称加密算法集合
  3. 当前支持的对称加密算法集合
  4. 当前支持的Hash算法集合
  5. 其他信息

server hello

此时,服务器需要选择自己支持的算法,然后发送给客户端,告诉客户端哪些算法是自己支持的。然后给客户端来一份自己的想法:

  1. 当前支持的TLS版本
  2. 当前支持的非对称加密算法
  3. 当前支持的对称加密算法
  4. 当前支持的Hash算法
  5. 其他信息

服务器发送证书

server hello完成之后,服务器又一次向客户端发送了证书和密钥,这个证书主要是为保证服务器和客户端之间通信是可靠的,证书中有很多东西需要验证。而密钥就是为了提供了验证的可能。为了方便下面的了解,我们需要对证书的结构有一定的了解。
就X509v3证书为例,主要结构为:

组成部分含义
tbsCertificate(to be signed certificate)待签名证书
SignatureAlgorithm签名算法
Signaturevalue签名值

而我们的tbsCertificate其实又包含了以下10个方面的东西:

组成部分含义
Version Number版本号
Serial Number序列号
Signature Algorithm ID算法签名ID
Issuer Name发行者
Validity period有效时间
Subject name证书主体名称
Subject Public key Info证书主体公钥信息 (公钥算法和公钥值)
Issuer Unique Identifier发行商唯一ID
Subject Unique Identifier主体唯一ID
Extensions其它扩展

客户端验证证书

这个证书验证还是蛮复杂的,因为涉及到很多概念,比如根证书、二级证书(CA)、 证书链等过程,我也曾经尝试去了解了一下,无奈比较复杂,只是了解了个大概。今天就聊一下这个大概。
客户端拿到这个证书之后,将会从tbsCertificate中获取证书的颁发机构,从而在浏览器内置的根证书中寻找该证书颁发机构是否为信任机构,如果不是,浏览器将会警告用户证书存在问题,一般会出现如下问题:

如果获取的证书颁发机构是合法的,则会从浏览器中找到对应信任机构的公钥,用这个公钥来解密当前证书的签名得到一个Hash值Hash1。上面证书结构中所说的,存在一个签名算法和签名值,这个值是服务器获取的证书(也就是信任机构所颁发的)使用私钥加密而成的,所以使用对应证书的公钥是可以解密的(如果没有错误),具体原因可以查看。然后我们对证书的内容进行一次Hash值,得到Hash2,如果当前的Hash1与Hash2值相等,那么说明证书是合法的,没有被修改过,用户可信任。
在接下来需要对证书的持有者对应的信息进行检查,比如URL是否为需要请求的URL;判断各种请求参数等等…稍微有点不符合,我们就判断当前数据存在问题,直接告警。

客户端产生随机数

如果上面的证书验证通过,此时客户端将会生成一个随机数,通过已经确定的非对称加密算法,使用公钥将这个随机数加密,然后发送到服务器。

服务端解密

服务器接收到数据,将会使用私钥解密发送过来的随机数,将会使用这个随机数设置为密钥,使用已经选择的对称加密算法,加密数据,然后将数据发送出去,从此服务端SSL通信正式开始。

客户端解密

接受到服务器的数据,使用对称算法,上面生成的随机数作为密钥,开始解密。从此,一次完整的HTTPS通信过程完成。

最后一张图:


最后,还是对证书的合法性验证存在比较模糊的认识,希望有更好的文章出现。
参考资料:
1.https://blog.csdn.net/liuxingrong666/article/details/83869161
2.https://blog.csdn.net/anjon520/article/details/24884207
3.https://www.cnblogs.com/felixzh/p/8316710.html
4.https://blog.csdn.net/u012852986/article/details/78873387

以上是关于Https连接过程详解的主要内容,如果未能解决你的问题,请参考以下文章

HTTPS的作用和过程,详解为啥要 三次握手 四次挥手

HTTPS连接过程以及中间人攻击劫持

详解HTTPS改造全过程

SSL证书的连接主要过程有哪些

Https详解

Https详解