关于HTTP和HTTPS


前言

对于HTTPHTTPS相信大家在浏览网站的时候会经常见到。估计很多人都不会在意它。有人说不就是多了个 S 嘛,还能有什么不一样的(其实不然,里面学问大着呢,一会讲),也有一些用心的人在使用 Chrome 访问http网站的时候会发现在地址栏最左边会有 不安全 字样,点一下 Chrome 提示你 “你与此网站之间建立的连接不安全”。也有一些更用心的小伙伴会直接找 度娘 问个究竟。(比如博主我   /自恋ing)

好啦,下面我们开始正题,搬好小板凳!!!

其实HTTPHTTPS是两种不同的网络协议。那什么又是网络协议呢?

网络协议是计算机之间为了实现网络通信而达成的一种“约定”或者”规则“,有了这种”约定“,不同厂商的生产设备,以及不同操作系统组成的计算机之间,就可以实现通信。

网络协议组成的三要素:

  1. 语义。语义是解释控制信息每个部分的意义。它规定了需要发出何种控制信息,以及完成的动作与做出什么样的响应。
  2. 语法。语法是用户数据与控制信息的结构与格式,以及数据出现的顺序。
  3. 时序。时序是对事件发生顺序的详细说明。(也可称为“同步”)。

语义表示要做什么,语法表示要怎么做,时序表示做的顺序。

HTTP

HTTP 超文本传输协议(HyperText Transfer Protocol):是互联网上应用最为广泛的一种网络协议,所有的www文件都必须遵守这个标准。是一个客户端和服务器端请求和应答的标准(TCP),用于从www服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。

工作原理

HTTP是基于客户/服务器模式,且面向连接的。典型的HTTP事务处理有如下的过程:

  1. 客户与服务器建立连接;
  2. 客户向服务器提出请求;
  3. 服务器接受请求,并根据请求返回相应的文件作为应答;
  4. 客户与服务器关闭连接。

客户与服务器之间的HTTP连接是一种一次性连接,它限制每次连接只处理一个请求,当服务器返回本次请求的应答后便立即关闭连接,下次请求再重新建立连接。
HTTP是一种无状态协议,即服务器不保留与客户交易时的任何状态。

以访问我的博客为例,我们来看一下简单的HTTP流程。


HTTP的特点

  1. HTTP协议支持客户端/服务端模式,也是一种请求/响应模式的协议。
  2. 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GETHEADPOST
  3. 灵活:HTTP允许传输任意类型的数据对象。传输的类型由Content-Type加以标记。
  4. 无连接:限制每次连接只处理一个请求。服务器处理完请求,并收到客户的应答后,即断开连接,但是却不利于客户端与服务器保持会话连接,为了弥补这种不足,产生了两项记录HTTP状态的技术,一个叫做Cookie,一个叫做Session
  5. 无状态:无状态是指协议对于事务处理没有记忆,后续处理需要前面的信息,则必须重传。

在HTTP中一般存在如下问题

  • 请求信息明文传输,容易被窃听截取。
  • 数据的完整性未校验,容易被篡改
  • 没有验证对方身份,存在冒充危险
  • 因为是无状态所以HTTP无法支持需要连续多个步骤的”事务“操作。连续的操作每次都得问一遍身份信息,比较麻烦而且增加了不必要的数据传输量。

针对以上HTTP出现的问题,我们就用到了HTTPS

HTTPS

HTTPS 安全套接字层超文本传输协议(Hyper Text Transfer Protocol over Secure Socket Layer):以安全为目标的HTTP通道,简单讲是HTTP的安全版本,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。一般理解为HTTP+SSL/TLS,通过 SSL证书来验证服务器的身份,并为浏览器和服务器之间的通信进行加密。

