图解HTTP总结(7)——确保Web安全的HTTPS
通信使用明文( 不加密) , 内容可能会被窃听。
不验证通信方的身份, 因此有可能遭遇伪装。
无法证明报文的完整性, 所以有可能已遭篡改。
我们把添加了加密及认证机制的 HTTP 称为 HTTPS(HTTP Secure)。
HTTPS 是身披 SSL 外壳的 HTTP
HTTPS 并非是应用层的一种新协议。 只是 HTTP 通信接口部分用SSL(Secure Socket Layer)和TLS(Transport Layer Security) 协议代替而已。
通常HTTP直接和TCP通信。当使用SSL时,则演变成先和SSL通信,再由SSL和TCP通信了。
在采用 SSL后, HTTP 就拥有了 HTTPS 的加密、 证书和完整性保护这些功能。
SSL是独立于 HTTP 的协议, 所以不光是 HTTP 协议, 其他运行在应用层的 SMTP 和 Telnet 等协议均可配合 SSL协议使用。 可以说 SSL是当今世界上应用最为广泛的网络安全技术。
SSL采用一种叫做公开密钥加密(Public-key cryptography)的加密处理方式。
近代的加密方法中加密算法是公开的, 而密钥却是保密的。 通过这种方式得以保持加密方法的安全性。
加密和解密都会用到密钥。 没有密钥就无法对密码解密, 反过来说,任何人只要持有密钥就能解密了。 如果密钥被攻击者获得, 那加密也就失去了意义。
共享秘钥加密的困境
加密和解密同用一个密钥的方式称为共享密钥加密(Common key crypto system) , 也被叫做对称密钥加密。
以共享密钥方式加密时必须将密钥也发给对方。 可究竟怎样才能安全地转交? 在互联网上转发密钥时, 如果通信被监听那么密钥就可会落入攻击者之手, 同时也就失去了加密的意义。 另外还得设法安全地保管接收到的密钥。
使用两把密钥的公开密钥加密
公开密钥加密方式很好地解决了共享密钥加密的困难。公开密钥加密使用一对非对称的密钥。一把叫做私有密钥(private key),另一把叫做公开密钥(public key)。顾名思义,私有密钥不能让其他任何人知道, 而公开密钥则可以随意发布, 任何人都可以获得。
使用公开密钥加密方式, 发送密文的一方使用对方的公开密钥进行加密处理, 对方收到被加密的信息后, 再使用自己的私有密钥进行解密。 利用这种方式, 不需要发送用来解密的私有密钥, 也不必担心密钥被攻击者窃听而盗走。
HTTPS 采用混合加密机制HTTPS 采用共享密钥加密和公开密钥加密两者并用的混合加密机制。 若密钥能够实现安全交换, 那么有可能会考虑仅使用公开密钥加密来通信。 但是公开密钥加密与共享密钥加密相比, 其处理速度要慢。 在交换密钥环节使用公开密钥加密方式, 之后的建立通信交换报文阶段则使用共享密钥加密方式。
为什么不一直使用 HTTPS
既然 HTTPS 那么安全可靠, 那为何所有的 Web 网站不一直使用HTTPS ?
其中一个原因是, 因为与纯文本通信相比, 加密通信会消耗更多的CPU 及内存资源。 如果每次通信都加密, 会消耗相当多的资源, 平摊到一台计算机上时, 能够处理的请求数量必定也会随之减少。
因此, 如果是非敏感信息则使用 HTTP 通信, 只有在包含个人信息等敏感数据时, 才利用 HTTPS 加密通信。