网络: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通信过程
- 客户端发送Client Hello报文开始SSL通信。报文包含客户端支持的SSL的指定版本、加密组件(所使用的加密算法和秘钥长度),产生一个随机密码串
client_random
; - 服务器可以进行SSL通信时,会以Server Hello报文作为应答,报文中包含SSL版本及加密组件、公开秘钥证书和一个随机密码串
server_random
。 - 客户端使用CA的公钥验证公开秘钥证书的数字签名的有效性,确认有效后从数字签名获得服务器的公开秘钥,并使用该公钥加密
pre-master secret
发送给服务端。 - 服务器用私钥解密出
pre-master secret
- 客户端和服务端分别使用
client_random
、server_random
、pre-master secret
生成master secret
用于对称加密通信。
服务器和客户端的Finished报文交换完毕后,SSL连接建立完成,通信会收到SSL的保护。从此开始HTTP请求。
HTTPS缺点和解决方法
HTTPS通信的缺点是使用SSL时,通信速度变慢。
变慢分为两种:
- 和HTTP相比,SSL通信部分消耗网络资源导致通信慢;
- 由于HTTPS需要做服务端、客户端双方加密及解密处理,会大量消耗CPU及内存等资源,导致处理速度变慢。
解决HTTPS通信速度慢的方法:
- 使用SSL加速器(硬件加速)
- 对非敏感信息使用HTTP通信,对包含个人信息或有特殊权限的敏感数据时使用HTTPS通信。