03-网络-HTTP和HTTPS的区别

一、HTTP和HTTPS的基本概念

图一 HTTP和HTTPS
  • 1、HTTP
    是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输层到本地浏览器的传输协议,它可以使浏览器更加高效,使用网络传输减少;HTTP协议是以明文方式发送信息的,如果黑客截取了web浏览器和服务器之间的传输报文,就可以直接获得其中的信息。

  • HTTP原理

    • 客户端首先通过网络与服务器建立连接,该连接是通过TCP来完成的,一般TCP的连接端口号是80。建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号、后面是MIME信息(包括请求修饰符、客户机信息和许可证)。
    • 服务器接收到请求后,给予相应的响应信息、其格式为一个状态行(包括协议版本号、一个成功或错误的代码)、后面是MIME信息(包括服务器信息、实体信息和可能的内容)。
  • 2、HTTPS
    简单可以理解为HTTP协议+SSL/TLS,通过 SSL证书来验证服务器的身份,并为浏览器和服务器之间的通信进行加密。即是HTTP的安全版,HTTP下加入SSL层,SSL是安全基础。

    TLS(SSL)是由openSSL的library提供,SSL(Secure Socket Layer,安全套接字层)1994年为 Netscape 所研发,SSL 协议位于 TCP/IP 协议与各种应用层协议之间,为网络通信提供安全及数据完整性的一种安全协议
    TLS(Transport Layer Security,传输层安全)安全传输协议:其前身是 SSL,最初的三个版本(SSL1.0、SSL2.0、SSL3.0)由网景公司开发,1999年从3.2被IETF标准化并改名,发展至今已有TLS1.0、TLS1.1、TLS1.2三个版本。
    由于SSL3.0和TLS1.0由于存在安全漏洞,已经很少被使用到;TLS1.3改动会比较大,目前还在草案阶段,目前使用最广泛的是TLS 1.1、TLS 1.2

    • SSL分为:
      • SSL记录协议(SSL Record Protocol),它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。
      • SSL握手协议(SSL Handshake Protocol),它建立在SSL记录协议之上,用于在实际的数据传输开始前,通过双方进行身份认证、协商加密算法、交换加密密钥等。
    • HTTPS协议的主要作用分为两种 :
      • 建立一个信息安全通道 ,来保证数据传输的安全。(数据对称加密传输)
      • 确认网站的真实性。(身份认证)
  • 3、TCP/IP和HTTP的关系
    TCP/IP是全世界的计算机和网络设备常用的层次化分组交换网络协议集!简单的说,http协议是一个应用层协议,位于TCP/IP协议的上一层,TCP/IP协议的主要作用就是过滤掉每个计算机的差异性,隐藏相关弱点,使得对于http协议来说提供的都是“相同的”接口。

二、HTTP和HTTPS的区别

  • 相同点:
    • https和http都属于应用层(application layer),基于TCP(以及UDP)协议。
  • 不同点:
    • 1、HTTPS协议需要用到CA(Certificate Authority,证书颁发机构)申请证书,一般免费证书较少,因而需要一定费用。
    • 2、HTTP是超文本传输协议,信息是明文传输,HTTPS则是具有安全性的SSL加密传输协议
    • 3、HTTP和HTTPS使用的是完全不同的连接方式,用的端口也不一样,前者缺省是80,后者缺省是443【值得一提的是,google发明了一个新的协议,叫QUIC,并不基于TCP,用的port也是443,同样是用来给HTTPS,Google好牛逼呀】。
    • 4、HTTP的连接很简单,是无状态的。HTTPS协议是有SSL+HTTP协议构建的进行加密传输、身份认证的网络状态,比HTTP协议安全。(无状态的意思是其数据包的发送、传输和接收都是相互独的。无连接的意思是指通信双方都不长久的维持对方的任何信息)。

总之就是:
http是运行在TCP之上,所有传输的内容都是明文,客户端和服务器端都无法验证对方的身份。
https是运行在SSL/TLS之上,SSL/TLS运行在TCP之上,所有传输的内容都经过加密,加密采用对称加密,但对称加密的密钥用服务器方的证书进行了非对称加密。
此外客户端可以验证服务器端的身份,如果配置了客户端验证,服务器方也可以验证客户端的身份。

三、HTTP风险

  • 1、请求信息明文传输,容易被窃听截取。
  • 2、数据的完整性未校验,容易被篡改。
  • 3、没有验证对方身份,存在冒充危险。

四、HTTPS设计目标

  • 1、数据保密性:SSL协议使用密钥加密通信数据,保证数据内容在传输的过程中不会被第三方查看。
  • 2、数据完整性:SSL协议会对传送的数据进行完整性检查及时发现被第三方篡改的传输内容。
  • 3、可靠性-身份校验安全性:服务器和客户都会被认证(客户的认证是可选的),保证数据到达用户期望的目的地。

