1. https介绍
    1.  因为HTTP是明文传输,所以不安全,容易被黑客窃听或窜改;
    2. 通信安全必须同时具备机密性、完整性,身份认证和不可否认这四个特性
    3. HTTPS的语法、语义仍然是HTTP,但把下层的协议由TCP/IP换成了SSL/TLS;
    4. SSL/TLS是信息安全领域中的权威标准,采用多种先进的加密技术保证通信安全;  OpenSSL是著名的开源密码学工具包,是SSL/TLS的具体实现。
  2. 对称加密和非对称加密
    1. “对称加密”很好理解,就是指加密和解密时使用的密钥都是同一个
    2. 非对称加密(也叫公钥加密算法)。它有两个密钥,一个叫“公钥”(public    key),一个叫“私钥”(private    key)。两个密钥是不同 的,“不对称”,公钥可以公开给任何人使用,而私钥必须严格保密。
    1. 加密算法的核心思想是“把一个小秘密(密钥)转化为一个大秘密(密文消息)”,守住了小秘密,也 就守住了大秘密;
    2. 对称加密只使用一个密钥,运算速度快,密钥必须保密,无法做到安全的密钥交换,常用的有AES和 ChaCha20;
    3. 非对称加密使用两个密钥:公钥和私钥,公钥可以任意分发而私钥保密,解决了密钥交换问题但速度 慢,常用的有RSA和ECC;
    4. 把对称加密和非对称加密结合起来就得到了“又好又快”的混合加密,也就是TLS里使用的加密方式。
  3. 数字签名与证书
    1. 摘要算法用来实现完整性,能够为数据生成独一无二的“指纹”,常用的算法是SHA-2; 
    2. 数字签名是私钥对摘要的加密,可以由公钥解密后验证,实现身份认证和不可否认;
    3. 公钥的分发需要使用数字证书,必须由CA的信任链来验证,否则就是不可信的;
    4. 作为信任链的源头CA有时也会不可信,解决办法有CRL、OCSP,还有终止信任。
  4. https连接
    1.     HTTPS协议会先与服务器执行TCP握手,然后执行TLS握手,才能建立安全连接;
    2. 握手的目标是安全地交换对称密钥,需要三个随机数,第三个随机数“Pre-Master”必须加密传输,绝 对不能让黑客破解;
    3. “Hello”消息交换随机数,“Key    Exchange”消息交换“Pre-Master”;
    4. Change    Cipher    Spec”之前传输的都是明文,之后都是对称密钥加密的密文。
  5. TLS1.3
    1. 为了兼容1.1、1.2等“老”协议,TLS1.3会“伪装”成TLS1.2,新特性在“扩展”里实现; 
    2.  1.1、1.2在实践中发现了很多安全隐患,所以TLS1.3大幅度删减了加密算法,只保留了ECDHE、AES、 ChaCha20、SHA-2等极少数算法,强化了安全;
    3. TLS1.3也简化了握手过程,完全握手只需要一个消息往返,提升了性能
  6. HTTPS的优化
    1. 可以有多种硬件和软件手段减少网络耗时和计算耗时,让HTTPS变得和HTTP一样快,最可行的是软件优化;
    2.   应当尽量使用ECDHE椭圆曲线密码套件,节约带宽和计算量,还能实现“False    Start”;
    3. 服务器端应当开启“OCSP    Stapling”功能,避免客户端访问CA去验证证书;
    4. 会话复用的效果类似Cache,前提是客户端必须之前成功建立连接,后面就可以用“Session ID”“Session    Ticket”等凭据跳过密钥交换、证书验证等步骤,直接开始加密通信
  7. http2
    1. HTTP协议取消了⼩版本号,所以HTTP/2的正式名字不是2.0;
    2. HTTP/2在“语义”上兼容HTTP/1,保留了请求⽅法、URI等传统概念;
    3. .HTTP/2使⽤“HPACK”算法压缩头部信息,消除冗余数据节约带宽;
    4. HTTP/2的消息不再是“Header+Body”的形式,⽽是分散为多个⼆进制“帧”;
    5. HTTP/2使⽤虚拟的“流”传输消息,解决了困扰多年的“队头阻塞”问题,同时实现了“多路复⽤”, 提⾼连接的利⽤率;
    6. HTTP/2也增强了安全性,要求⾄少是TLS1.2,⽽且禁⽤了很多不安全的密码套件。
    7. HTTP/2在⼀个连接上使⽤多个流收发数据,那么它本⾝默认就会是⻓连接,所以永远不需 要“Connection”头字段(keepalive或close)。
    8. 1.HTTP/2必须先发送⼀个“连接前⾔”字符串,然后才能建⽴正式连接;
    9. HTTP/2废除了起始⾏,统⼀使⽤头字段,在两端维护字段“Key-Value”的索引表,使⽤“HPACK”算 法压缩头部;
    10. HTTP/2把报⽂切分为多种类型的⼆进制帧,报头⾥最重要的字段是流标识符,标记帧属于哪个流;
    11. .流是HTTP/2虚拟的概念,是帧的双向传输序列,相当于HTTP/1⾥的⼀次“请求-应答”;
    12. 在⼀个HTTP/2连接上可以并发多个流,也就是多个“请求-响应”报⽂,这就是“多路复⽤”
  8. HTTP/2的流
    1. 流是可并发的,⼀个HTTP/2连接上可以同时发出多个流传输数据,也就是并发多请求,实现“多路复 ⽤”;
    2. .客⼾端和服务器都可以创建流,双⽅互不⼲扰
    3. .流是双向的,⼀个流⾥⾯客⼾端和服务器都可以发送或接收数据帧,也就是⼀个“请求-应答”来回;
    4. 流之间没有固定关系,彼此独⽴,但流内部的帧是有严格顺序的;
    5. .流可以设置优先级,让服务器优先处理,⽐如先传HTML/CSS,后传图⽚,优化⽤⼾体验;
    6. .流ID不能重⽤,只能顺序递增,客⼾端发起的ID是奇数,服务器端发起的ID是偶数; 7.在流上发送“RST_STREAM”帧可以随时终⽌流,取消接收或发送;
    7. .第0号流⽐较特殊,不能关闭,也不能发送数据帧,只能发送控制帧,⽤于流量控制。
    8. 客⼾端在⼀个连接⾥最多只能发出2^30,也就是10亿个请求
  9. HTTP/3综合了我们之前讲的所有技术(HTTP/1、SSL/TLS、HTTP/2),包含知识点很多,⽐如队头阻塞、 0-RTT握⼿、虚拟的“流”、多路复⽤,算得上是“集⼤成之作”
    1. HTTP/3基于QUIC协议,完全解决了“队头阻塞”问题,弱⽹环境下的表现会优于HTTP/2;
    2. .QUIC是⼀个新的传输层协议,建⽴在UDP之上,实现了可靠传输
    3. .QUIC内含了TLS1.3,只能加密通信,⽀持0-RTT快速建连;
    4. .QUIC的连接使⽤“不透明”的连接ID,不绑定在“IP地址+端⼝”上,⽀持“连接迁移”;
    5. QUIC的流与HTTP/2的流很相似,但分为双向流和单向流;
    6. .HTTP/3没有指定默认端⼝号,需要⽤HTTP/2的扩展帧“Alt-Svc”来发现。
 

