HTTPS/HTTP2

HTTPS

  • HTTPS(HyperText Transfer Protocol Secure),译为:超文本传输安全协议
    • 常称为HTTP over TLS、HTTP over SSL、HTTP Secure
    • 由网景公司于1994年首次提出
    • image-20230531163327250
    • HTTPS的默认端口号443(HTTP是80)
SSL/TLS
  • HTTPS是在HTTP的基础上使用SSL/TLS来加密报文,对窃听和中间人攻击提供合理的防护
  • SSL/TLS也可以用在其他协议上,比如
    • FTP——> FTPS
    • SMTP——> SMTPS
  • TLS(Transport Layer Security),译为:传输层安全性协议
    • 前身是SSL(Secure Sockets Layer),译为:安全套接层
  • 历史版本信息
    • SSL 1.0:因存在严重的安全漏洞,从未公开过
    • SSL 2.0:1995年,已于2011年弃用(RFC 6176)
    • SSL 3.0:1996年,已于2015年弃用(RFC 7568)
    • TLS 1.0:1999年(RFC 2246)
    • TLS 1.1:2006年(RFC 4346)
    • TLS 1.2:2008年(RFC 5246)
    • TLS 1.3:2018年(RFC 8446)
    • 有没有发现:TLS的RFC文档编号都是以46结尾
  • SSL/TLS——工作在哪一层
    • image-20230531174352097
  • OpenSSL
    • OpenSSL是SSL/TLS协议的开源实现,始于1998年,支持Windows,Mac,Linux等平台。
    • Linux、Mac一般自带OpenSSL
    • Windows下载安装OpenSSL:https://slproweb.com/products/Win32OpenSSL.html
    • 常用命令
      • 生成私钥:openssl genrsa -out mj.key
      • 生成公钥:openssl rsa -in mj.key -pubout -out mj.pem
    • 可以使用OpenSSL构建一套属于自己的CA,自己给自己颁发证书,称为“自签名证书”
  • HTTPS的成本
    • 证书的费用
    • 加解密计算
    • 降低了访问速度
    • 有些企业的做法是:包含敏感数据的请求才使用HTTPS,其他保持使用HTTP

HTTPS的通信过程

  • 总的来说可以分为三大阶段
    • TCP的三次握手
    • TLS的连接
    • HTTP请求和响应
  • image-20230903171402643
  • Client Hello
    • 客户端发给服务器
    • TLS的版本号
    • 支持的加密组件(Cipher Suite)列表
      • 加密组件是指所使用的加密算法及密钥长度等
    • 一个随机数(Client Random)

image-20230903173140677

image-20230903173314689

  • Server Hello
    • TLS的版本号
    • 选择的加密组件
      • 是从接收到的客户端加密组件列表中挑选出来的
      • image-20230903202833095
    • 一个随机数(Server Random)
  • Certificate
    • 服务器的公钥证书(被CA签名过的)
    • image-20230903203158161
    • image-20230903203145533
  • Server Key Exchange
    • 用以实现ECDHE算法的其中一个参数(Sever Params)
    • ECDHE是一种密钥交换算法
    • image-20230903203519024
  • Server Hello Done
    • 告知客户端:协商部分结束
    • image-20230903203623790
    • 目前为止,客户端和服务器之间通过明文共享了
      • Client Random、Server Random、Server Params
    • 而且,客户端也已经拿到了服务器的公钥证书,接下来,客户端会验证证书的真实有效性
  • Client Key Exchange
    • 用以实现ECDHE算法的另一个参数(Client Params)
    • image-20230903204153482
    • 目前为止,客户端和服务器都拥有了ECDHE算法的两个参数:Server Params、Client Params
    • 客户端和服务器哦都可以使用ECDHE算法
      • 根据Server Params、Client Params计算出一个新的随机密钥串:Pre-master secret
      • 然后结合Server Random、Client Random、Pre-master secret生成用以加密会话的会话密钥
  • Change Cipher Spec
    • 告知服务器:之后的通信会采用计算出来的会话密钥进行加密
    • image-20230903204808949
  • Finshed
    • 包含连接至今全部报文的整体校验值(摘要),加密之后发送给服务器
    • 这次握手协商是否成功,要以服务器是否能够正确解密该报文作为判定标准
    • image-20230903205140273
  • Change Cipher Spec,Finshed
    • image-20230903205241444
    • image-20230903205306418
    • 到此为止,客户端服务器都验证加密解密没问题,握手正式结束
    • 后面开始传输加密的HTTP请求和响应
    • 服务端和客户端的Finished报文交换完毕之后,SSL连接就算建立完成。当然,通信会收到SSL的保护。从此处开始进行应用层协议的通信,即发送HTTP请求

