HTTP 主要有这些不足, 例举如下。
通信使用明文( 不加密) , 内容可能会被窃听。
不验证通信方的身份, 因此有可能遭遇伪装。
无法证明报文的完整性, 所以有可能已遭篡改。
我们把添加了加密及认证机制的 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 加密通信。
资料整理来自:https://www.cnblogs.com/Mayny/p/9374164.html