深入理解HTTP协议(三)--https协议的产生和发展

前两篇文章主要回顾了http的发展历程和http协议本身的一些属性和特征,以及解决了哪些通信问题。然而事情的发展总是有两面性,有好的一面,也就有不好的一面。那不好的一面有哪些呢?

  1. 通信使用明文(不加密),内容可能会被窃听
  2. 通信双方不验证身份,有可能会遭遇身份伪装
  3. 报文内容有可能会被篡改

伴随着上述问题,https技术应运而生了。它的主要作用是能将通信加密。http协议没有加密机制,但可以通过和SSL(安全套接层)或TLS(安全层传输协议)的组合使用,来加密http的通信内容。

什么是https

为了解决通信双方的身份认证和通信内容的篡改问题,需要在http上加入加密处理和认证等机制。即在http通信接口部分用ssl和tls协议代替。通俗点讲:
https = http+加密+认证+完整性保护

简单了解SSL和TLS

SSL技术最初由浏览器开发商网景通信公司率先倡导的。开发过ssl3.0之前的版本。目前主导权已经转移到IETF(internet工程任务组)中。IETF以SSL3.0为基准,后又制定了TLS协议。
SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。SSL协议可分为两层: SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。 SSL握手协议建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。
TLS协议的优势是与高层的应用层协议(如HTTP、FTP、Telnet等)无耦合。应用层协议能透明地运行在TLS协议之上,由TLS协议进行创建加密信道需要的协商和认证。应用层协议传送的数据在通过TLS协议时都会被加密,从而保证通信的私密性。

https的加密机制

目前的加密方式主要有两种,一种是对称加密,通信双方使用同一个密钥。这种加密方式的优点是加解密快,缺点是保密性不强,密钥一旦泄露,通信双方都得遭殃。而且发送密钥就会有被窃听的危险。另一种是非对称加密。采用公钥加密,私钥解密的方式来处理通信内容。安全性比对称加密高,但缺点就是速度很慢。https采用了混合加密的方式。首先使用公开密钥加密方式安全交换在稍后的共享密钥加密中要使用的密钥。简单来说就是用非对称加密做个壳,然后在壳里面使用对称加密传输信息。

公开密钥的安全性

这里公开密钥看似已经十分安全, 但是在传输的过程中也无法证明公开密钥本身就是货真价实的公开密钥,可能已经被攻击者替换。为了解决上述问题,可以使用权威第三方机构CA及其相关机关颁发的公开密钥证书。
引入第三方证书之后,安全性有了保障,业务流程也变的有点繁琐,不过还是要梳理一下,明白CA机构,服务端,客户端,数字证书之间的关系。

  1. 服务器把自己的公开密钥登录至数据认证机构;
  2. 数字认证机构用自己的私钥向服务器的公开密码署数字签名并颁发公钥证书;
  3. 客户端浏览器拿到服务器的公钥证书之后,使用数字证书机构的公开密钥向数字证书机构验证公钥证书上的数字签名,以确认服务器公开密钥的真实性。(这里客户端所持有的数字证书机构的公开密钥是事先植入在浏览器里面的,因为住在通信时安全转交认证机关的公开密钥至客户端是一件十分困难的事情);
  4. 验证成功后,使用服务器的公开密钥对报文加密后发送;
  5. 服务端使用私钥解密报文。

https的通信机制

https的通信步骤也是十分复杂,这里简单对书中描述做下整理,方便回顾:

  1. 客户端通过发送clientHello报文开始https通信;
  2. 服务器可进行ssl通信时会以serverHello报文作为应答。和客户端一样,报文包含ssl版本及加密组件,其加密组件是从客户端传过来的加密组件筛选出来的;
  3. 之后服务器发送Certificate报文,包含公开密钥证书;
  4. 最后服务器发送serverHelloDone报文通知客户端,最初阶段的ssl握手协商部分结束;
  5. ssl第一次握手之后,客户端以clientKeyExchange报文作为回应,其中包含通信加密中一种被称为pre-mastersecret的随机密码串。且使用步骤3中的公开密钥加密;
  6. 紧接着客户端发送changeCipherSpec报文。该报文会提示服务器在此报文之后通信会采用Pre-mastersecret密钥加密;
  7. 客户端发送finished报文。该报文包含连接至今全部报文的整体校验值。这次握手能否成功,要以服务器是否能够解析此报文作为判定标准;
  8. 服务器同样发送changeCipherSpec报文;
  9. 服务器同样发送finished报文;
  10. 服务器和客户端的finished报文交换之后,ssl连接算建立完成。通信会收到ssl保护。从此处开始进行应用层协议的通信,即http 请求;
  11. 应用层协议通信,服务端发送http响应;
  12. 最后由客户端断开连接。断开连接时,发送close_notify报文,这步之后再发送tcp FIN报文来关闭与tcp的通信。
    在上面流程中,应用层发送数据时会附加一种叫做MAC(message Authentication Code)的报文摘要。能够查知报文是否遭到篡改,从而保护报文的完整性。

https协议的不足

虽然https协议在弥补了http协议安全性能的不足,但同时也带来了其不利的一面,https的速度比使用http慢2-100倍,因为除了发送请求之外,还要进行额外的加解密工作。因此会更多的消耗服务器的硬件资源。
因此,除非是网站包含了敏感信息等不想泄露的信息时,使用https协议来保护。对于其他网站来说,http是更好的选择。

发布了43 篇原创文章 · 获赞 9 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/u013243938/article/details/103587435