HTTPS证书主要有三种类型:CA证书、中间证书和服务器证书。CA证书(也被称为根证书)是负责签发其他证书的证书。中间证书用于构建证书链,连接用户和服务器,增加传输信息的安全性。服务器证书则用于确保服务器身份的真实性,防止数据被篡改或窃取。

CA签发过程包括几个步骤。首先,CA会对申请者提交的公开密钥进行审核,确认申请者的身份和权限。然后,CA会使用自己的私钥将公开密钥和其他信息一起加密,生成数字证书。这个证书包含了申请者的公开密钥、申请者的名称以及其他相关信息,还有CA的签字信息。最后,CA会将数字证书发送给申请者。

证书链是指从服务器证书到根证书的证书链。这个链路保证了对根证书的信任将会传递到服务器证书,从而保证了对服务器身份的信任。在构建证书链的过程中,浏览器会对服务器发送的证书进行验证,确认其是否被授权使用特定的域名和端口号。如果证书链验证失败,浏览器会显示安全错误提示,阻止用户与该网站建立安全的连接。

证书

  • 密码学中的证书,全称叫公钥证书,跟驾驶证类似
    • 里面有姓名、邮箱等个人信息,以及此人的公钥
    • 并由认证机构(CA)施加数字签名
  • CA就是能够认定“公钥确实属于此人”并能够生成数字签名的个人或者组织
    • 有国际性组织,政府设立的组织
    • 有通过提供认证服务来盈利的企业
  • image-20230903211208723

Cookie

在客户端(浏览器)存储一些数据,存储到本地磁盘

服务器可以返回cookie给客户端去存储

Cookie是存储在用户浏览器中一段不超过4KB的字符串。它由一个名称(Name)、一个值(Value)和其他几个用于控制Cookie有效期、安全性、使用范围的可选属性组成

不同域名下的Cookie各自独立,每当客户端发起请求时,会自动把当前域名下的所有未过期的Cookie一同发送到服务器。

Cookie的几大特性:

  1. 自动发送
  2. 域名独立
  3. 过期时限
  4. 4KB限制

以下是Cookie的一些常见属性及其作用:

  1. Name:Cookie的名称,用于标识Cookie。
  2. Value:与Cookie名称相关联的值,用于存储特定信息。
  3. Domain:定义Cookie适用的域名。例如,如果设置为 “.example.com”,则Cookie将适用于该域的所有子域。
  4. Path:定义服务器上与Cookie相关联的路径。例如,如果设置为 “/”,则Cookie将适用于该域下的所有路径。
  5. Expires:定义Cookie的过期日期和时间。一旦过期,浏览器将不再发送该Cookie给服务器。可以使用绝对过期日期(如 “Mon, 25 Jul 2023 10:00:00 UTC”)或相对过期时间(如 “Thu, 18 Dec 2023 14:36:29 UTC”)。
  6. Max-Age:定义Cookie的相对过期时间(以秒为单位)。从创建时开始计算,当达到指定的秒数后,Cookie将过期。
  7. Secure:如果设置,则只有在使用加密(HTTPS)连接时才会发送Cookie。
  8. HttpOnly:如果设置,则JavaScript无法访问该Cookie,从而提高安全性。
  9. SameSite:该属性有助于控制当用户通过链接、表单提交等导航到另一个站点时,是否应发送Cookie。有三个可能的值:“Strict”,“Lax”,或 “None”。

