HTTPS的加密算法

发布于 2019-06-12 22:10:58 阅读 277

HTTPS协议的由来

众所周知,http协议是一个无状态的,在TCP层上的协议,因为其发送的数据都是明文,导致数据容易被窃听甚至被篡改,所以其安全性是很低的,所以这就引出了本期主角:HTTPS协议。

HTTPS协议介绍

HTTPS = HTTP Secure , HTTPS并非应用层的新的协议,只是http通信接口部分用SSL(Secure Socket Layer)和TLS(Transport Layer Security)协议替代而已。通常HTTP直接和TCP通信,当使用了SSL时,则演变成先和SSL通信,然后SSL在与TCP通信,也就是说HTTPS就是身披SSL协议这层外壳的HTTP。在采用了SSL后,HTTP就拥有了HTTPS的加密、证书和完整性保护报文主体了。

HTTPS是如何加密的?

说起加密,首先需要了解三个加密算法

  • 对称加密算法(也叫共享密钥加密)
  • 非对称加密算法(也叫公开密钥加密)
  • HASH算法(摘要算法)

对称密钥加密算法

看到上面的名字可能比较懵,但是我要是说AES、DES,大家应该就应该了解了。他们都是加解密双方保存一个密钥,通过此密钥就可以对密文进行加密与解密。在日常的编程中经常使用此种加密算法,主要因为此加、解密的速度很快是其一大优势。

但是如果HTTP协议使用此种方法进行加密处理,那么势必需要发送方将密钥发送到解密方手中,那就需要在进行连接前进行密钥的传输,在传输过程中还是会被其他人窃取到,那么此时加密就毫无意义,那么我们还得想办法保存这个密钥不被窃取。

非对密钥称加密算法

此加密算法在支付中会经常使用到,比如开发过支付宝的同学应该知道,支付宝会有一个公钥,需要商户下载下来,然后商户会生成一个公钥与私钥,此时商户生成的公钥需要上传到支付宝,然后商户通过支付宝公钥对发送的数据进行加密发送过去,然后支付宝收到消息,通过支付宝的私钥解密,处理之后,返回的数据再通过商户的公钥加密,然后我们收到消息后通过商户的私钥进行解密。因为在传输过程中不需要进行私钥的传递,所以此种方法很安全,但是有一点,解密的性能很低,非常消耗cpu资源。此种算法叫RSA算法。

HASH算法

常见的有SHA1、MD5。因为此种算法无论需要加密的字符长度是多少,最终加密出来的密文都是固定的,所以此算法一般用户验证数据的完整性。

HTTPS协议采用混合加密机制

上面说到,非对密钥称加密算法很好,看起来很安全,但是其性能很低,而对称密钥加密算法性能好,但是需要传递密钥。所以HTTPS协议采用了这两种加密算法的优势,一个传输安全,一个加、解密快的优点。

首先发送方使用【非对称密钥加密算法】先进行【(对称密钥加密算法)的密钥】的传输,然后接收方就安全的收到了(对称加密)的密钥,然后在对后续的报文主体进行加密处理,接收方使用密钥解密,实现了安全与性能的提升。

HTTPS请求的完整过程

  1. 客户端发送Client Hello报文开始SSL通信,报文中包含客户端支持的SSL的指定版本、加密组件列表(所使用的加密算法及密钥长度等)

  2. 服务器课使用SSL通信时会以Server Hello报文作为应答。和客户端一样,在报文中包含SSL版本以及加密组件。服务器的加密组件内容是从接收到的客户端加密组件内筛选出来的。

  3. 之后服务器发送Certificate报文。报文中包含公开密钥证书

  4. 最后服务器发送Server Hello Done报文通知客户端,最初阶段的SSL握手协商部分结束

  5. SSL第一次握手之后,客户端以Client Key Exchange报文作为回应。报文中包含通信加密中使用的一种被称为Pre-master secret的随机密码串。该报文已用步骤3中的公开密钥进行加密。

  6. 接着客户端继续发送Change Cipher Spec报文。该报文会提示服务器,在此报文之后的通信会采用Pre-master secret密钥加密

  7. 客户端发送Finished报文。该报文包含连接至今全部报文的整体校验值。这次握手协商握手是否能够成功,要以服务器是否能够正确解密该报文作为判定标准。

  8. 服务器同样发送Change Cipher Spec报文。

  9. 服务器同样发送Finished报文。

  10. 服务器和客户端的Finished报文交换完毕之后,SSL连接就算建立完成。当然,通信会受到SSL保护。从此处开始进行应用层协议的通信,即发送HTTP请求。

  11. 应用层协议通信,即发送HTTP响应。