http 学习记录 之 (二)

请求/响应报文
  1. 请求行 也叫 起始行 以空格进行分割 比如 GET / HTTP1.0 代表以get请求的形式请求服务器根目录下的文件 其中http的版本是 1.0
  2. 状态行 这里就是服务器响应的头部 比如 HTTP/1.1 200 OK 版本是1.0 状态吗是200 状态描述是OK
  3. 请求头/响应头 比如 Host 字段 只能出现在请求头里 代表要访问的主机地址 User-Agent 只能出现在请求头里 Date通常出现在响应头里 代表更新的时间 客户端好做缓存
  4. 加上一个空行 之后 就可以跟上http的body数据了
http有哪些特点
  1. 灵活可扩展的协议
  2. 可靠传输
  3. 应用层协议
  4. 请求应答模式
  5. 无状态 例如不记录客户端的状态 这次请求和下次请求都需要传校验信息
    每个请求都是相互独立的
http的链接管理
  1. http 0.9 1.0 都是采用的短链接 就是一次交互建立一个链接 使用完立即关掉 这里TCP的链接也要每次都经历 三次握手 四次挥手
  2. 长链接 一次链接之后就可以共用这个链接
  3. 队头阻塞 一个链接的串行 如果有一个执行时间长 那么后边的就会阻塞
  4. 性能优化 解决 队头阻塞的问题 第一种办法 客户端创建多个http 链接。但也不能太多 会影响服务器的性能 第二种办法 域名分片 这个是扩大客户端链接数的办法 比如一个域名 浏览器限制了 6个链接 那么多个域名指向同一个服务器 就可以让浏览器有多个链接。
什么是安全
  1. 机密性
  2. 完整性
  3. 身份认证
  4. 不可否认
什么是https
  1. 把http的下层协议变成了SSL/TLS现在叫TLS的居多 传输层安全 然后才是TCP/IP
  2. 密码套件 浏览器和服务器在使用TLS建立连接时需要选择一组恰当的加密算法来实现安全通信,这些算法的组合成为密码套件 例如其中一个加密算法 ECDHE-RSA-AES256-GCM-SHA384 意思是说 使用ECDHE算法进行密钥交换 使用RSA进行签名和身份认证 握手后使用AES对称算法 密钥长度是256 分组模式是GCM 摘要算法是SHA384 用于消息认证和产生随机数
对称加密
  1. 加密和解密使用的是同一套密钥 常用的有AES 和 ChaCha20
  2. 分组模式 让算法用固定长度的密钥加密任意长度的明文 把明文转换成密文 例如AES128-CBC 采用AES对称加密 分组模式CBC 密钥长度是128位
非对称加密
  1. 加密和解密使用的不是同一个密钥 一个是公钥 一个是私钥 用公钥加密的只能用私钥解密 用私钥加密的只能用公钥解密 非对称算法如rsa
  2. RSA 比较著名 基于整数分解 使用两个超大素数的乘积 作为生成密钥的材料
  3. ECC 是后起之秀基于椭圆曲线离散对数 子算法 ECDHE用于密钥交换 ECDSA 用于数字签名 比RSA 安全性 和 性能上高
混合加密

使用非对称加密方式进行密钥交换 使用对称加密的方式加密铭文 ,用公钥加密对称加密的密钥 然后服务端用私钥解密出对称加密的密钥

摘要算法

实现完整性的手段主要是摘要算法 一种特殊的单向加密算法 加密后的数据无法解密 不能从摘要推出原文 例如 SHA-2 算法

完整性
  1. 摘要算法保证了数字摘要和原文是完全等价的 只要在原文后附加上摘要 就能保证数据的完整性
  2. 必须建立在机密性之上 使用混合加密中的会话密钥 加密消息和摘要
数字签名

用来做身份认证和不可否认的 通信双方已经呼唤 具体做法是 用私钥加密摘要信息 由于私钥只能由公钥解密 所以既实现了完整性和身份认证 证明我就是我

数字证书和CA

解决 公钥信任问题 CA(证书认证机构)是可信的 不是黑客

HTTPS 建立连接

在https协议里 需要另外一个握手过程 在TCP上建立安全链接之后再收发http报文

TLS(1.2) 链接过程 ECDHE
  1. ClientHello 随机数C TLS 版本号 密码套件 -> 服务器 -> ACK
  2. ServerHello 随机数S 确认TLS版本号 和使用的密码套件(ECDHE)
  3. 服务端为了证明身份把证书发给客户端 同时把 密钥交换算法(ECDHE)的公钥发给客户端 在加上自己的私钥签名认证-> 客户端
  4. 此时 明文共享了三个信息 Client Random、Server Random 和 Server Params
  5. 客户端验证证书 并且根据密码套件 生成自己的公钥 并且把公钥也发给服务器
  6. 客户端和服务器拿到了密钥交换算法的两个参数 Client Params、Server Params 经过ECDHE算法 算出Pre-Master 前主密钥(其实就是一个随机数) 这个前主密钥 黑客是无法破解的
  7. 此时客户端和服务器手里有了三个随机数 Client Random、Server Random 和 Pre-Master 此时根据这三个值生成会话密钥 由于前主密钥不会泄漏 所以会话密钥 安全
  8. 会话密钥一旦产生 以后的交流就使用这个密钥 对称加密数据
客户端认证

此时用户名 密码 可以验证 再高端一点的 比如银行系统会用到U盾

TLS(1.3)握手过程

精简了 加密算法 简化了握手的过程

  1. TCP 链接建立之后 浏览器先发一个Client Hello
  2. 服务端收到后 返回ServerHello 和 随机数 主要多了扩展字段 key_share”扩展带上曲线和对应的公钥参数
  3. 这是交换了两条消息 服务端和客户端就共享了4个信息 Client Random 和 Server Random、Client Params 和 Server Params 两边都用 ECHDE 算法 一顿算 生成Pre-Master 再用 HKDF 生成主密钥“Master Secret”
RSA 握手 和 EDDHE 握手的区别
  1. EDDHE 算法更快 性能更好
  2. 生成前主密钥 RSA 是自己生成一个 然后用服务端的 公钥加密前主密钥 给到服务端 然后两端分别根据 randomS randomC 和 前主密钥 算出主密钥 EDDHE 是各自算出前主密钥和主密钥

总结

http 超文本传输协议 超文本就是例如音频 视频 文件文本等这些信心 传输 就是可以实现点对点的数据传递 协议 就是规定了书就该怎么传 比如 状态行。请求首部 请求body
http 是应用层协议 是建立在TCP/IP之上的 所以他也是可靠的传输 TCP/IP协议分别对应 传输层和网络层
http是明文传输 不安全 所以出现了https 也就是加密的http 其实就是多了一层 TLS 传输层安全 多加了一层协议
什么是安全 必须要满足 机密 数据完整 身份认证 不可否认
用对称加密和非对称加密保证机密性 摘要加密算法 保证完整性 签名算法 保证 身份认证 和 不可否认

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值