HTTP1.0
- 默认使用短链接
- 队列头阻塞
HTTP1.1
- 支持长连接
- 支持http管道。客户端可以不用等待前一个请求连续发送请求,但是服务端必须按顺序返回客户端请求结果
HTTP2.0
- 基于二进制传输,之前是基于文本
- Header压缩
- 支持服务端Push
- 多路复用。一个TCP链接中存在多个流…
HTTP&HTTPS
- 端口不同
- 安全性和资源不同。HTTP明文传输,无法验证身份。HTTPS加密传输,消耗更多资源。HTTPS是基于SSL/TLS。
HTTPS流程
分为1. 协商、2. 加密、 3. 通信三个阶段
总共需要4次握手
参考
- 首先建立TCP连接
- 客户端发送TLS版本号、加密套件列表、客户端生成的随机数给服务器(服务器响应ACK)
- 服务器发送服务器端的TLS版本号、加密套件列表、服务器端生成的随机数给客户端
- 服务端发送证书给客户端
- 服务器发送 hello done 给客户端代表协商阶段结束。
————————
- 客户端对证书进行校验,如果校验失败,则通信结束。通过后,取出证书中的公钥,将客户端生成的另一个随机数发送给服务器。客户端将上述三个随机数利用算法生成对称加密的密钥。服务器收到后利用私钥解密,也可以获得第三个随机数,然后利用算法生成一样的对称加密密钥;
- 客户端发送变更加密模式的请求,然后将之前发送的消息做成摘要,再用密钥加密后发给服务器校验。
服务器也发送变更加密模式的请求,然后将之前发送的消息做成摘要,用密钥加密后发给客户端校验。
协商
客户端发送连接请求,包含客户端支持的SSL版本、加密套件等信息,还有一个随机数A。
- 服务端接收到后返回三个响应信息:
- 服务端支持的SSL版本、加密套件以及随机数B
- 服务端的公钥证书
- 返回协商结束
加密阶段
- 客户端对服务端证书进行校验。校验不通过就结束通信,校验通过,客户端会发送一个使用公钥加密的随机密码串。
- 发送Change Cipher Spec报文,告知服务端,客户端已经切换到之前协商好的加密套件状态。
- 然后发送Finished报文,将至今全部的报文计算的Hash值传给服务器校验。
- 服务器收到之后,使用私钥解密,获得随机密码串。然后发送Change Cipher Spec报文。
- 然后服务器同样发送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加密的问题
最后的随机数是使用公钥加密的,所以只要服务器的私钥被泄漏,之前被截获的数据都可以被解开了
非对称加密的公钥加密和私钥加密的使用场景
公钥加密(私钥解密)
私钥加密(公钥解密)
客户端验证证书
- 证书生成(证书是在CA上生成的,不是服务端生成的)
- 服务端对证书内容生成Hash值,然后用CA私钥加密生成签名
- 客户端验证
- 客户端也对证书计算Hash得到一个Hash值
- 客户端使用CA公钥对签名解密,获得另一个Hash值,对比如果相同代表不可信,如果不同代表证书不可信。
破坏证书的唯一方法就是获得私钥,更改哈希值和加密结果,但是这一步成功了也就代表服务器不可靠。
证书链
证书可能存在多级,构成一个链。通常使用上级证书的公钥去验证下一级证书是否可信(解密下一级证书的密钥,进行上述的对比流程)。所以最主要的是根证书。
注意:从CA申请到的证书会包含对应的私钥,所以证书链,可以用上级机构的公钥去解密下级机构
当个人或者机构需要证书的时候,需要找CA机构申请证书,通常向CA机构发送一个证书请求文件CSR(Certificate Signing Request),这个文件和正式的证书主要差别是没有签名,主要包含你是谁(Subject)和公钥等信息。 CA机构收到请求后,需要核实申请人的信息,核实无误后,就会用自己的私钥给待申请的证书签名,签名和证书的公钥以及Subject等信息一起打包(X.509格式)后,就是一张合法的证书。 申请人拿到证书后,就可以把这张证书和对应的私钥一起部署到自己的服务器上并启用HTTPS,浏览器发出HTTPS请求的时候,服务端就会把这张合法的证书推送给浏览器,浏览器接收后会进行一系列的校验
证书的内容
- 公钥
- 持有者信息
- 证书认证机构(CA)的信息
- CA对该文件的数字签名,及使用的算法
- 证书有效期
- 其他信息