网络:HTTPS通信

HTTP缺点

HTTP协议中没有加密机制,所以HTTP通信中有如下缺点:

  • 通信使用明文,内容可能会被窃听
  • 不验证通信方的身份,有可能是伪装的通信方
  • 无法证明报文的完整性(正确性),可能已经被篡改
  • 即使通信内容经过加密处理,加密后的通信内容还是会被看到

什么是HTTPS

HTTP协议中虽然没有加密机制,但可以通过和SSL(Secure Socket Layer,安全套接层)或TLS(Transport Layer Security,安全传输协议)的组合使用,加密HTTP的通信内容。用SSL建立安全通信线路后,就可以在这条线路上进行HTTP通信了。

HTTPS并非是应用层的一种新协议。只是HTTP通信协议部分用SSL和TLS协议代替而已。通常,HTTP直接和TCP通信。当使用SSL时,则是先和SSL通信,再由SSL和TCP通信。SSL是独立于HTTP的协议。其他运行在应用层的SMTP和Telnet等协议也可以配合SSL协议使用。

加密技术:共享秘钥加密 VS 公开秘钥加密

  • 共享秘钥加密(对称秘钥加密):加密和解密使用同一个秘钥。

    共享秘钥的难题在于:以共享秘钥方式加密时需要将秘钥发送给对方,但是无法保证发送过程不被监听或篡改,无法安全发送秘钥。

  • 公开秘钥加密(非对称秘钥加密):使用一对非对称的秘钥。一把叫做私有秘钥,一把叫做公开秘钥。私有秘钥不能让其他人知道,而公开秘钥可以随意发布,任何人都可以获得。

    使用公开秘钥加密方式时,发送密文的一方使用对方的公开秘钥进行加密,对方收到加密的信息后,再用自己的私有秘钥进行解密。

    这种方式不需要发送用来解密的私钥,也不必担心秘钥被窃听。

    公开秘钥比共享秘钥的处理速度要慢。

HTTPS采用混合加密机制

HTTPS通信时,先使用公开秘钥加密方式来交换共享秘钥,再使用共享秘钥进行报文通信。

这个过程中,唯一的问题在于使用公开秘钥加密方式传输共享秘钥时,无法确保传输的秘钥的正确性。为了解决这个问题,使用由数字证书认证机构(CA)和其相关机构颁发的公开秘钥证书来解决。

证书的申请和验证

服务器向认证机构发出公钥申请,证书机构对申请的公钥进行数字签名,将公钥放入公钥证书后绑定在一起。服务器将这个公钥证书发送给客户端,客户端使用证书机构的公钥对证书上的数字签名进行验证。验证通过则证明服务端的公钥是真实有效的。

HTTPS通信过程

HTTPS通信过程

  1. 客户端发送Client Hello报文开始SSL通信。报文包含客户端支持的SSL的指定版本、加密组件(所使用的加密算法和秘钥长度),产生一个随机密码串client_random
  2. 服务器可以进行SSL通信时,会以Server Hello报文作为应答,报文中包含SSL版本及加密组件、公开秘钥证书和一个随机密码串server_random
  3. 客户端使用CA的公钥验证公开秘钥证书的数字签名的有效性,确认有效后从数字签名获得服务器的公开秘钥,并使用该公钥加密pre-master secret发送给服务端。
  4. 服务器用私钥解密出pre-master secret
  5. 客户端和服务端分别使用client_randomserver_randompre-master secret生成master secret用于对称加密通信。

服务器和客户端的Finished报文交换完毕后,SSL连接建立完成,通信会收到SSL的保护。从此开始HTTP请求。

HTTPS缺点和解决方法

HTTPS通信的缺点是使用SSL时,通信速度变慢。

变慢分为两种:

  • 和HTTP相比,SSL通信部分消耗网络资源导致通信慢;
  • 由于HTTPS需要做服务端、客户端双方加密及解密处理,会大量消耗CPU及内存等资源,导致处理速度变慢。

解决HTTPS通信速度慢的方法:

  • 使用SSL加速器(硬件加速)
  • 对非敏感信息使用HTTP通信,对包含个人信息或有特殊权限的敏感数据时使用HTTPS通信。