chenxiaochun / blog

🖋️ChenXiaoChun's blog
181 stars 15 forks source link

图解HTTP之确保Web安全的HTTPS #29

Open chenxiaochun opened 7 years ago

chenxiaochun commented 7 years ago

HTTP的缺点

我们已经了解到HTTP有相当优秀的一面,但事物都有两面性,它也有不足的一面。

通信使用明文,内容可能会被窃听

  1. 通信的加密 HTTP本身不具有加密的功能,无法做到对通信整体进行加密。即使已经加密过的通信,也会被窥视到通信内容。只是通信经过加密后,就可能让人无法破解报文信息的含义。

  2. 内容的加密 就是把HTTP报文里所含的内容进行加密处理,前提是要求客户端和服务器同时具备加密和解密的机制。

不验证通信方的身份,因此有可能遭遇伪装

HTTP通过SSL(Secure Socket Layer,安全套接层)或者TLS(Transport Layer Security,安全层传输协议)的组合使用来加密通信。

SSL不仅提供加密处理,还会使用一种被称作证书的手段。证书由值得信任的第三方机构颁发,用以证明服务器和客户端是实际存在的。

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

HTTP协议无法证明通信的报文完整性,在请求或响应送出之后,即使遭到了篡改,也没有办法获悉。像这样,在请求或响应传输途中,遭攻击者拦截并篡改内容的攻击称为中间人攻击(Main-in-the-Middle attack,MITM)。

防止篡改常用的是MD5和SHA-1等散列值校验的方法,以及用来确认文件的数字签名方法。提供文件下载服务的网站也会提供相应的以PGP(Pretty Good Privacy,完美隐私)创建的数字签名以及MD5算法生成的散列值。PGP是用来证明创建文件的数字签名,MD5是由单向函数生成的散列值。

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

SSL采用一种叫做公开密(Public-key cryptography)钥加密的加密处理方式。加密算法是公开的,而密钥是保密的。当然了,加密和解密都需要用到密钥。也就是说,任何人只要持有密钥就能解密了。

加密和解密用同一个密钥的方式称为共享密钥加密(Common key crypto system),也被称为对称密钥加密。