确保Web安全的HTTPS
一 HTTP的缺点
- 通信使用明文可能会被窃听
(1) 通信的加密。HTTP协议中没有加密机制,但可以通过和SSL(Secure Socket Layer,安全套接层)或TLS(Transport Layer Security,安全传输层协议)的组合使用,加密HTTP的通信内容。
(2) 内容的加密。为了做到有效的内容加密,前提是要求客户端和服务器同时具备加密和解密机制。该方式不同于SSL和TLS将整个通信线路加密处理,所以内容仍有被篡改的风险。
- 不验证通信方的身份就可能遭遇伪装
(1) 虽然使用HTTP协议无法确定通信方,但如果使用SSL可以。SSL不仅提供加密处理,而且还使用了一种被称为证书的手段,可用于确定通信方。(2) 证书由值得信任的第三方机构颁发,用以证明服务器和客户端是实际存在的。另外,伪造证书从技术角度来说是异常困难的一件事。所以只要能够确认通信方持有证书,即可判断通信方的真实意图
- 无法证明报文完整性,可能已遭篡改
(1) 虽然有使用HTTP协议确定报文完整性的方法,但事实上并不便捷,可靠。其中常用的有,PGP(Pretty Good Privacy)创建的数字签名以及MD5算法生成的散列值。但是,这些方法也依然无法百分百确保结果正确,因为如果PGP和MD5本身被改写的话,用户是没有办法意识到的。
二 HTTPS=HTTP+加密+认证+完整性保护
- HTTP加上加密处理和认证以及完整性保护后即是HTTPS(HTTP Secure)。
- HTTPS是身披SSL外壳的HTTP
HTTPS并非是应用层的一种新协议。只是HTTP通信接口部分用SSL和TLS协议代替而已。通常HTTP直接和TCP通信。当时用SSL时,则演变成先和SSL通信,再由SSL和TCP通信了。简言之,所谓HTTPS,就是在HTTP和TCP之间增加了一个安全层即SSL协议。
三 HTTPS交互过程
- 浏览器将自己支持的一套加密规则发送给网站。
- 网站从中选出一组加密算法和HASH算法,并将自己的身份信息以证书的形式发回给浏览器,证书里面包含网站地址,加密公钥,以及证书的颁发机构等信息。
- 浏览器获得网站证书以后,要做一下工作:
验证证书的合法性。验证颁发证书的机构是否合法,证书中包含的网站地址是否与正在访问的地址一致等。
如果验证不通过,则会给出证书不受信的提示。如果证书受信任,或者是用户接受了不受信的整数,浏览器会生成一串随机数密码,并用证书中提供的公钥加密。
使用约定好的HASH计算握手消息,并使用生成的随机数对消息进行加密,最后将之前生成的所有信息发送给网站。
- 网站接受浏览器发来的数据之后要做以下的操作:
使用自己的私钥将信息解密取出随机数密码,使用密码解密浏览器发来的握手消息,并验证HASH是否和浏览器发来的一致。
使用随机数密码加密一段握手消息,发送给浏览器。
- 浏览器解密并计算握手消息的HASH,如果与服务端发来的HASH一致,此时握手结束,之后所有的通信数据将由之前浏览器生成的随机密码并利用对称加密算法进行加密。
- 总结
握手阶段,通过非对称加密算法对传输的数据进行加密,约定随机数的密码,加密算法,hash算法。
正常传输数据的时候,因为非对称加密比较耗时,使用随机数的密码进行加解密,随机数密码在浏览器端生成,通过非对称加密传输给网站,所以不会泄露。
为了防止数据被窜给,通过hash算法进行校验。
四 为什么不一直使用HTTPS
- 与纯文本通信相比,加密通信会消耗更多地CPU以及内存资源。如果每次通信都加密,会消耗相当多的资源,平摊到每一台计算机上时,能够处理的请求数量必定也会随之减少。因此只有在包含个人信息等敏感数据时,才利用HTTPS加密通信。
- 要进行HTTPS通信,证书是必不可少的。而使用证书必须向认证机构购买。那些购买证书并不划算的服务以及一些个人网站,可能只会选择采用HTTP的通信方式。