Cookie在身份认证中的作用:

客户端第一次请求服务器的时候,服务器通过响应头的形式,向客户端发送一个身份认证的Cookie,客户端会自动将Cookie保存在浏览器中。随后,当客户端浏览器每次请求服务器的时候,浏览器会自动将身份认证的相关的Cookie,通过请求头的形式发送给服务器,服务器即可验明客户端的身份

Cookie不具有安全性:

由于Cookie是存储在浏览器中的,而且浏览器也提供了读写cookie的API,因此cookie很容易被伪造,不具有安全性,因此不建议服务器将重要的隐私数据,通过cookie的形式发送给浏览器。

Session

在服务器存储一些数据, 存储到内存中

HTTP2

HTTP2的升级,对于用户来说,是跨时代的。基于HTTP2,用户访问网页的速度会非常快!!!(充分利用带宽)

透明桥不支持,反向代理支持,透明代理在21版本之后支持

  1. HTTP2采用二进制格式来传输数据,而非HTTP1.X的文本格式。二进制协议解析起来更高效
    • 二进制格式分帧
      • 帧:HTTP/2数据通信的最小单位消息,是指HTTP/2中逻辑上的HTTP消息(例如请求、响应等)。消息由一个或多个帧组成流:存在于连接中的一个虚拟通道,它可以承载双向消息,且每个流都有唯一的证书ID。
  2. HTTP2采用一些头部压缩技术,减少在请求和响应头中重复携带的数据,降低网络负担
    • 在HTTP/1.x中,请求和响应中会重复携带一些不常改变、冗长的头数据,给网络带来负担
    • 在HTTP/2中,客户端和服务端使用“首部表”来跟踪和存储之前发送过的键值对
    • 相同的数据不再随着每次请求和响应发送。首部表在连接存续期间始终存在,由客户端和服务器共同渐进更新
    • 每个新的首部键值对,要么被追加到当前表的末尾,要么替换表中已存在的键值对
    • 可以简单地理解为:只发送差异数据,而不是全部发送,从而减少头部的信息量
  3. HTTP2采用服务器推送方式,主动向客户推送资源,提高页面加载效率
    • 服务器推送:服务端可以在发送页面HTML内容时,再主动推送一些其它资源,而不用等到浏览器解析到响应的位置时发起请求后再作响应
    • 例如:服务端可以主动把JS和CSS文件推送给客户端,而不需要客户端解析HTML时再发送这些请求
    • 不过,服务端的主动推送行为,客户端有权利选择是否要接收
    • 如果服务端推送的资源已被浏览器缓存过,浏览器可以通过发送RST_STREAM帧来拒收
  4. HTTP2采用多路复用机制,减少需要创建的连接数量,降低资源占用和性能消耗
    • 在HTTP1.x中如果想并发多个请求的话,必须使用多个TCP链接,但浏览器为了控制资源,会对单个域名有6-8个TCP链接的数量限制。而在HTTP2中:
      • 同域名下的所有通信,都在单个连接上完成
      • 单个连接可以承载任意数量的双向数据流
      • 数据流以消息的形式发送,而消息又由一个或多个帧组成(多个帧可以乱序发送,因为可以根据帧首部的流标识来重新组装)

果想并发多个请求的话,必须使用多个TCP链接,但浏览器为了控制资源,会对单个域名有6-8个TCP链接的数量限制。而在HTTP2中:
- 同域名下的所有通信,都在单个连接上完成
- 单个连接可以承载任意数量的双向数据流
- 数据流以消息的形式发送,而消息又由一个或多个帧组成(多个帧可以乱序发送,因为可以根据帧首部的流标识来重新组装)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

游子无寒衣

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

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

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

打赏作者

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

抵扣说明:

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

余额充值