HTTP | Http与Https

目录

一、HTTP的缺点

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

对通信的加密

对内容的加密

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

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

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

1.加密处理方法 

共享/对称密钥加密

公开密钥加密

2.HTTPS的加密机制

3.HTTPS的认证机制

EV SSL证书 / EV服务器证书

客户端证书 

自签名证书

4.HTTPS的安全通信机制

三、SSL和TLS


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

一、HTTP的缺点

        一般来说,HTTP的缺点有以下三点:1.通信使用明文(不加密),内容可能会被窃听;2.不验证通信方的身份,因此有可能遭遇伪装;3.无法证明报文的完整性,所以有可能已遭篡改。

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

        由于 HTTP 本身不具备加密的功能,所以也无法做到对通信整体(使用 HTTP 协议通信的请求和响应的内容)进行加密。

        目前最普及的防止窃听保护信息的技术就是加密技术,加密对象可以是通信,也可以是内容。

  • 对通信的加密

        HTTP 协议中没有加密机制,但可以通过和 SSL ( Secure SocketLayer,安全套接层)或 TLS ( Transport Layer Security,安全传输层协议 ) 的组合使用,加密HTTP的通信内容。用 SSL 建立安全通信线路之后,就可以在这条线路上进行 HTTP 通信了。与 SSL 组合使用的 HTTP被称为 HTTPS ( HTTP Secure ,超文本传输安全协议)或 HTTP over SSL 。

  • 对内容的加密

        对内容的加密不同于SSL或TLS将整个通信线路加密,它是对HTTP协议传输的内容本身加密,即把HTTP报文里所含的内容进行加密处理。对内容做有效的加密,就需要客户端和服务器同时具备加密和解密机制。

        需要注意的一点是:即使已经过加密处理的通信,也会被窥视到通信内容,这点和未加密的通信是相同的。只是说如果通信经过加密,就有可能让人无法破解报文信息的含义,但加密处理后的报文信息本身还是会被看到的。

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

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

        使用SSL可以确定通信方。 SSL 不仅提供加密处理,而且还使用了一种被称为证书(证书由值得信任的第三方机构颁发,用以证明服务器和客户端是实际存在的)的手段,可用于确定通信方。(客户端持有证书就可完成个人身份的确认,也可用于对Web网站的认证环节)

        注意一点:虽然HTTP请求过程中会进行TCP的三次握手和四次挥手,但它的目的在于确保可以通信,但并不验证对方的身份。

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

        由于 HTTP 协议无法证明通信的报文完整性,因此,在请求或响应送出之后直到对方接收之前的这段时间内,即使请求或响应的内容遭到篡改,也没有办法获悉。像这样,请求或响应在传输途中,遭攻击者拦截并篡改内容的攻击称为中间人攻击( Man-in-the-Middle attack, MITM )。

        我们常用MD5、SHA-1等散列值校验的方法,以及用来确认文件的数字签名的方式来确定报文的完整性。可惜的是,用这些方法也依然无法百分百保证认结果正确。因为数字签名和 MD5 本身被改写的话,用户是没有办法意识到的。

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

        为了解决HTTP请求时可能会发生的问题,需要在HTTP上再加入加密处理和认证等机制。我们把添加了加密及认证机制的HTTP称为HTTPS。

        HTTP请求和HTTPS请求最明显的一个特点是:当浏览器访问HTTPS通信有效的Web网站时,浏览器的地址栏会出现一个带锁的标记:

        HTTPS并非是应用层的一种新协议。只是 HTTP通信接口部分用 SSL ( Secure Socket Layer )和 TLS ( Transport Layer Security ) 协议代替而已。

        通常, HTTP 直接和 TCP 通信。当使用 SSL 时,则演变成先和 SSL 通信,再由 SSL 和 TCP 通信了。简言之,所谓 HTTPS ,其实就是身披 SSL 协议这层外壳的 HTTP 。

        在采用 SSL 后, HTTP 就拥有了 HTTPS 的加密、证书和完整性保护这些功能。SSL是独立于 HTTP 的协议,所以不光是 HTTP 协议,其他运行在应用层的 SMTP 和 Telnet 等协议均可配合 SSL 协议使用。可以说 SSL 是当今世界上应用最为广泛的网络安全技术。

1.加密处理方法 

        常用的加密方法有两种:一是共享密钥加密,也叫对称密钥加密;二是公开密钥加密。

  • 共享/对称密钥加密

        加密和解密同用一个密钥的方式称为共享密钥加密( Common key crypto system ) ,也被叫做对称密钥加密。

        以共享密钥方式加密时必须将密钥也发给对方。可究竟怎样才能安全地转交?在互联网上转发密钥时,如果通信被监听那么密钥就可会落入攻击者之手,同时也就失去了加密的意义。另外还得设法安全地保管接收到的密钥。

  • 公开密钥加密

        公开密钥加密方式很好地解决了共享密钥加密的困难。公开密钥加密使用一对非对称的密钥。一把叫做私有密钥( private key ) ,另一把叫做公开密钥( public key ) 。顾名思义,私有密钥不能让其他任何人知道,而公开密钥则可以随意发布,任何人都可以获得。

        使用公开密钥加密方式,发送密文的一方(客户端)使用对方(服务器端)的公开密钥进行加密处理,对方收到被加密的信息后,再使用自己的私有密钥进行解密。利用这种方式,不需要发送用来解密的私有密钥,也不必担心密钥被攻击者窃听而盗走。

