HTTPS是在HTTP和TCP之间添加了安全传输层,目前使用TLS作为安全传输层
HTTPS需要解决的问题
- 服务器认证(客户端知道他们是在与真正的而不是伪造的服务器通话)
- 客户端认证(服务器知道他们是在与真正的而不是伪造的客户端通话)
- 完整性(客户端和服务器的数据不会被修改,中间人攻击,简单的方法是提供传输数据的md5,但是md5依旧可以被重新计算)
- 加密(客户端和服务器的对话是私密的,无需担心被窃听)
- 效率(一个足够快的算法,以便低端的客户端和服务器使用)
- 普适性(基本上所有的客户端和服务器都支持这些协议)
- 管理的可扩展性(在任何地方的任何人都可以立即进行安全通信)
- 适应性(能够支持当前最知名的安全方法)
- 在社会上的可行性(满足社会的政治文化需要)
HTTPS提供的解决方案
- 通过可证明组织真实性的 EV SSL证书 可以证明服务器是否规范
- 使用客户端证书确认客户端
- 应用层在发送数据时通过附加MAC(Message Authentication Code)的报文摘要来保证数据完整性
- HTTPS采用共享密钥加密和公开密钥加密两者并用的混合加密机制,若密钥能够实现安全转换,那么有可能会考虑仅使用公开密钥来通信。但是公开密钥加密和共享密钥加密相比,其处理速度要慢。可以通过公开密钥建立一个安全的通信,然后传递共享密钥,降低资源的消耗。
- HTTPS在传输的时候需要进行SSL通信会增加网络负载,同时数据的加密和解密也会增加CPU和内存的消耗,因此HTTPS会比HTTP效率低
SSL通信
下图展示SSL通信的简单过程
- 客户端发送 Client Hello 报文开始SSL通信。报文中包含客户端支持的SSL的指定版本,加密组件列表
- 服务器可进行SSL通信时,会以 Server Hello 报文作为应答。和客户端一致,在报文中包含SSL版本以及加密组件。服务器的加密组件是从接收到的客户端加密组件中筛选出来的
- 之后服务器发送 Certificate 报文。报文中包含公开密钥证书
- 最后服务器发送 Server Hello Done 报文通知客户端,最初阶段的SSL握手协商结束
- SSL第一次握手结束之后,客户端以 Client Key Exchange 报文作为回应。报文中包含通信加密中使用的一种被称为 Pre-master secret 的随机密码串。该报文已用步骤3中的公开密钥进行加密
- 接着客户端继续发送 Change Cipher Spec 报文。该报文会提示服务器,在报文结束后的通信会采用 Pre-master secret 密钥加密
- 客户端发送 Finished 报文。该报文包含连接至今全部报文的整体校验值。这次握手协商是否能够成功,要以服务器是否能够正确解密该报文作为判定标准
- 服务器同样发送 Change Cipher Spec 报文
- 服务器同样发送 Finished 报文
- 服务器和客户端的 Finished 报文交换完毕之后,SSL连接就算建立完成,通信会受到SSL的保护
- 应用层协议通信,客户端发送HTTP请求,服务器发送HTTP应答
- 客户端断开连接。断开连接时,发送 close_notify 报文
参考资料
- HTTP权威指南
- 图解HTTP