HTTPS如何保证传输安全

1,498 阅读6分钟

HTTPS安全

在我们的认知中,HTTP是超文本传输,是一个有问有答形式的短链接,但是不安全,HTTPS是安全的,使用了SSLTLS加密,那么什么是SSL?什么是TLS

HTTP采用的是明文传输,在HTTP报文传输过程中,很容易被窃听,如图所示

15992342789749.jpg

因此我们需要采用加密的方式防止被窃听,现在流行的是和SSLTLS进行组合的方式,对通信加密,如图所示

15992344079272.jpg

即在建立起安全的通信线路后,遍可以安全通信,这其实就是 HTTPSHTTPS并不是应用层的又一个协议,通常HTTP是和 TCP直接通信,当使用SSL时,则演变成先和SSL通信,再由SSLTCP通信了,

15992346974645.jpg

什么是 SSL 和 TLS?

SSL是介于HTTPS下和TCP上的一个协议加密层(安全套接字加密层),在后续的发展中SSL更新到3.0以后,IETFSSL3.0进行了标准化,并更名为TLS

基于SSLTLS通信设计两种加密,以下是两种加密的具体说明。

密钥加密技术

1、对称加密

所谓对称加密说白了就是用同一个密钥对数据进行加密和解密,对称加密的密钥由客户端生成。

客户端在发送数据到服务端之前,用共享密钥对数据进行加密,服务端接收到的是加密后的数据,需要用共享密钥解密成正常数据,传输速率上和HTTP差不多。我们常用的AES、DES算法就是对称加密。

使用对称加密会出现一个问题,共享密钥需要在每次发送数据时传输给对方,我们没办法保证安全的传输过去,如果共享密钥被窃听者拿到,那基本等于明文传输,这时就出现了非对称加密,但传输速率只有普通HTTP的十分之一。

2、非对称加密

公开密钥加密使用一对非对称的密钥。一把叫做私钥 (private key),另一把叫做公钥(public key)。公钥加密数据发送给对方,对方再用私钥解密。

非对称加密使用一对密钥,即公钥和私钥,且二者成对出现。私钥被自己保存,不能对外泄露。公钥指的是公共的密钥,任何人都可以获得该密钥。用公钥或私钥中的任何一个进行加密,用另一个进行解密。

被公钥加密过的密文只能被私钥解密,过程如下: 明文 + 加密算法 + 公钥 => 密文, 密文 + 解密算法 + 私钥 => 明文 被私钥加密过的密文只能被公钥解密,过程如下: 明文 + 加密算法 + 私钥 => 密文, 密文 + 解密算法 + 公钥 => 明文

3、混合加密

混合加密即结合了对称加密和非对称加密,结合了他们各自的优点。

HTTPS采用混合加密机制(建立通信前,用公开密钥加密的方式传递共享密钥加密需要用到的密钥,建立通信后,采用共享密钥进行通信),如图

15992798579124.jpg

CA机构认证原理

我们在调试HTTPS接口时,通常听到CA证书这样一个名词,它是CA机构颁发的证书,像上面所说的,为了让我们自己的公钥不暴露在外面,我们需要

  1. 将我们的公钥、组织信息、个人信息等提供给CA机构申请认证
  2. 认证成功,则CA机构会给我们颁发证书(包含申请者公钥、申请者的组织信息和个人信息、签发机构 CA 的信息、有效时间、证书序列号等信息,同时包含一个签名),首先CA机构自己拥有一套受信的公钥和私钥(现在的手机或电脑的操作系统都会将所有CA机构的公钥内置到操作系统中),CA机构用自己的私钥对证书进行加密,我们配置到服务器上即可。
  3. 在客户端第一次请求服务器时,将返回CA机构用私钥加密的证书(包含服务器的公钥 + CA 机构的数字签名)
  4. 系统根证书会用各个CA机构的公钥进行数据解密,并对域名等信息进行匹配。
  5. 若验证CA的公钥证书有效,客户端即拿到了服务器的公钥,即可正常通信。

因为非对称加密的方式耗时较高,所以HTTPS采用的是非对称加密和对称加密相结合的方式,即第一次采用非对称加密验证,后续采用对称加密进行通信。

建立 SSL 连接的步骤

15996191529991.jpg

上图为建立 SSL 连接的步骤,下面详细说明一下以上步骤:

  • 第 1 步:客户端发送 ClientHello 报文到服务端开始最初阶段的握手,内容包含客户端支持的SSL 版本号及加密组件列表(如加密算法、密钥长度等)。
  • 第 2 步:服务端收到报文后,发送 ServerHello 报文,内容包含需要使用的 SSL 版本和加密组件列表,这些都是从客户端发送过来的报文中筛选出来的。
  • 第 3 步:服务端接着发送从 CA 机构申请下来的证书 Certificate,证书包含公钥、组织信息等内容。
  • 第 4 步:服务端发送 ServerHelloDone 表示最初阶段的握手结束。
  • 第 5 步:客户端在收到 Certificate 后用系统预存的根证书对其进行验证,待验证成功后,发送 Client Key Exchange 开始第二阶段握手,报文中包含用公钥加密过的客户端生成的随机字符串 pre master secret,这就是之后通信需要用的共享密钥
  • 第 6 步:客户端接着发送 Change Cipher Spec,告知服务端,此次报文之后,将使用 pre master secret 字符串加密通信。
  • 第 7 步:客户端发送 Finished ,报文用 pre master secret 加密过,第二阶段握手能否成功,就看服务端能否顺利解密。
  • 第 8 步:服务端发送 Change Cipher Spec 报文。
  • 第 9 步:服务端发送 Finished 报文。

以上就是 HTTPS 在建立 SSL 通信连接的过程,之后就可以使用对称加密的方式进行通信了。

基本上HTTPS 可以总结为HTTPS = HTTP + 加密处理 + 证书认证 + 完整性保护,那完整性保护是如何保证的?

实际上在上面的流程中,从应用层发送数据时,会附加一种叫 MAC(Message Authentication Code) 的报文摘要,MAC 能够查知报文是否遭到篡改,从而保护报文的完整性。