https

关于http协议我们已经有了一定了解,然而http也有它不足的一面:不安全——
http使用明文通信,不验证通信双方身份,无法证明报文完整性。

  • 问题: 使用明文通信,TCP/IP是可能被窃听的网络。即使经过加密处理的通信,也会被窥视到通信内容(加密后的内容),互联网上的任何角落都存在通信内容被窃听的风险。

    方案: 防止被窃听

    • 加密处理
      • 通信加密
      • 内容加密

    通信加密:http中没有加密机制,通过和SSL(Secure Socket Layer)或者TSL(Transport Layer Security)组合使用,加密http通信。

    用SSL建立安全通信线路后,在线路上进行http通信。

    内容加密: 对http协议传输的内容进行加密。

    前提条件: 前后端同时具有加密解密机制

  • 问题: 不验证通信双方,可能遭遇伪装。任何人都可以发起请求,服务器会对任意允许访问的IP地址的请求返回响应。无法确定服务器和客户端是否是伪装的,无法确定通信双方是否具备权限,无法确定请求来自哪里的哪一个,无法阻止海量请求下的Dos攻击

    方案: 查明对方证书

    • SSL证书

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

  • 问题: 无法证明报文的完整性,接收到的内容可能有误。请求或者响应在传输过程中,早攻击者拦截并篡改内容的攻击被称为中间人攻击(Man-in-the-Middle attack,MITM)

    方案: 常用的是MD5 和 SHA-1 等散列值校验的方法,以及用来确认文件的数字签名的PGP(Pretty Good Privacy)等方法。这些方法需要用户亲自检查验证文件的完整性。而且这些方法本身也可以被改写,无法百分百保证确认结果的正确性

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

使用场景:经常在登录页面和购物结算页面等使用 HTTPS 通信

  • HTTPS 不是一种新的协议,只是 HTTP 通信接口部分使用 SSL 和 TLS 协议代替而已。之前是 HTTP 直接和 TCP 通信,当使用了 SSL 时变成了,HTTP 先和 SSL 通信,再由 SSL 和 TCP 通信。 所谓 HTTPS 我们把它看成 披着 SSL 外壳的 HTTP.

  • SSL 采用了公开密钥加密(Public-key cryptography)的方式加密,加密和解密都需要密钥。一旦密钥被攻击者获取,加密就失去了意义。

    • 加密和解密共用一个密钥的方式被称为共享密钥加密(对称密钥加密)

      以对称密钥加密信息后需要把密钥也传给对方,但是安全的发送密钥也是一个问题

    • 公开密钥加密解决了共享密钥加密的困难。公开密钥加密使用一对非对称的密钥,一把叫做私钥,一把叫做公钥。私钥不能被人知道,公钥可以随意发布。

      发送密文的一方使用对方的公钥进行加密处理,接收方用私钥解密收到的信息。根据公钥对信息进行解密,就是对离散对数进行求值,目前的技术还不太现实。

    • HTTPS使用了共享密钥加密和公开密钥加密的混合加密机制。

      公开密钥加密方式比共享密钥加密要复杂,在通信时使用效率相对较低。组合使用:

      1. 使用公开密钥加密方式交换共享密钥加密中使用的密钥

      2. 确保交换的密钥安全,使用共享密钥加密方式进行通信。

    • 问题: 公开密钥加密存在无法证明自身就是原装的公开密钥的问题。在公开密钥传输过程中,公开密钥可以被攻击者替换掉。

    • 方案: 使用数字证书认证机构和其相关机关颁发的公开密钥证书。

      证书里包含 服务器的公开密钥和数字证书认证机构的数字签名


      大致过程如下所示


      具体步骤如下



    • 问题:HTTPS也存在一些问题,使用SSL后处理速度会变慢。

      HTTPS 比 HTTP 要慢2-100倍。SSL的慢分为两种

      1. 通信慢。除去和TCP连接、发送HTTP请求×响应以外,还必须进行SSL通信,整体上处理通信量会增加。
      2. 消耗大量CPU及内存资源,导致的处理速度变慢。SSL必须进行加密处理,服务端和客户端都需要进行加密解密的运算处理,消耗服务端和客户端的硬件资源。

      方案: 没有根本性的解决方案。可以使用SSL加速器这种专用服务器硬件来改善问题。可以提高数倍SSL的计算速度,仅在SSL处理时发挥SSL加速器的功效,以分担负载。

为什么不一直使用HTTPS?
1. 消耗更多CPU和内存资源
2. 节约购买证书的开销