随机推荐

  1. python计算矩阵均匀分布程度

    计算N×M(建议维度大于100*100)的0,1矩阵均匀分布程度,值由0到1表示不均匀到均匀 import numpy as np def make_rand_matrix(side=20): # 制 ...

  2. day19__生成器,迭代器

    一.列表解析 l1 = ['鸡蛋%s' % i for i in range(10) if i > 5] print(l1) # ['鸡蛋6', '鸡蛋7', '鸡蛋8', '鸡蛋9'] 这种方 ...

  3. 线性表的顺序存储和链式存储c语言实现

    一.线性表的顺序存储 typedef int ElemType;typedef struct List { ElemType *data;//动态分配 ,需要申请空间 int length; }Lis ...

  4. 阿里P7岗位面试,面试官问我:为什么HashMap底层树化标准的元素个数是8

    前言 先声明一下,本文有点标题党了,像我这样的菜鸡何德何能去面试阿里的P7岗啊,不过,这确实是阿里p7级岗位的面试题,当然,参加面试的人不是我,而是我部门的一个大佬.他把自己的面试经验分享给了我,也让 ...

  5. fastjson到底做错了什么?为什么会被频繁爆出漏洞?

    GitHub 15.8k Star 的Java工程师成神之路,不来了解一下吗! GitHub 15.8k Star 的Java工程师成神之路,真的不来了解一下吗! GitHub 15.8k Star ...

  6. HDU 4352 XHXJ's LIS HDU(数位DP)

    HDU 4352 XHXJ's LIS HDU 题目大意 给你L到R区间,和一个数字K,然后让你求L到R区间之内满足最长上升子序列长度为K的数字有多少个 solution 简洁明了的题意总是让人无从下 ...

  7. CentOS7下安装和配置SVN

    1. 由于是在CentOS7最小化安装的操作系统环境安装SVN,我们首先排除一些环境因素.在此首先关闭了防火墙,安装了vim文本编辑工具.   2. 使用yum install -y subversi ...

  8. postman 进阶技巧

    cookie 清除缓存 code 生成接口自动化测试脚本 响应部分 pretty 响应以json或xml显示 raw 响应以文本显示 preview 以HTML网页行驶显示 断言 断言:用于判断接口请 ...

  9. 玩转 Windows Terminal

    今天给大家分享一下Windows Terminal的使用及个性化定制. 一.安装 该项目的开源地址为https://github.com/microsoft/terminal,如果想折腾,可以按照上面 ...

  10. python虚拟环境 + 批量pip + 换源

    python虚拟环境 + 批量pip + 换源 虚拟环境 曾经我是一个小白,不管运行什么项目都用一个环境,后来项目多了,有的是Django1.11的有的是Django2的,有的项目只能在3.6上运行, ...