HTTP图解读书笔记(第七章 确保Web安全的HTTPS)

一、HTTP的缺点

  • 通信使用明文(未加密的报文),不加密,内容可能会被窃听
  • 不验证通信方的身份,有可能遭遇伪装
  • 无法证明明文的完整性,所以可能已遭篡改

通信使用明文可能被窃听

  •  TCP/IP是可能被窃听的网络

       TCP/IP 协议族的工作机制,通信内容在所有的通信线路上都有可能遭到窥视。

       窃听相同段上的通信并非难事。只需要收集在互联网上流动的数据包(帧)就行了。对于收集来的数据包的解析工作,可交给那些抓包(Packet Capture)或嗅探器(Sniffer)工具

  • 加密处理防止被窃听

       1.通信的加密

       HTTP 协议中没有加密机制,但可以通过和 SSL(安全套接层)或TLS(安全层传输协议)的组合使用,加密 HTTP 的通信内容。

       用 SSL建立安全通信线路之后,就可以在这条线路上进行 HTTP通信了。与 SSL组合使用的 HTTP 被称为 HTTPS(超文本传输安全协议)

       2.内容的加密

       由于 HTTP 协议中没有加密机制,那么就对 HTTP 协议传输的内容本身加密。即把HTTP 报文里所含的内容(报文首部不加密,报文主体加密)进行加密处理

       为了做到有效的内容加密,前提是要求客户端和服务器同时具备加密和解密机制。

       由于该方式不同于 SSL或 TLS 将整个通信线路加密处理,所以内容仍有被篡改的风险。

不验证通信方的身份可能遭遇伪装

HTTP 协议中的请求和响应不会对通信方进行确认。也就是说存在“服务器是否就是发送请求中 URI 真正指定的主机,返回的响应是否真的返回到实际提出请求的客户端”等类似问题

  • 任何人都可以发起请求

       不确认通信方存在以下隐患:

       1.无法确定请求发送至目标的 Web 服务器是否是按真实意图返回响应的那台服务器。有可能是已伪装的 Web 服务器。

       2.无法确定响应返回到的客户端是否是按真实意图接收响应的那个客户端。有可能是已伪装的客户端

       3.无法确定正在通信的对方是否具备访问权限。因为某些Web 服务器上保存着重要的信息,只想发给特定用户通信的权限

       4.无法判定请求是来自何方、出自谁手。

       5.即使是无意义的请求也会照单全收。无法阻止海量请求下的 DoS 攻击(Denial of Service,拒绝服务攻击)

  • 查明对手证书

       虽然使用 HTTP 协议无法确定通信方,但如果使用 SSL则可以。SSL不仅提供加密处理,而且还使用了一种被称为证书的手段,可用于确定方  

       通过使用证书,以证明通信方就是意料中的服务器。这对使用者个人来讲,也减少了个人信息泄露的危险性。

       另外,客户端持有证书即可完成个人身份的确认,也可用于对Web 网站的认证环节

无法证明报文完整性,可能已遭篡改

  • 接收到的内容可能有误

       没有任何办法确认,发出的请求 / 响应和接收到的请求 / 响应是前后相同的。

       像这样,请求或响应在传输途中,遭攻击者拦截并篡改内容的攻击称为中间人攻击 

  • 如何防止篡改

        虽然有使用 HTTP 协议确定报文完整性的方法,但事实上并不便捷、可靠。其中常用的是 MD5 和 SHA-1 等散列值校验的方法,以及用来确认文件的数字签名方法。

二、HTTP+加密+认证+完整性保护=HTTPS

HTTP 加上加密处理和认证以及完整性保护后即是HTTPS 

HTTPS 是身披 SSL 外壳的 HTTP

 

HTTP直接和TCP通信,而HTTPS则需要HTTP先跟SSL通信

在采用 SSL后,HTTP 就拥有了 HTTPS 的加密、证书和完整性保护这些功能 

相互交换密钥的公开密钥加密技术

