banner
Hi my new friend!

https/http

Scroll down
  • https加密的过程
  1. 客户端发起一个http请求,告诉服务器自己支持哪些hash算法
  2. 服务端把自己的信息以数字证书的形式返回给客户端(包括:密钥公钥,网站地址,证书颁发机构,生效日期)
  3. 客户端验证证书合法性(包括对比网站地址和当前地址,证书过期,验证数字签名(权威机构私钥加密,使用颁发机构的公钥解密(抵御中间人攻击的原因)))
  4. 生成随机密码(作为后续对称加密密钥).使用公钥加密,发给服务端,服务端使用私钥解密
  5. 生成对称加密算法.验证完服务端身份后,客户端生成一个对称加密算法,以公钥加密发送给服务端.之后客户端与服务端就可以用这个对称加密算法来加密和解密通信内容了
  • https如何防止重放攻击
    有两种重放:
  1. 重放请求: https通过序列号来解决的,客户端会维护一个从0开始的序列号,每一次https请求都会加1,并且该序列号会放到数据的某个位置 (MAC输入的内容是数据+序列号+MAC密钥).请求到服务端后,服务端可以通过序列号去筛除重放攻击的请求
  2. 重放连接: 通过不重数nouce解决. 不重数由客户端和服务器各自生成的不重数拼接而成。并通过不重数的参与来生成主密钥(Master Secret)。由此避免了多次重放攻击。
  • https如何防止中间人攻击

    中间人会怎么攻击,中间人做中间的代理.客户端与服务端不直接通信
    中间人劫持服务端返回的公钥,并保存与服务端通信(伪装成自己是服务器的客户端),并将自己的公钥伪装为服务器的发送给客户端(伪装成自己是客户端的服务器)
    如此,中间人劫持了服务端与客户端的通信,可以在中间做手脚.
    https如何解决的?
    CA证书保证客户端拿到的公钥是服务端的(即如果中间公钥被换了客户端可以察觉)
    在服务端返回的证书中,有一个成分(权威机构的签名(是通过权威机构的密钥加密的)),客户端拿到后会验证这个成分(通过权威机构的公钥解密).
    而这个也就是中间人所不能伪装的,因为需要权威机构的私钥加密,中间人不会有的.
    中间人不动签名部分只修改内容呢? 证书中的内容做HASH,结果会加密放到签名中, 如果内容被修改了,客户端对内容重做HASH得到的结果就与之前不同(即与通过公钥解密签名得到的hash值不同)

  • CA证书的签发流程

  1. 申请证书:
    服务器带着自己的信息(包括国家,域名,组织名,邮箱,公钥等)去CA(电子商务认证中心)申请
  2. 审核
  • http各个版本:
    http0.9 -> http1.0 -> http1.1 -> http2.0 -> http3.0
  1. http0.9:过于古早,只支持GET请求,没有请求头没有响应头,只支持返回html字符串; 无状态,短连接
  2. http1.0:添加了POST,HEADER请求,有请求头响应头,支持多种返回类型,对应的在响应头里有content-type; 无状态,短连接(无法复用连接,队头阻塞)
  3. http1.1:新增了PUT,DELETE请求,新增keep-alive默认长连接,管道化(可以不等上一个请求响应就发送),新增cache-controller控制缓存,新增断点传输的能力
  4. http2: 二进制分帧(更精细,之前是文本分),头部压缩(维护头部字典,每次传输差量更新),多路复用
  5. http3.0: 引入QUIC协议(可靠的udp)
其他文章