你不知道的HTTP之HTTPS

Posted 世界辣么大

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了你不知道的HTTP之HTTPS相关的知识,希望对你有一定的参考价值。

确保web安全的HTTPS

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

  1、加密:

    1)通信的加密

      所谓互联网,是由能连通到全世界的网络组成的。无论世界哪个角 落的服务器在和客户端通信时,

      在此通信线路上的某些网络设备、光 缆、计算机等都不可能是个人的私有物,所以在某个环节中都

      有可能会遭到恶意窥视行为。窃听相同段上的通信并非难事。只需要收集在互联网上流动的数据 包帧)就行了。

      对于收集来的数据包的解析工作,可交给那些抓包 (Packet Capture)或嗅探器(Sniffer)工具。

      所以,这时就需要对同信的过程进行加密,加密的方式就是通过和SSL(Secure Socket Layer,安全套接层)

      或 TLS(Transport Layer Security,安全层传输协议)的组合使用。

      这样,就可以在这条较安全的通信线路上进行HTTP通信了。

    2)内容的加密

      通信的内容不经过任何处理的话,都将以明文的方式进行传输,这样便很容易被人窃取到传输的信息,所以需要对

      参与通信的内容本身进行加密。由于 HTTP 协议中没有加密机制,那么就对 HTTP 协议传输的内容本身加密。

      这样的方式要求客户端和服务器同时具备加密和解密机制。

   2、认证

    HTTP 协议中的请求和响应不会对通信方进行确认。也就是说存在“服务器是否就是

    发送请求中 URI 真正指定的主机,返回的响应是否真的返回到实际提出请求的客户端”等类似问题。

    那么如果不确认通信方,就会存在各种隐患,为了解决这一问题,我们使用证书这一方法来解决。

    证书由值得信任的第三方机构颁发,用以证明服务器和客户端是实际存在的。

    另外,伪造证书从技术角度来说是异常困难的一件事。所以 只要能够确认通信方

    (服务器或客户端)持有的证书,即可判断通信方 的真实意图。通过使用证书,

    以证明通信方就是意料中的服务器。这对使用者个 人来讲,也减少了个人信息泄露的危险性。

    另外,客户端持有证书即可完成个人身份的确认,也可用于对 Web 网站的认证环节。

   3、完整性  

    所谓完整性是指信息的准确度。若无法证明其完整性,通常也就意味着无法判断信息是否准确。

    HTTP协议没有办法确认发出的请求 / 响应和接收到的请求 / 响应是前后相同的。像这样,请求或响应在传输途中,

    遭攻击者拦截并篡改内容的攻击称为中间人攻击(Man-in-the-Middle attack,MITM)。

     HTTP本身有为了防止篡改的方法,常用的是 MD5 和 SHA-1 等散列值校验的方法,以及用来确认文件的数字签名方法。

    然而,用这些方法都无法百分百保证确认结果正确;仅靠 HTTP 确保完整性是非常困难的,因此需要通过和其他协议组合使用来实现这个目标。

  HTTPS是通过什么方法来完成加密和认证的过程呢?

    1、其实HTTPS不是应用层的一种新协议。只是 HTTP 通信的接口部分用 SSL(Secure Socket Layer)

       和 TLS(Transport Layer Security)协议代替 而已。通常,HTTP 直接和 TCP 通信。当使用 SSL 时,

       则演变成先和 SSL 通信,再由 SSL 和 TCP 通信了。简言之,所谓 HTTPS,其实就是身披 SSL 协议这

       层外壳的 HTTP。所以,在采用 SSL 后,HTTP 就拥有了 HTTPS 的加密、证书和完整性保护这些功能。

       所以,要想弄清楚加密和认证的过程,只需要知道SSL做了什么就行了。

       1)公开密钥加密技术:SSL 采用一 种叫做公开密钥加密(Public-key cryptography)的加密处理方式。

          - 首先,我们在加密和解密时都会用到密钥,过程中使用同一个密钥的方式称为共享密钥加密

        也叫做对称密钥加密。以共享密钥方式加密时必须将密钥也发给对方,所以,在将密钥发给对方的时候,

        就有可能会被攻击者获取到,这样加密就失去了意义。

          - 公开密钥加密的方式很好的解决了这一问题;我们使用两把密钥的公开密钥加密,公开密钥加密使

        用一对非对称的密钥。一把叫做私有密钥(private key),另一把叫做公开密钥(public key)。私有密

        钥不能让其他任何人知道,而公开密钥则可以随意发布,任何人都可以获得。使用公开密钥加密方式,发

        送密文的一方使用对方的公开密钥进行加密处理,对方收到被加密的信息后,再使用自己的私有密钥进行

        解密。利用这种方式,不需要发送用来解密的私有密钥,也不必担心密钥被攻击者窃听而盗走。

          - HTTPS 采用共享密钥加密和公开密钥加密两者并用的混合加密机制。若密钥能够实现安全交换,

        那么有可能会考虑仅使用共享密钥加密来通信。但是公开密钥加密与共享密钥加密相比,其处理速度要慢。

        所以应充分利用两者各自的优势,将多种方法组合起来用于通信。 在交换密钥环节使用公开密钥加密方式,

        之后的建立通信交换报文阶段则使用共享密钥加密方式。

          - 遗憾的是,公开密钥加密方式存在无法证明公开密钥本身就是货真价实的公开密钥的问题。所以为了解决

        这一问题,可以使用由数字证书认证机构(CA,Certificate Authority)和其相关机关颁发的公开密钥证书。数

        字证书认证机构处于客户端与服务器双方都可信赖的第三方机构的立场上。认证流程如下:
            1)服务器的 运营人员向数字证书认证机构提出公开密钥的申请;

            2)数字证书认证机构判明提出申请者的身份之后,会对已申请的公开密钥做数字签名;

            3)分配这个已签名的公开密钥,然后将该公开密钥放入公钥证书并绑定在一起;

            4)服务器将这份由数字证书认证机构颁发的公钥证书发送给客户端,以进行公开密钥加密方式通信;

               5)接到证书的客户端可使用数字证书认证机构的公开密钥,对那张证书上的数字签名进行验证;

  以上便是HTTPS加密和认证的相关方法及过程。

以上是关于你不知道的HTTP之HTTPS的主要内容,如果未能解决你的问题,请参考以下文章

神器来袭——不是你不想要(职场必备),而是你不知道

你不知道的 HTTPS 压测

lua之table.remove你不知道的坑

你不知道的 Go 之 const

你不知道的JavaScript之类型

送图解 HTTP 你不知道的 JavaScript