HTTPS原理分析

HTTPS介绍

HTTPS,全称是Hyper Text Transfer Protocol over Secure Socket Layer,是一种能够保障安全的HTTP通道,它是HTTP协议的安全版。其保障的安全方式就是在HTTP协议的基础上增加了SSL(Secure Socket Layer,安全套接层)。HTTPS解决互联网上网络数据传输的3个核心问题:

  • 数据的安全性
  • 数据的完整性
  • 身份认证

HTTPS连接过程

HTTPS原理分析_第1张图片
image.png
  1. 客户端生成一个随机数,然后发送随机数(client_random)、客户端所能够支持的加密算法(比如非对称加密的RSA,对称加密的ASE、DES)、支持的协议版本(比如TLS1.0或者SSL3.0)。
  2. 服务器接收到请求后,会从客户端所支持的加密算法中进行选择某一个加密算法;随后服务器端也会生成一个随机数(server_random)。然后服务器发送server_random、所使用的非对称加密算法(比如RSA)和对称加密算法、以及数字证书(public key certificate)。
  3. 客户端接收到服务器发来的数据后,首先通过CA认证机构,对服务器端的证书进行认证(这个步骤解决的是身份认证的过程)。如果认证成功,则从证书中提取服务器端的公钥,再次生成一个随机数,然后通过服务器端的公钥以及服务器返回的非对称加密算法,对随机数进行加密。这是整个过程的第三个随机数,也被称为premaster secret。有了它以后,客户端和服务器端都将各自拥有了3个随机数,双方就可以根据实现商定的加密方法,各自生成一个密钥,即上面的SessionKey(这个密钥是对称加密的密钥)。
  4. 服务器端收到premaster secret之后,服务器端使用私钥解密,获取到随机数,然后通过3个随机数以及协商的算法,生成SessionKey。
  5. 此后,客户端和服务器端都将使用这个SessionKey和对称加密算法,首先对数据加密,然后数据传送。(这就解决了数据安全性的问题)

CA证书的签名校验过程

HTTPS原理分析_第2张图片
image.png

在上面我们提到服务器端会发送数字证书给客户端。数字证书中包含了服务器的公钥、权威机构的信息、服务器的域名,CA经过私钥加密后的数字签名、签名计算方法(即HASH算法,比如MD5、SHA1等)以及证书对应的域名。

下面我们来分析一下数字证书的整个流程:

  1. CA先通过Hash函数,计算数字证书,得到数字摘要(Digest)。
HTTPS原理分析_第3张图片
image

MD5正确的理解是消息摘要,而不是加密算法。在Java中,我们要使用MD5,也是通过消息摘要来获取。

image.png
  1. 然后CA会通过自己的私钥,对数字证书的摘要做一次加密,得到数字签名
HTTPS原理分析_第4张图片
image
  1. 当客户端收到数字证书之后,得到服务器端的公钥和数字签名等一些列的信息。
  2. 数字签名经过CA公钥解密,得到数字摘要(摘要1)。然后将数字证书根据证书上描述的Hash算法,计算一下当前证书,得到证书的数字摘要(摘要2)。将摘要2与摘要1做一次比对,如果一样,则表示证书一定是服务器所下发的。
HTTPS原理分析_第5张图片
image

在传输的过程中,即使被中间人所拦截,它可以使用CA的公钥解密数字签名(Hash算法的输出结果),同时得到Hash算法。但是由于MD5等算法的不可逆性,它无法根据Hash算法的输出,构造出Hash算法的输入。

常见问题

  1. 证书中包含了什么信息?

证书的过期时间和序号、所有者的信息、所有者的公钥。

  1. 服务器为什么要发送证书给客户端?

    需要身份认证,防止中间人攻击问题。

  2. HTTP建立连接的过程为什么要生成随机数?

客户端和服务器在握手的过程中交换了client_random和server_random,使用RSA公钥加密传输premaster secret,最后通过协商的算法,共同生成SessionKey(master secret)。保证SessionKey的随机性不受任意一方影 响。

参考

SSL/TLS协议运行机制的概述

HTTPS双向认证研究

数字签名是什么?

你可能感兴趣的:(HTTPS原理分析)