2.HTTPS的加密机制

        HTTPS采用共享密钥加密和公开密钥加密两者并用的混合加密机制。但是公开密钥加密与共享密钥加密相比,其处理速度要慢。所以应充分利用两者各自的优势,在交换密钥环节使用公开密钥加密方式,之后的建立通信交换报文阶段则使用共享密钥加密方式。

  1. 客户端向服务器请求公钥,服务器下发。
  2. 客户端使用公钥加密自己随机生成的共享加密的秘钥,发送给服务器。
  3. 服务器解析后,使用共享加密与客户端进行通讯。

3.HTTPS的认证机制

        因为无法证明公开密钥本身就是真实的公开密钥,所以公开密钥加密方式还是存在一些问题,这时,可以使用公开密钥证书来解决这个问题。

        公开密钥证书(也叫数字证书,简称证书)是由数字证书认证机构和其相关机关颁发的。数字证书认证机构处于客户端与服务器双方都可信赖的第三方机构的立场上。

数字证书认证机构的业务流程

        首先,服务器的运营人员向数字证书认证机构提出公开密钥的申请。数字证书认证机构在判明提出申请者的身份之后,会对已申请的公开密钥做数字签名,然后分配这个已签名的公开密钥,并将该公开密钥放入证书后绑定在一起。

        服务器会将这份由数字证书认证机构颁发的证书发送给客户端,以进行公开密钥加密方式通信。(此处认证机关的公开密钥必须安全地转交给客户端。使用通信方式时,如何安全转交是一件很困难的事,因此,多数浏览器开发商发布版本时,会事先在内部植入常用认证机关的公开密钥。)

        接到证书的客户端可使用数字证书认证机构的公开密钥,对那张证书上的数字签名进行验证,一旦验证通过,客户端便可明确两件事:—,认证服务器的公开密钥的是真实有效的数字证书认证机构。二,服务器的公开密钥是值得信赖的。

  • EV SSL证书 / EV服务器证书

        证书的一个作用是用来证明作为通信一方的服务器是否规范,另外一个作用是可确认对方服务器背后运营的企业是否真实存在。拥有该特性的证书就是 EV SSL 证书( Extended Validation SSL Certifcate ) 。

        EV SSL 证书是基于国际标准的认证指导方针颁发的证书。其严格规定了对运营组织是否真实的确认方针,因此,通过认证的 Web 网站能够获得更高的认可度。

  • 客户端证书 

        HTTPS中还可以使用客户端证书。以客户端证书进行客户端认证,证明服务器正在通信的对方始终是预料之内的客户端,其作用跟服务器证书如出一辙。

        客户端证书存在两个问题:一是证书的获取和发布(需要付费购买);二是客户端证书只能用来证明客户端实际存在,而不能用来证明本人的真实有效性。

  • 自签名证书

        独立构建的认证机构叫做自认证机构,由自认证机构颁发的“无用”证书也被戏称为自签名证书。浏览器访问该服务器时,会显示“无法确认连接安全性”或“该网站的安全证书存在问题”等警告消息。

4.HTTPS的安全通信机制

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

步骤2: 服务器可进行SSL通信时,会以Server Hello报文作为应答。服务器根据自身情况从客户端发来的报文中选了几个它能支持的加密组件再返回给客户端。

步骤3: 之后服务器发送Certificate报文。报文中包含公开密钥证书(非对称密钥证书),用来给客户端建立安全的连接。

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

步骤5:SSL第一次握手结束之后,客户端以Client Key Exchange报文作为回应。报文中包含通信加密中使用的一种被称为Pre-master secret的随机密码串(随机密码串即对称密钥)。该报文已用步骤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报文。上图做了一些省略,这步之后再发送TCP FIN报文来关闭与TCP的通信。

        在以上流程中,应用层发送数据时会附加一种叫做MAC(Message Authentication Code)的报文摘要。MAC能够查知报文是否遭到篡改,从而保护报文的完整性。

三、SSL和TLS

        HTTPS使用 SSL(Secure   Socket   Layer)和TLS(Transport   Layer   Security)这两个协议 。TLS是以 SSL 为原型开发的协议 , 有时会统一称该协议为 SSL。当前主流的版本是 SSL3.0和 TLS1.0。

        当使用SSL时,HTTPS的处理速度会变慢,也就是说HTTPS要比HTTP慢2~100倍。主要原因有:需要进行SSL通信、SSL必须进行加密处理(在服务器和客户端都需要进行加密和解密的运算处理。因此从结果上讲,比起 HTTP 会更多地消耗服务器和客户端的硬件资源,导致负载增强。)因此,如果是非敏感信息则使用 HTTP 通信,只有在包含个人信息等敏感数据时,才利用 HTTPS 加密通信。
 

   ——《图解HTTP》笔记

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

烫青菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值