Https 的通信过程?

01.TLS证书的通信过程

0101.非对称加密的过程

比较主流的非对称加密算法为RSA, 什么事非对称加密算法呢? 简单的来说加密过程使用对方的公钥进行加密, 解密的时候使用自己, 如下图所示:

+---+     +------+  加密后的数据传输给B    +------+       +---+
| A | --> |  加密 | ------------------>  |  解密 | --> | B |
+---+     +------+                      +------+       +---+
            ^                              ^
            |                              |
            |                              |
          +--------+                    +--------+
          | B的公钥 |                    | B的私钥 |
          +--------+                    +--------+

0102.对称加密

+--------------+  密钥加密   +---------+  密钥解密    +----------+
| 加密前原始文档 | ---------> | 加密文档 | ----------> | 解密后文档 |
+--------------+     A      +---------+      B       +-----------+

如上图所示A要给B发送文档的主要流程如下:

  • A使用密钥对文档进行加密发送给B

  • B使用和A加密文档的同一把密钥对文档进行解密

02.CA

CA我们都知道是证书签发权威机构, 那为什么会需要这样的机构呢?正常访问https的站点时CA证书又时怎么工作的呢?

为了在确保在通信的过程中通信双发的数据不被第三方劫持, 需要加入受信任的第三方来保证通信的安全,

CA证书的内容包含:电子签证机关的信息、公钥用户信息、公钥、签名和有效期。这里的公钥服务端的公钥,这里的签名是指:用hash散列函数计算公开的明文信息的信息摘要,然后采用CA的私钥对信息摘要进行加密,加密完的密文就是签名。 即:证书 = 公钥 + 签名 +申请者和颁发者的信息。 客户端中因为在操作系统中就预置了CA的公钥,所以支持解密签名(因为签名使用CA的私钥加密的)

  • 证书的签发过程:

       +----------------+
       v                |
+----------+  CSR    +----------+  CSR   +----+
| 证书申请人 | ----->  | 登记机构  | -----> | CA |
+----------+         +----------+        +----+
                           ^               |
                           +---------------+

如上图所示主要流程如下:

  • 先去登记机构进行身份登记,我是谁,我是干嘛的,我想做什么,

  • 然后登记机构再通过CSR发给CA,

  • CA收到请求后对公钥进行数字签名,公钥会在CA证书链中保存

  • CA中心将公钥和私钥证书下发给申请者

03.单向验证

Client仅对Server的证书进行单向验证,这种方式称为Server Authentication

详细流程如下: 1. 客户端发起HTTPS请求,将SSL协议版本的信息发送给服务端。 2. 服务端去CA机构申请来一份CA证书,在前面提过,证书里面有服务端公钥和签名。将CA证书发送给客户端 3. 客户端读取CA证书的明文信息,采用相同的hash散列函数计算得到信息摘要(hash目的:验证防止内容被修改),然后用操作系统带的CA的公钥去解密签名(因为签名是用CA的私钥加密的),对比证书中的信息摘要。如果一致,则证明证书是可信的,然后取出了服务端公钥 4. 客户端生成一个随机数(密钥F),用刚才等到的服务端B公钥去加密这个随机数形成密文,发送给服务端。 5. 服务端用自己的B私钥去解密这个密文,得到了密钥F 6. 服务端和客户端在后续通讯过程中就使用这个密钥F进行通信了。和之前的非对称加密不同,

如上图的第3步浏览器会对证书进行如下几方面的验证

  • 检查SSL 证书是否是由浏览器中“受信任的根证书颁发机构”颁发

  • 检查SSL证书中的证书吊销列表,检查证书是否被证书颁发机构吊销

  • 检查此SSL证书是否过期

  • 检查部署此SSL证书的网站的域名是否与证书中的域名一致

04.双向认证

在进行单项认证的基础上可能还存在Server对Client的验证, 这种方式称为Client Authentication, 将Client到Server的验证和Server到Client的验证结合起来就是双向认证

详细过程如下: 图中步骤1-3就是上文中谈到的Server Auth,而步骤4-5就是Client Auth,两者的认证都需要借助CA认证机构(当然并不一定是同一家CA认证机构)进行校验,因此这种认证称为"双向认证"

03.参考

Kubernetes数字证书体系浅析

最后更新于