五、密码学基础

在正式讲解HTTPS协议之前,我们首先要知道一些密码学的知识。

明文: 明文指的是未被加密过的原始数据。
密文:明文被某种加密算法加密之后,会变成密文,从而确保原始数据的安全。密文也可以被解密,得到原始的明文。
密钥:密钥是一种参数,它是在明文转换为密文或将密文转换为明文的算法中输入的参数。密钥分为对称密钥与非对称密钥,分别应用在对称加密和非对称加密上。

  • 1、对称加密
    对称加密又叫做私钥加密,即信息的发送方和接收方使用同一个密钥去加密和解密数据。
    对称加密的特点是算法公开、加密和解密速度快,适合于对大数据量进行加密,常见的对称加密算法有AES、DES、3DES、TDEA、Blowfish、RC5和IDEA。【不过DES被认为是不安全的】
    加密过程:明文 + 加密算法 + 私钥 => 密文
    解密过程: 密文 + 解密算法 + 私钥 => 明文
    对称加密中用到的密钥叫做私钥,私钥表示个人私有的密钥,即该密钥不能被泄露。
    加密过程中的私钥与解密过程中用到的私钥是同一个密钥,这也是称加密之所以称之为“对称”的原因。由于对称加密的算法是公开的,所以一旦私钥被泄露,那么密文就很容易被破解,所以对称加密的缺点是密钥安全管理困难

  • 2、非对称加密
    非对称加密也叫做公钥加密。非对称加密与对称加密相比,其安全性更好。对称加密的通信双方使用相同的密钥,如果一方的密钥遭泄露,那么整个通信就会被破解。而非对称加密使用一对密钥,即公钥和私钥且二者成对出现。私钥被自己保存,不能对外泄露。公钥指的是公共的密钥,任何人都可以获得该密钥。用公钥或私钥中的任何一个进行加密,用另一个进行解密。
    公钥加密私钥解密,过程如下:
    明文 + 加密算法 + 公钥 => 密文, 密文 + 解密算法 + 私钥 => 明文
    私钥做数字签名公钥验证,过程如下:
    明文 + 加密算法 + 私钥 => 密文, 密文 + 解密算法 + 公钥 => 明文
    由于加密和解密使用了两个不同的密钥,这就是非对称加密“非对称”的原因。
    非对称加密的缺点是加密和解密花费时间长、速度慢,只适合对少量数据进行加密。
    在非对称加密中使用的主要算法有:RSA、Elgamal、Rabin、D-H、ECC(椭圆曲线加密算法)等。

六、HTTPS通信步骤

HTTPS的通信过程,除了完成HTTP的步骤(完成TCP三次同步握手)外,还涉及到三个密钥和两次HTTP传输,细分如下:

  • 1、客户端访问https连接,发送SSL握手信息
    客户端使用HTTPS的URL,发送SSL握手消息(包含客户端支持的SSL版本、加密算法Cipher Suite(密钥算法套件))给服务端要求连接。
  • 2、服务端回复证书(公钥)(自己保留私钥)给客户端
    服务端收到客户端报文后,开始回复报文:服务器接收到的客户端加密组件内筛选出来的、服务器证书报文(包含公钥证书)、通知客户done.
    服务器端有一对密钥,即公钥和私钥,是用来进行非对称加密使用的,服务器端保持着私钥,不能将其泄露,公钥可以发送给任何人,
    服务器端收到客户端(Cipher)请求后,和自己支持的加密算法进行比对
    • 如果不符合,则断开连接;
    • 如果符合,则会把符合的算法和证书发给客户端,会将证书(证书中包含公钥),包括证书时间、证书日期、证书颁发的机构。
  • 3、客户端检验服务器端证书
    客户端验证证书,这部分是由客户端的TLS来完成的,首先验证公钥是否有效,包括颁发证书的机构是否合法(客户端内置了所有受信任CA的证书)与是否过期,证书中包含的网站地址是否与正在访问的地址一致等。
    • 如果不是,将是否继续通讯的决定权交给用户选择(注意:这里将是一个安全缺陷)。
    • 如果检查无误或用户选择继续,则客户端认可服务器端的身份。
  • 4、客户端和服务器加密算法协商
    客户端的浏览器与Web服务器开始协商SSL连接的安全等级,也就是信息加密等级。 服务端接收到消息之后,选中安全性最高的算法,并将选中的算法发送给客户端,完成协商
  • 5、客户端发送会话密钥(客户端生成随机字符串+服务器公钥+非对称加密):
    加密算法协商后,客户端发起第二次请求,将生成随机的字符串作为会话密钥,客户端根据双方同意的安全等级建立会话密钥,然后通过协商好的非对称加密算法,使用服务器的的公钥将该会话密钥加密,并发送给服务器。
  • 6、服务器解密会话密钥:(密钥+私钥+非对称解密)
    服务端接收到加密信息后,首先利用私密解密得到随机字符串。然后用随机字符串解密握手信息,获得握手信息和握手信息的HASH值,服务端对握手信息HASH,对比客户端传回来的HASH。
    如果相同,说明信息没有被篡改;
    服务端验证完客户端信息以后,同样使用随机字符串加密握手信息和握手信息的HASH值发给客户端
  • 7、客户端验证服务端返回的握手信息,完成握手
    客户端接收到服务端发回来的握手信息后,用一开始生成的随机字符串对密文进行解密,得到握手信息和握手信息的HASH值,像服务端验证客户端握手信息一样验证,验证通过后,握手完毕。
  • 8、服务端和客户端开启数据传输
    在随后的数据传输中,服务端和客户端就使用那串会话密钥(客户端生成的)作为密钥进行对称加密通信。
