由于 HTTP 的不安全性,而在 HTTP 的基础之上组装了安全协议从而实现加密 HTTP 通信内容,使用的安全协议有 SSL 或 TLS,用上安全协议的 HTTP 通信就叫 HTTPS。
因此 HTTPS 并不是一个新的协议,而是为了解决 HTTP 的安全缺点的一种方案。
SSL 和 TSL
SSL 最初由网景公司倡导设计开发,但 1.0 及 2.0 版本都存在问题。3.0 版本则有 IETF 组织负责,并且 IETF 基于 SSL 3.0 设计开发了 TSL,所以可以简单理解 SSL 和 TSL 是一个东西,TSL 相对来说更优于 SSL。
不安全的表现
HTTP 通信不安全的表现体现在两个方面。一方面服务端无法辨识有效客户端请求和恶意请求(譬如恶意攻击),因为 HTTP 通信时没有确认通信方的处理步骤。另一方面通信双方无法确认报文的正确性(例如报文主体内容被人篡改,替换都无法辨别),因为 HTTP 通信时无法证明报文正确性。
关于这两点不安全表现,通过 SSL(这里是 SSL 和 TSL 的统称) 提供的认证和加密处理功能可以得到解决。
加密
近代加密的原则基本是加密算法是公开的,密钥是保密的。密钥用于加密解密,其实和生活中的门锁很相似。
加密方式主要分两种,对称加密(共享密钥加密)和非对称加密(公开密钥加密)。对称加密之所以称之为对称或共享,原因就在于加密和解密用的是同一个,这样一来例如客户端与服务器之间通信加密数据,那么加密方就要告知解密方密钥以用来解密。这么一来密钥不就要传过去么,显得不安全,这就有了非对称加密。双方各自有一把密钥用于解密,另外用一把密钥进行加密,这把加密的密钥可以在网络上传输,被知道也没关系,叫做公钥,另一把解密的不能被别人知道,叫做私钥。
SSL 采用的就是公开密钥加密,而 HTTPS 则采用了以上两种方式进行混合加密,从而保证 HTTP 通信时报文正确性。
认证
通过证书这样的身份标识来确认通信双方,从而保证相互辨识,避免其他请求端的浑水摸鱼。证书的提供方是专业的第三方机构,想要获取这样一份证书用于 HTTP 通信就要申请,申请是要花钱的。
另外考虑到公开密钥加密方式的公钥透明性,即这个公钥可能被篡改,有必要对公钥进行认证,从而就有了公开密钥证书。证书的原则就是表明和证书绑定的公开密钥是正确的。
HTTPS 通信步骤
- 客户端发送 Client Hello 报文进行 SSL 通信。
- 服务端响应 Server Hello 报文。
- 服务端发送 Certificate 报文,报文中包含 公钥证书。
- 服务端发送 Server Hello Done 报文,完成 SSL 握手。
- 客户端响应 Client Key Exchange 报文。
- 客户端发送 Change Cipher Spec 报文。
- 客户端发送 Finished 报文。
- 服务端发送 Change Cipher Spec 报文。
- 服务端发送 Finished 报文,完成 SSL 连接建立。
- 开始 HTTP 通信。
保证安全也要有所付出
由于用了 SSL 确保 HTTP 通信的安全,使得在网络通信的速度上比普通的 HTTP 要慢,并且为了确保安全,加密认证等一些步骤也会开销内存,CPU 资源,导致处理变慢。
所以在不涉及安全问题的通信上,用普通 HTTP 通信能有更好的体验,而在一些用户登录,支付交易等环节切记要用安全的 HTTPS 通信。