原创

TCP_IP分层模型之应用层https

学习 https 之前,需要先对 http 有所了解,然后对对称加密,非对称加密也要了解,为此,小编还学习研究了好久的非对称加密算法,其中一篇非对称加密算法的博客写得极好,推荐去看看https://blog.csdn.net/wjiabin/article/details/85228078

一、基础知识

1.非对称加密

非对称加密算法小编看了很多文章,总结下来就下面三点,更多细节看上一篇文章 被公钥加密过的密文只能被私钥解密; 被私钥加密过的密文只能被公钥解密; 非对称加密的缺点是加密和解密花费时间长、速度慢,只适合对少量数据进行加密。

2.HTTPS 的实质

HTTP 加上加密处理、认证机制、以及完整性保护后的就是 HTTPS。 需要知道的是,HTTPS 并非是应用层的一种新的协议。只是 HTTP 通信接口部分用 SSL 或 TLS 协议代替而已。也就是说,所谓的 HTTPS,其实就是身披 SSL 协议外壳的 HTTP。

HTTPS的实质
HTTPS的实质

值得一提的是,SSL 是独立于 HTTP 协议的,也就是说其他运行在应用层的协议均可配合 SSL 协议使用。现今 SSL 是最为广泛的网络安全技术。

3.SSL 和 TLS

HTTPS 中使用了 SSL 和 TLS 这两个协议。 TLS 以 SSL3.0 为基准,后又制定了 TLS1.0、TLS1.1 和 TLS1.2。当前主流的版本是 SSL3.0 和 TLS1.0。 TLS 是以 SSL 为原型开发的协议,有时候会统称该协议为 SSL。

二、HTTPS 通信过程

HTTPS 为了兼顾安全与效率,同时使用了对称加密和非对称加密。数据是被对称加密传输的,对称加密过程需要客户端的一个密钥,为了确保能把该密钥安全传输到服务器端,采用非对称加密对该密钥进行加密传输,总的来说,对数据进行对称加密,对称加密所要使用的密钥通过非对称加密传输。

HTTPS通信过程
HTTPS通信过程

2.1HTTPS 在传输的过程中会涉及到三个密钥:

  • 服务器端的公钥和私钥,用来进行非对称加密
  • 客户端生成的随机密钥,用来进行对称加密

2.2 一个 HTTPS 请求实际上包含了两次 HTTP 传输,可以细分为 8 步。

  1. 客户端向服务器发起 HTTPS 请求,连接到服务器的 443 端口
  2. 服务器端有一个密钥对,即公钥和私钥,是用来进行非对称加密使用的,服务器端保存着私钥,不能将其泄露,公钥可以发送给任何人。
  3. 服务器将自己的公钥发送给客户端。
  4. 客户端收到服务器端的证书之后,会对证书进行检查,验证其合法性,如果发现发现证书有问题,那么 HTTPS 传输就无法继续。严格的说,这里应该是验证服务器发送的数字证书的合法性。如果公钥合格,那么客户端会生成一个随机值,这个随机值就是用于进行对称加密的密钥,我们将该密钥称之为 client key,即客户端密钥,这样在概念上和服务器端的密钥容易进行区分。然后用服务器的公钥对客户端密钥进行非对称加密,这样客户端密钥就变成密文了,至此,HTTPS 中的第一次 HTTP 请求结束。
  5. 客户端会发起 HTTPS 中的第二个 HTTP 请求,将加密之后的客户端密钥发送给服务器。
  6. 服务器接收到客户端发来的密文之后,会用自己的私钥对其进行非对称解密,解密之后的明文就是客户端密钥,然后用客户端密钥对数据进行对称加密,这样数据就变成了密文。
  7. 然后服务器将加密后的密文发送给客户端。
  8. 客户端收到服务器发送来的密文,用客户端密钥对其进行对称解密,得到服务器发送的数据。这样 HTTPS 中的第二个 HTTP 请求结束,整个 HTTPS 传输完成。

三、数字证书

通过观察 HTTPS 的传输过程,我们知道,当服务器接收到客户端发来的请求时,会向客户端发送服务器自己的公钥,但是黑客有可能中途篡改公钥,将其改成黑客自己的,所以有个问题,客户端怎么信赖这个公钥是自己想要访问的服务器的公钥而不是黑客的呢? 这时候就需要用到数字证书。

在讲数字证书之前,先说一个小例子。假设一个镇里面有两个人 A 和 B,A 是个富豪,B 想向 A 借钱,但是 A 和 B 不熟,怕 B 借了钱之后不还。这时候 B 找到了镇长,镇长给 B 作担保,告诉 A 说:“B 人品不错,不会欠钱不还的,你就放心借给他吧。" A 听了这话后,心里想:“镇长是全镇最德高望重的了,他说 B 没问题的话那就没事了,我就放心了”。 于是 A 相信 B 的为人,把钱借给了 B。

与此相似的,要想让客户端信赖公钥,公钥也要找一个担保人,而且这个担保人的身份必须德高望重,否则没有说服力。这个担保人的就是证书认证中心(Certificate Authority),简称 CA。 也就是说 CA 是专门对公钥进行认证,进行担保的,也就是专门给公钥做担保的担保公司。 全球知名的 CA 也就 100 多个,这些 CA 都是全球都认可的,比如 VeriSign、GlobalSign 等,国内知名的 CA 有 WoSign。

那 CA 怎么对公钥做担保认证呢?CA 本身也有一对公钥和私钥,CA 会用 CA 自己的私钥对要进行认证的公钥进行非对称加密,此处待认证的公钥就相当于是明文,加密完之后,得到的密文再加上证书的过期时间、颁发给、颁发者等信息,就组成了数字证书。

不论什么平台,设备的操作系统中都会内置 100 多个全球公认的 CA,说具体点就是设备中存储了这些知名 CA 的公钥。当客户端接收到服务器的数字证书的时候,会进行如下验证:

首先客户端会用设备中内置的 CA 的公钥尝试解密数字证书,如果所有内置的 CA 的公钥都无法解密该数字证书,说明该数字证书不是由一个全球知名的 CA 签发的,这样客户端就无法信任该服务器的数字证书。

如果有一个 CA 的公钥能够成功解密该数字证书,说明该数字证书就是由该 CA 的私钥签发的,因为被私钥加密的密文只能被与其成对的公钥解密。

除此之外,还需要检查客户端当前访问的服务器的域名是与数字证书中提供的“颁发给”这一项吻合,还要检查数字证书是否过期等。

正文到此结束