03-网络-HTTP和HTTPS的区别_第1张图片
图三 HTTPS建立连接过程

七、HTTPS的优缺点

1、 HTTPS的优点
  • 身份认证
    使用HTTPS协议可认证用户和服务器,确保数据发送到正确的客户机和服务器。
    03-网络-HTTP和HTTPS的区别_第2张图片
    图四 HTTPS身份认证
  • 内容加密--防窃听
    HTTPS协议是有SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议、要比HTTP协议安全,可防止数据在传输过程中不被窃取。
  • 一致性校验--防篡改
    通过对数据和共享密钥的MAC码来防止「中间人」篡改消息内容,确保数据的一致性。
  • 安全性更高
    HTTPS网络传输安全系数相对较高,可以大幅增加「中间人」攻击的成本。
2、 HTTPS的缺点
  • ** 网速慢**
    • 网络耗时
      由于协议的规定,必须要进行的网络传输。比如
      SSL完全握手、302跳转**等。HTTPS协议握手阶段比较费时,会使页面的加载时长延长近50%,增加10%-20%的耗电。
    • 计算耗时
      无论是客户端还是服务端,都需要进行对称加密、协议解析、私钥计算、证书校验等计算,增加大量的计算时间。
  • 缓存效率低,增加开销
    HTTPS连接缓存不如HTTP高效,会增加数据开销和功耗,甚至已有的安全措施也会因此而受到影响。
  • 成本较高
    • 服务器成本
      HTTPS的私钥计算会导致服务器性能的急剧下降,甚至不到HTTP协议的十分之一,也就是说,如果HTTP的性能是10000cps,HTTPS的性能可能只有几百cps,会增加数倍甚至数十倍的服务器成本。
    • 证书成本
      根据证书个数以及证书类型,一年可能需要花费几百到几百万不等的证书成本
    • 开发和运维成本
      HTTPS协议比较复杂,包括协议的配置、证书的更新、过期监控、客户端兼容等一系列问题都需要具备专业背景的技术人员跟进处理。
  • 安全是有范围
    HTTPS 协议的安全是有范围的,在黑客攻击、拒绝服务攻击和服务器劫持等方面几乎起不到什么作用
  • 加密范围有限
    HTTPS 协议的加密范围也比较有限。最关键的,SSL 证书的信用链体系并不安全,特别是在某些国家可以控制 CA 根证书的情况下,中间人攻击一样可行。
  • SSL 证书通常需要绑定 IP
    SSL 证书通常需要绑定 IP,不能在同一 IP 上绑定多个域名,IPv4 资源不可能支撑这个消耗。

七、HTTPS 的单向认证和双向认证区别

  • 关于证书:
    • 1、每个人都可以使用一些证书生成工具为自己的HTTPS站点生成证书(比如JDK的KeyTool),大家称它为“自签名证书”,但是自己生成的证书是不被互联网承认的,所以浏览器会被安全提示,要求你手动安装证书,只有通过权威的CA机构付费获得的证书才被互联网承认(有点类似于根域服务器的权威机构)。
    • 2、证书(无客户端服务器端之分)保存着IP信息,证书过期时间,证书所有者地址信息等。
  • 双向认证
    • 1、先决条件是有两个或两个以上的证书,一个是服务端证书,另一个或多个是客户端证书。
    • 2、服务端保存着客户端的证书并信任该证书,客户端保存着服务端的证书并信任该证书。这样,在证书验证成功的情况下即可完成请求响应。
    • 3、双向认证一般企业应用对接
  • 单向认证
    • 1、客户端保存着服务端的证书并信任该证书即可。
    • 2、HTTPS一般是单向认证,这样可以让觉大部分人都可以访问你的站点。

你可能感兴趣的:(03-网络-HTTP和HTTPS的区别)