HTTPS Hyper Text Transfer Protocol over Secure Socket Layer

从全称可以看出是HTTP 基于在安全加密的套接字层传输的,也就是说说HTTP的用法是不变的,
那么发生变化的地方是在传输前对报文进行了加密。

在建立TCP连接之后,如同HTTP2对通讯协议协商一样,也需要协商加密(SSL Handshake Protocol)

那么是如何做到呢,客户端发送一组可以支持的加密方式给服务端,服务端根据客户端支持的种类下发一个密钥给客户端,之后的通讯就基于这个密钥来通讯。

这个地方存在两个问题

  1. 下发什么密钥的方式?

加密有对称加密和非对称加密,区别在于对称加密使用相同密钥,对称加密使用公钥和私钥。

如果使用对称加密,则约定好客户端和服务端都使用密钥 ABC 来进行加密解密,在服务端发送报文前加密然后客户端收到之后解密,但是这样也有一个问题如果密钥被别人知道的话,可以在中间对报文进行解密。

解决这个问题的方式是使用非对称密钥,这样服务器下发给客户端公钥,客户端使用私钥加密进行解密。

  1. 密钥传输过程中是否被替换

使用非对称就安全了嘛?使用中间人攻击,客户端请求时,发送给中间人,中间人发送给服务器,服务器下发给中间人,中间人下发给客户端。即使使用了非对成密钥,依然不能确保密钥在传输过程中被替换。所以这里就有了证书。

通过数字证书来判断密钥是否为被修改。

证书 由第三方 Certificate Authority 颁发,由第三方来承担公钥的正确性,用来确保传输过程中密钥是没有被修改的。
当然这个证书也是可以自己生成但是不具备任何意义

那么如何操作呢?

服务端给CA公钥和个人信息,CA根据 服务端 的公钥和个人信息验证,通过CA的公钥并生成一份带签名的数字证书。

服务端与客户端通信时,客户端先验证服务端数字证书的正确性步骤比较复杂,根据数据证书中携带的公钥和服务端发来的公钥,如相同则使用服务端的公钥匙进行加密客户端的对称密钥进行之后的传输传输。

你可能感兴趣的:(HTTPS Hyper Text Transfer Protocol over Secure Socket Layer)