HTTP 和 HTTPS 的区别

不打扰是莪最后的温柔 提交于 2019-11-25 23:52:38

HTTP 的缺陷 : 不安全

  1. 通信使用明文,内容可能会被窃听
  2. 不验证通信方的身份,因此有可能遭遇伪装
  3. 无法证明报文的完整性,所以有可能被人篡改

加密的方式

  • 通信加密:建立安全的通信线路 。虽然HTTP 没有加密机制,但是可以通过 SSL(安全套接层) 、TLS(安全传输协议) 的包装,然后再去与TCP通信

  • 内容加密:对内容本身加密。把 HTTP 报文中所含的内容进行加密

由于 http 协议无法证明通信的报文完整性,所以如果有攻击者篡改数据也毫无防备。

如何防止篡改

虽然 可以使用 HTTP 协议确定报文的完整性,比如 MD5/SHA-1通过散列值校验的方法,但是这些方法并不是 100% 可靠,所以就引出了 HTTPS = HTTP + 加密 + 认证 + 完整性保护

加密技术

  • 使用两把密钥的公开密钥加密:一共两把密钥,一把用来加密(公开),一把用来解密(私有),公开密钥可以在网络上流传,但是私有密钥只能不能让任何人知道,公开密钥和私有密钥必须是一对才可以解开。这样做的理由是 : 即使攻击者拿到了公开密钥也无法解密。

  • HTTPS 采用混合加密机制:就是共享密钥 和 公开密钥结合使用,首先使用公开密钥加密方式安全交换 待会在共享密钥方式所使用的密钥,然后再确保交换的密钥是安全的前提下 使用共享密钥的方式进行通信,因为 共享密钥的效率高,但是安全性不高,公开密钥的安全性高,但是效率低,所以先让通信变的安全,然后在让通信变的高效。

现在还有一个问题就是:万一公开密钥在传输的过程中被劫持、替换掉,这个应该怎么确认呢?

这个时候 数字证书认证机构 就大显身手了,由它出面来对密钥进行颁发证书,这样客户端就几乎可以确认这个密钥是不是真实的。整个的操作流程是:

  1. 服务器把自己的公开密钥登录到数字证书认证机构,目的就是提出公开密钥的申请。
  2. 机构用自己的私有密钥向服务器的公开密钥部署数字签名,并颁发公钥证书,将公开密钥放入了公钥证书后绑定在一起,
  3. 服务器将这个公钥证书发送给客户端(多数浏览器在内部已经植入了公开密钥,不需要服务器发送,因为还可能被劫持)此时的公钥是经过威严的第三方确认的,想造假几乎很难。
  4. 当客户端接收到证书后,使用公开密钥对证书上的数字签名进行验证,一旦验证通过就证明了 服务器的公开密钥是真实的。使用该密钥对报文进行加密处理再发送。

HTTPS 的安全通信机制的流程

第一次SSL握手

  1. 客户端发送 Client Hello 报文 开始 SSL 通信,报文中包含着 客户端支持的 SSL 指定版本、加密组件、列表(所使用的的加密算法、密钥长度)
  2. 服务器 以 Server Hello 报文作为响应,报文中包含着 SSL 版本以及加密组件,这些加密组件是通过客户端发送过来的组件删选的,为的就是找到 既满足服务器又满足客户端的 SSL版本。
  3. 服务器发送 Certificate(证书) 报文,里面包含着 公开密钥的证书。
  4. 紧接着 服务器发送 Server Hello Done 报文通知客户端最初的 SSL 握手协商部分结束。

第一次握手结束

  1. 客户端以 Client Key Exchange 报文作为回应,报文中包含着 通信加密中使用的 随机密码串。(此时这条已经在使用公开密钥 进行加密了)
  2. 接着客户端继续发生 报文,报文提示服务器在此报文之后的通信使用Pre - master secret 密钥加密
  3. 客户端再次发生 Finished 报文,里面包含着 连接至今全部报文的整体校验值,如果服务器正确加密了该报文,则表示这次握手协议成功
  4. 服务器发送 Change Cliher Sper 报文
  5. 服务器发送 Finished 报文
  6. 当服务器和客户端的Finished 报文交换完毕后,SSL 连接建立完成,通信会受到SSL的保护。

从此处开始,进行应用层协议使用 HTTP 请求

最后由客户端断开连接,发送close_notify 报文。
然后再发送 TCP 中的 FIN 报文来关闭TCP的通信

SSL 的缺点

虽然安全,但是他的通信效率会 HTTP 的慢 2 -100 倍,在建立SSL通信的过程中消耗网络资源与内存资源,占用大量的CPU 。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!