首页 > 技术文章 > HTTP和HTTPS

yangyongjie 2019-03-21 11:43 原文

HTTPS是什么?

  HTTPS是HTTP的升级版,HTTP网站协议添加SSL安全证书,实现HTTP的安全数据传输。

  

HTTP和HTTPS的区别:

  1.

    ①:HTTP超文本传输协议

    ②:HTTPS安全套接字层超文本传输协议

  2、

    ①:HTTP协议以明文的方式进行传输,不提供任何的数据加密,因此不适合传输一些敏感信息,如卡号密码等,可能会被窃听

    ②:HTTPS协议在http基础上加入了SSL协议。SSL依靠证书来验证服务器的身份,为浏览器和服务器之间的通信数据加密

  3、HTTP和https的端口不同,HTTP是80,HTTPS是443

  4、HTTP是无状态的,HTTPS是SSL和HTTP构建的可进行加密传输,身份认证

 

  

 

 

在HTTP协议中可能存在信息窃听或身份伪装等安全问题,使用HTTPS通信机制可以有效的防止这些问题。

   HTTP的缺点:

    1、通信使用明文(不加密),内容可能会被窃听

    2、不验证通信方的身份,因此有可能遭遇伪装

    3、无法证明报文的完整性,所以有可能已遭篡改

 

    下面详细解释HTTP协议的这三种缺点:

    1、通信使用明文(不加密),内容可能会被窃听

      HTTP本身不具有加密的功能,即,HTTP报文使用明文方式发送

      另外TCP/IP协议的的通信机制,通信内容在所有的通信线路上都有可能遭到窥视。即使已经过加密处理的通信,也会被窥视到通信内容。窃听相同段上的通信并非难事,只需要收集在互联网上流动的数据包(帧)就行了

      

      解决方案:加密处理防止被窃听

       1)、通信的加密(建立安全通信线路)

        HTTP协议中没有加密机制,但可以通过和SSL(Secure Socket Layer,安全套接层)或TLS(Transport Layer Security,安全层传输协议)的组合使用加密HTTP的通信内容。

        用SSL建立安全通信线路之后,就可以在这条线路上进行HTTP通信了。与SSL组合使用的HTTP被称为HTTPS(HTTP Secure,超文本传输安全协议)或 HTTP over SSL。

       2)、内容的加密

        由于HTTP协议没有加密机制,那就手动对HTTP协议传输的内容本身加密。即把HTTP报文里所含的内容进行加密处理。

        在这种情况下,客户端需要对HTTP报文主体(body)进行加密处理后再发送请求。这种方式要求客户端和服务器同时具备加密和解密机制,主要应用在Web服务中。

        注意:由于该方式不同于SSL或TLS将整个通信线路加密处理,所以内容仍有被篡改的风险。需要使用签名机制验证加密后的报文没有被篡改。

 

    2、不验证通信方的身份,因此有可能遭遇伪装

      HTTP 协议中的请求和响应不会对通信方进行确认。

      也就是说存在服务器是否就是请求中URI真正指定的主机,返回的响应是否真的返回到实际提出请求的客户端等类似问题;

       因此:任何人都可发起请求(服务器对请求来者不拒)。

       在HTTP协议通信时,由于不存在确认通信方的处理步骤,任何人都可以发起请求。另外,服务器只要接收到请求,不管对方是谁都会返回一个响应(也仅限于发送端的IP地址和端口号没有被Web服务器设定限制访问的前提下)。因为不确认通信方,会存在以下各种隐患:

        ①:无法确定请求发送至目标的Web服务器是否是真实的服务器,可能是已伪装的Web服务器

        ②:无法确定响应返回到的客户端是否是真实客户端。有可能是已伪装的客户端

        ③:无法确定正在通信的对方是否具备访问权限。因为某些Web服务器上保存着重要的信息,只想发给特定用户通信的权限

        ④:无法判定请求是来自何方、出自谁手

        ⑤:即使是无意义的请求也会照单全收。无法阻止海量请求下的Dos攻击(Denial of Service,拒绝服务攻击)

 

      解决方案:查明对方的证书

        使用HTTP无法确定通信方,但是SSL则可以。SSL不仅提供加密处理,而且还使用了一种被称为证书的手段,可用于确定通信对方。

        证书由值得信任的第三方机构(CA)颁发,用以证明服务器和客户端是实际存在的。另外,伪造证书从技术角度来说非常困难,所以只要能够确认通信方(服务器或客户端)持有的证书,即可判断通信方的身份。

        客户端在开始通信之前先确认服务器的证书,验证服务器是否是真实的服务器。另外,客户端持有证书即可完成个人身份的确认,也可用于Web网站的认证环节。

 

    3、无法证明报文的完整性,所以有可能已遭篡改

      所谓完整性是指信息的准确度。无法证明报文的完整性,也就意味着无法判断接收到的信息是否准确,可能接收的信息是已遭篡改的信息。

      问题:由于 HTTP 协议无法证明通信的报文完整性, 因此,在请求或响应送出之后直到对方接收之前的这段时间内, 即使请求或响应的内容遭到篡改, 也没有办法获悉。即没有办法确认发出的请求/响应和接收到的请求/响应是前后相同的

      解决方案:防止信息在请求或响应传输中被篡改

       1)签名校验

        使用HTTP协议确定报文完整性的方法,其中常用的MD5和SHA-1等散列值校验的方法,以及用来确认文件的数字签名方法(RSA、HMACSHA1 等)。

        如提供下载服务的Web网站也会提供相应的以PGP(Pretty Good Privacy,完美隐私)创建的数字签名及MD5算法生成的散列值。供用户检查验证下载的文件是否就是原来服务器上的文件。

       2)使用HTTPS

        虽然有使用HTTP协议确定报文完整性的方法,但事实上并不便捷、可靠,依然无法百分百确认结果正确。因为PGP和MD5本身被改写的话,用户是没有办法意识到的。所以有必要使用HTTPS,SSL提供认证和加密处理及摘要功能

        

 

  HTTPS

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

    HTTP协议使用明文,如果通信线路被窃听,信息就会泄漏;没有办法确认通信方,可能遇到通信方伪装;无法验证明文完整性,报文可能会遭篡改。

    为了解决以上问题,需要在HTTP的基础之上再添加加密处理和认证等机制,把添加了加密及认证机制的HTTP称为HTTPS。使用HTTPS通信时,使用https://。

 

    HTTPS是身披SSL外壳的HTTP

      HTTPS并非是应用层的一种新协议。只是HTTP通信接口部分用SSL和TLS协议代替而已。通常HTTP直接和TCP通信,当使用SSL时,则演变成先和SSL通信,再由SSL和TCP通信了。所以说HTTPS是身披SSL外壳的HTTP。

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

      SSL是独立于HTTP的协议,所以其他运行在应用层的协议如SMTP、Telnet均可配合SSL协议使用。可以说SSL是当今世界上应用最为广泛的网络安全技术。

 

    SSL采用 对称密钥加密 和 非对称密钥加密 混合的加密机制

      1、对称密钥加密

        加密和解密通用一个密钥的方式称为对称密钥加密(共享密钥加密),简称对称加密。

        问题:对称密钥加密方式必须将密钥也发给对方,但是密钥的发送有窃听的风险,而不发送,对方就无法解密

      2、非对称密钥加密

        非对称密钥,即加密和解密使用一对不同的密钥,私钥和公钥。私钥自己保存,公钥发送给对方。所以也叫公开密钥加密。

        使用非对称密钥加密的方式,发送密文的一方使用对方的公钥进行加密,对方收到被加密的信息后,使用自己的私钥进行解密。

        利用这种方式,不需要发送用来解密的私有密钥,也不必担心密钥被攻击者窃听而盗走的问题。且要根据密文和公钥要恢复明文从目前的技术手段是异常困难的。

        问题:非对称加密的耗时比对称加密耗时长,只适合对少量数据进行处理。

      HTTPS采用混合加密机制

        HTTPS采用对称加密和非对称加密两者并用的混合加密机制。结合对称加密的速度快和非对称加密不必担心密钥被窃听的优势。

        ①:使用非对称加密安全地交换 对称加密 的密钥

        ②:使用对称加密方式 加密

 

    证明非对称加密的公钥正确性的数字证书

      遗憾地是,非对称密钥加密的方式还是存在一些问题的。那就是无法证明 公钥 本身是货真价实的公钥。存在在公钥的传输中,真正的公钥被攻击者替换掉了的可能。

      解决方案:使用由数字证书认证机构(CA,Certificate Authority)颁发的公钥证书。      

      数字证书认证机构处于客户端与服务器双方都可信赖的第三方机构的立场上,会对向CA申请公钥证书的服务器的身份做校验。数字证书认证流程:

      (1)、服务器把自己的公开密钥登录至CA

      (2)、CA用自己的私钥向服务器的公钥签署数字签名并颁发公钥证书(包含:服务器公钥+CA对此公钥的签名)给服务器

      (3)、服务器将CA颁发的公钥证书转送给客户端

      (4)、客户端拿到服务器的公钥证书后,使用数字证书认证机构的公开密钥(CA公钥,事先植入到浏览器中),向CA验证公钥证书上的数字签名,以确认服务器的公开密钥的真实性

      (5)、客户端使用服务器的公开密钥对报文加密后发送

      (6)、服务器用私有密钥对报文解密。

    即数字证书认证机构使用非对称加密方式对同样使用非对称加密的双方的交换公钥的公钥进行加密和加签保证公钥的正确性,只不过数字证书认证机构的公钥事先植入在浏览器中,是可信的。

 

    HTTPS的通信步骤

      1、客户端通过发送 Client Hello 报文开始 SSL通信。 报文中包含客户端支持的 SSL的指定版本、 加密组件( Cipher Suite) 列表( 所使用的加密算法及密钥长度等)

      2、服务器可进行 SSL通信时, 会以 Server Hello 报文作为应答。 和客户端一样, 在报文中包含 SSL版本以及加密组件。 服务器的加密组件内容是从接收到的客户端加密组件内筛选出来的

      3、之后服务器发送 Certificate 报文。 报文中包含公开密钥证书

      4、最后服务器发送 Server Hello Done 报文通知客户端, 最初阶段的 SSL握手协商部分结束

      5、SSL第一次握手结束之后, 客户端以 Client Key Exchange 报文作为回应。 报文中包含通信加密中使用的一种被称为 Pre-mastersecret 的随机密码串(客户端生成的随机数)。 该报文已用步骤 3 中的公开密钥进行加密

      6、接着客户端继续发送 Change Cipher Spec 报文。 该报文会提示服务器, 在此报文之后的通信会采用 Pre-master secret 密钥加密

      7、客户端发送 Finished 报文。 该报文包含连接至今全部报文的整体校验值。 这次握手协商是否能够成功, 要以服务器是否能够正确解密该报文作为判定标准

      8、服务器同样发送 Change Cipher Spec 报文

      9、服务器同样发送 Finished 报文

      10、服务器和客户端的 Finished 报文交换完毕之后, SSL连接就算建立完成。 当然, 通信会受到 SSL的保护。 从此处开始进行应用层协议的通信, 即发送 HTTP 请求

      11、应用层协议通信, 即发送 HTTP 响应

      12、最后由客户端断开连接。 断开连接时, 发送 close_notify 报文,之后四次挥手断开连接。

 

    

    既然HTTPS安全可靠,为什么不一直使用HTTPS?

      1、HTTPS比HTTP要慢2到100倍,比HTTP多了SSL通信,首先SSL通信慢,另外SSL通信因为要加密还要大量消耗CPU及内存等资源。

      2、此外要进行HTTPS通信,证书必不可少,而证书必须向认证机构(CA)购买,价格昂贵。

     因此,如果是非敏感信息则使用HTTP通信,只有包含敏感数据时,才使用HTTPS加密通信

 

 

    疑问?

      1、HTTPS通信报文已经加密,为什么抓包工具可以抓到明文信息

        因为我们允许抓包工具在电脑上安装了证书,使抓包工具充当了中间人的角色。

        HTTPS抓包的原理就是抓包工具将服务器返回的证书截获,然后给客户端返回一个它自己的证书,我们会手动安装抓包工具的证书。之后客户端发送的数据抓包工具用自己的证书解密,然后再用截获的服务器的证书加密,再发给服务器。

 

      2、使用HTTPS还需要对请求报文做签名吗

        HTTPS可以防止中间人攻击、加密防窃听、防篡改。

        RSA签名用于认证(验证身份,防止抵赖)。

 

        HTTPS主要解决的是传输层面的数据安全,但是HTTPS无法保证传输的数据是有效的(没有签名,无法甄别数据来源)      

 

      3、HTTPS通信的对称密钥是哪方生成的?

        是由客户端生成的。客户端在收到服务器返回的公钥证书,并校验证书合法后,生成一个随机数,并使用公钥加密随机数发送给服务器,这个随机数就是对称密钥。

 

 

 

 

 

END.

推荐阅读