SSL (Secure Sockets Layer 安全套接字协议):为Netscape所研发,用以保障在Internet上数据传输的安全,利用数据加密,可确保数据在网络上的传输过程中不会被截取及窃听。安全套接字协议,及其继任者传输层安全(TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层与应用层之间对网络连接进行加密。
TLS (Transport Layer Security 安全传输层协议):安全传输层协议用于在两个通信应用程序之间提供保密性和数据完整性。该协议由两层组成: TLS 记录协议(TLS Record)和 TLS 握手协议(TLS Handshake)。

HTTPS原理

  1. 客户端将它所支持的算法列表和一个用作产生密钥的随机数发送给服务器;
  2. 服务器从算法列表中选择一种加密算法,并将它和一份包含服务器公用密钥的证书发送给客户端;该证书还包含了用于认证目的的服务器标识,服务器同时还提供了一个用作产生密钥的随机数;
  3. 客户端对服务器的证书进行验证(有关验证证书,可以参考下面数字签名),并抽取服务器的公用密钥;然后,再产生一个称作 pre_master_secret 的随机密码串,并使用服务器的公用密钥对其进行加密(非对称加 / 解密这里不多做介绍了解更多请阅读完移步至度娘),并将加密后的信息发送给服务器;
  4. 客户端与服务器端根据 pre_master_secret 以及客户端与服务器的随机数值独立计算出加密和 MAC 密钥;
  5. 客户端将所有握手消息的 MAC 值发送给服务器;
  6. 服务器将所有握手消息的 MAC 值发送给客户端;

数字签名:又称公钥数字签名是只有信息的发送者才能产生的别人无法伪造的一段数字串,这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明。它是一种类似写在纸上的普通的物理签名,但是使用了公钥加密领域的技术来实现的,用于鉴别数字信息的方法。一套数字签名通常定义两种互补的运算,一个用于签名,另一个用于验证。数字签名是非对称密钥加密技术与数字摘要技术的应用。

MAC地址 (Media Access Control Address):直译为媒体存取控制位址,也称为局域网地址(LAN Address)MAC位址以太网地址(Ethernet Address)物理地址(Physical Address),它是一个用来确认网络设备位置的位址。在OSI模型中,第三层网络层负责IP地址,第二层数据链路层则负责 MAC位址MAC位址 址用于在网络中唯一标示一个网卡,一台设备若有一或多个网卡,则每个网卡都需要并会有一个唯一的MAC位址

看上去是不是觉得HTTPS很安全,其实......是比HTTP安全(haha 皮一下)。古话说:“鱼和熊掌不可兼得”。HTTPS在安全的同时也有很多缺点。下面我们来说一下!

优点

  1. 使用 HTTPS 协议可认证用户和服务器,确保数据发送到正确的客户机和服务器。
  2. HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,要比 HTTP 协议安全,可防止数据在传输过程中不被窃取、改变,确保数据的完整性。
  3. HTTPS 是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增加了中间人攻击的成本。

缺点

  • 相同网络环境下,HTTPS 协议会使页面的加载时间延长近 50%,增加 10%20%的耗电。此外,HTTPS 协议还会影响缓存,增加数据开销和功耗。
  • HTTPS 协议的安全是有范围的,在黑客攻击、拒绝服务攻击和服务器劫持等方面几乎起不到什么作用。
  • 最关键的是,SSL 证书的信用链体系并不安全。特别是在某些国家可以控制 CA 根证书的情况下,中间人攻击一样可行。
  • 成本增加。部署 HTTPS 后,因为 HTTPS 协议的工作要增加额外的计算资源消耗,例如 SSL 协议加密算法和 SSL 交互次数将占用一定的计算资源和服务器成本。在大规模用户访问应用的场景下,服务器需要频繁地做加密和解密操作,几乎每一个字节都需要做加解密,这就产生了服务器成本。随着云计算技术的发展,数据中心部署的服务器使用成本在规模增加后逐步下降,相对于用户访问的安全提升,其投入成本已经下降到可接受程度。

虽然HTTPS有很大的优势,但一看这些缺点有时候还是很伤的~

总结

二者的区别

原理上的区别参考上面介绍的HTTP原理和HTTPS原理
安全的区别:HTTP的连接很简单,是无状态的。而HTTPS协议是SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议。
端口的区别:HTTP的默认端口是 80;HTTPS的默认端口是 443
传输数据显示的区别:HTTP协议传输的数据是明文显示的,是不安全的;而HTTPS使用了SSL/TLS协议进行了加密处理。

好啦!本次的分享就到这里啦!童鞋们在阅读文章的时候如有发现错误或不妥之处。还请在文章下方留言告知,我好及时更正!

谢谢呀!Wo们下次见!

声明:予安博客 | 版权所有 | 如未注来源,均为原创 | 本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - 关于HTTP和HTTPS


慎终如始,则无败事。