HTTP1.0

  1. 默认使用短链接
  2. 队列头阻塞

HTTP1.1

  1. 支持长连接
  2. 支持http管道。客户端可以不用等待前一个请求连续发送请求,但是服务端必须按顺序返回客户端请求结果

HTTP2.0

  1. 基于二进制传输,之前是基于文本
  2. Header压缩
  3. 支持服务端Push
  4. 多路复用。一个TCP链接中存在多个流…

HTTP&HTTPS

  1. 端口不同
  2. 安全性和资源不同。HTTP明文传输,无法验证身份。HTTPS加密传输,消耗更多资源。HTTPS是基于SSL/TLS。

HTTPS流程

分为1. 协商、2. 加密、 3. 通信三个阶段
总共需要4次握手
参考

  1. 首先建立TCP连接
  2. 客户端发送TLS版本号、加密套件列表、客户端生成的随机数给服务器(服务器响应ACK)
  3. 服务器发送服务器端的TLS版本号、加密套件列表、服务器端生成的随机数给客户端
  4. 服务端发送证书给客户端
  5. 服务器发送 hello done 给客户端代表协商阶段结束。

————————

  1. 客户端对证书进行校验,如果校验失败,则通信结束。通过后,取出证书中的公钥,将客户端生成的另一个随机数发送给服务器。客户端将上述三个随机数利用算法生成对称加密的密钥。服务器收到后利用私钥解密,也可以获得第三个随机数,然后利用算法生成一样的对称加密密钥;
  2. 客户端发送变更加密模式的请求,然后将之前发送的消息做成摘要,再用密钥加密后发给服务器校验。
  3. 服务器也发送变更加密模式的请求,然后将之前发送的消息做成摘要,用密钥加密后发给客户端校验。

    协商

  4. 客户端发送连接请求,包含客户端支持的SSL版本、加密套件等信息,还有一个随机数A。

  5. 服务端接收到后返回三个响应信息:
    1. 服务端支持的SSL版本、加密套件以及随机数B
    2. 服务端的公钥证书
    3. 返回协商结束

加密阶段

  1. 客户端对服务端证书进行校验。校验不通过就结束通信,校验通过,客户端会发送一个使用公钥加密的随机密码串。
  2. 发送Change Cipher Spec报文,告知服务端,客户端已经切换到之前协商好的加密套件状态。
  3. 然后发送Finished报文,将至今全部的报文计算的Hash值传给服务器校验。

  1. 服务器收到之后,使用私钥解密,获得随机密码串。然后发送Change Cipher Spec报文。
  2. 然后服务器同样发送Finished报文,供客户端校验。

Finished报文交换完毕,SSL连接就建立完成了。之后就进行HTTP通信。

三个随机数的作用

客户端:
使用随机数A+B+随机密码串,用DH算法算出一个master secret,然后推算出hash secret 和 session secret

服务端:
拿到客户端的随机密码串之后,也可以解析出hash secret 和 session secret。

hash secret 用于保证数据没有被篡改, session secret用于保证数据的完整性。
hash secret对HTTP报文进行运算生成MAC,附在报文后面,再用session secret加密,再发送。

RSA加密的问题

最后的随机数是使用公钥加密的,所以只要服务器的私钥被泄漏,之前被截获的数据都可以被解开了

非对称加密的公钥加密和私钥加密的使用场景

注意:公钥分给了客户端,私钥保存在服务器

公钥加密(私钥解密)

用于客户端向服务器发送信息

私钥加密(公钥解密)

用于服务端发布签名,证明私钥被保存在服务端手中。

客户端验证证书

image.png

  1. 证书生成(证书是在CA上生成的,不是服务端生成的)
    1. 服务端对证书内容生成Hash值,然后用CA私钥加密生成签名
  2. 客户端验证
    1. 客户端也对证书计算Hash得到一个Hash值
    2. 客户端使用CA公钥对签名解密,获得另一个Hash值,对比如果相同代表不可信,如果不同代表证书不可信。

破坏证书的唯一方法就是获得私钥,更改哈希值和加密结果,但是这一步成功了也就代表服务器不可靠。

证书链

证书可能存在多级,构成一个链。通常使用上级证书的公钥去验证下一级证书是否可信(解密下一级证书的密钥,进行上述的对比流程)。所以最主要的是根证书。
注意:从CA申请到的证书会包含对应的私钥,所以证书链,可以用上级机构的公钥去解密下级机构

当个人或者机构需要证书的时候,需要找CA机构申请证书,通常向CA机构发送一个证书请求文件CSR(Certificate Signing Request),这个文件和正式的证书主要差别是没有签名,主要包含你是谁(Subject)和公钥等信息。 CA机构收到请求后,需要核实申请人的信息,核实无误后,就会用自己的私钥给待申请的证书签名,签名和证书的公钥以及Subject等信息一起打包(X.509格式)后,就是一张合法的证书。 申请人拿到证书后,就可以把这张证书和对应的私钥一起部署到自己的服务器上并启用HTTPS,浏览器发出HTTPS请求的时候,服务端就会把这张合法的证书推送给浏览器,浏览器接收后会进行一系列的校验

证书的内容

  1. 公钥
  2. 持有者信息
  3. 证书认证机构(CA)的信息
  4. CA对该文件的数字签名,及使用的算法
  5. 证书有效期
  6. 其他信息

常用加密算法

签名算法

  1. MD5算法,不论多长的数据都会输出128bits串
  2. SHA1算法
  3. HMAC算法,需要持有相同的key,才能得到一样的消息摘要

    对称加密

    以下都是块加密算法

  4. AES

  5. DES
  6. 3DES

    非对称

  7. RSA

  8. ECC