• 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中:
    - 同域名下的所有通信,都在单个连接上完成
    - 单个连接可以承载任意数量的双向数据流
    - 数据流以消息的形式发送,而消息又由一个或多个帧组成(多个帧可以乱序发送,因为可以根据帧首部的流标识来重新组装)

  • 相关阅读:
    web服务器及IDEA部署Tomcat服务器
    华为OD 高效的任务规划(200分)【java】A卷+B卷
    ISE网表逆向分析与使用技巧
    springboot上传文件
    Windows下的Hadoop(个人附加,有需要的看看,当个参考)
    [附源码]计算机毕业设计-菜篮子系统Springboot程序
    腾讯云服务器可用区是什么意思?可用区选择方法
    TEINet: Towards an Efficient Architecture for Video Recognition 论文阅读
    刷题错题录2-向上取整、三角形条件、字符串拼接匹配、三数排序思路
    Java 性能优化之直接使用成员变量 VS 拷贝副本
  • 原文地址:https://blog.csdn.net/weixin_52180702/article/details/132825970