SSL采用公开密钥加密的加密方法。近代加密算法是公开的,但是密钥是保密的。加密和解密都会用到密钥,任何人持有密钥都能解密,加密就没有意义了。

  • 共享密钥加密存在的困境

       加密和解密同用一个密钥的方法称为共享密钥加密,也称对称密钥加密。

       如何安全的转发和保管密钥,不被其他人窃取是一个难题。

  •  使用两把密钥的公开密钥加密

       使用两把不对称的密钥,一把叫私有密钥,一把叫公开密钥。

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

       存在困难:根据密文和公开密钥,恢复到原文异常困难。

  • HTTPS采用混合加密机制   

       在交换密钥环节使用公开密钥加密方式,之后的建立通信交换报文阶段则使用共享密钥加密方式。

      

  • 证明公开密钥正确性的证书

       公开密钥加密存在的问题一:无法证明公开密钥的正确性

       如何证明收到的公开密钥就是原本预想的那台服务器发行的公开密钥。或许在公开密钥传输途中,真正的公开密钥已经被攻击者替换掉了。

       为了解决上述问题,可以使用公开密钥证书

       公开密钥加密存在的问题二:如何将认证机关的公开密钥安全的转交给客户端。

       解决办法:多数浏览器开发商发布版本时,会事先在内部植入常用认证机关的公开密钥。

       

  • 可证明组织真实性的EV SSL证书

       用来证明作为通信一方的服务器是否规范,另外一个作用是可确认对方服务器背后运营的企业是否真实存在

  • 用于确认客户端的客户端证书

HTTPS的安全通信机制

 

1.客户端通过发送 Client Hello 报文开始 SSL通信。报文中包含客户端支持的 SSL的指定版本、加密组件(Cipher Suite)列表(所使用的加密算法及密钥长度等)。

2.服务器可进行 SSL通信时,会以 Server Hello 报文作为应答。和客户端一样,在报文中包含 SSL版本以及加密组件。服务器的
加密组件内容是从接收到的客户端加密组件内筛选出来的。

3.之后服务器发送 Certificate 报文。报文中包含公开密钥证书

4.最后服务器发送 Server Hello Done 报文通知客户端,最初阶段的 SSL握手协商部分结束

5.SSL第一次握手结束之后,客户端以 Client Key Exchange 报文作为回应。报文中包含通信加密中使用的一种被称为 Pre-mastersecret 的随机密码串。该报文已用步骤 3 中的公开密钥进行加密。

6.接着客户端继续发送 Change Cipher Spec 报文。该报文会提示服务器,在此报文之后的通信会采用 Pre-master secret 密钥加密

7.客户端发送 Finished 报文。该报文包含连接至今全部报文的整体校验值。这次握手协商是否能够成功,要以服务器是否能够正确解密该报文作为判定标准

8.服务器同样发送 Change Cipher Spec 报文

9.服务器同样发送 Finished 报文。

10.服务器和客户端的 Finished 报文交换完毕之后,SSL连接就算建立完成。当然,通信会受到 SSL的保护。从此处开始进行应用层协议的通信,即发送 HTTP 请求

11.应用层协议通信,即发送 HTTP 响应

12.最后由客户端断开连接。断开连接时,发送 close_notify 报文。上图做了一些省略,这步之后再发送 TCP FIN 报文来关闭与 TCP的通信。

在以上流程中,应用层发送数据时会附加一种叫做 MAC(MessageAuthentication Code)的报文摘要。MAC 能够查知报文是否遭到篡改,从而保护报文的完整性

  • SSL速度慢

       SSL的慢分两种。一种是指通信慢。另一种是指由于大量消耗CPU 及内存等资源,导致处理速度变慢。所以非敏感信息可以用HTTP通信,而敏感信息需要HTTPS通信。而且HTTPS购买证书需要费用,为了节省费用,不必要使用HTTPS时仍使用HTTP

猜你喜欢

转载自blog.csdn.net/qq_37200686/article/details/85088314