【计算机网络 - 基础问题】每日 3 题(十七)
✍个人博客:Pandaconda-CSDN博客
📣专栏地址:http://t.csdnimg.cn/fYaBd
📚专栏简介:在这个专栏中,我将会分享 C++ 面试中常见的面试题给大家~
❤️如果有收获的话,欢迎点赞👍收藏📁,您的支持就是我创作的最大动力💪
📝推荐参考地址:https://www.xiaolincoding.com/(这个大佬的专栏非常有用!)
49. Charles 抓取 HTTPS 流程
- 客户端向服务器发起 HTTPS 请求
- Charles 拦截客户端的请求,伪装成客户端向服务器进行请求
- 服务器向 “客户端”(实际上是 Charles)返回服务器的 CA 证书
- Charles 拦截服务器的响应,获取服务器证书公钥,然后自己制作一张证书,将服务器证书替换后发送给客户端。(这一步,Charles 拿到了服务器证书的公钥)
- 客户端接收到 “服务器”(实际上是 Charles)的证书后,生成一个对称密钥,用 Charles 的公钥加密,发送给 “服务器”(Charles)
- Charles 拦截客户端的响应,用自己的私钥解密对称密钥,然后用服务器证书公钥加密,发送给服务器(这一步,Charles 拿到了对称密钥)
- 服务器用自己的私钥解密对称密钥,向 “客户端”(Charles)发送响应
- Charles 拦截服务器的响应,替换成自己的证书后发送给客户端
- 至此,连接建立,Charles 拿到了服务器证书的公钥和客户端与服务器协商的对称密钥,之后就可以解密或者修改加密的报文了。
简单来说,就是 Charles 作为中间人代理,拿到了服务器证书公钥和 HTTPS 连接的对称密钥,前提是客户端选择信任并安装 Charles 的 CA 证书,否则客户端就会 “报警” 并中止连接。这样看来,HTTPS 还是很安全的。
50. 如何避免被中间人抓取数据?
我们要保证自己电脑的安全,不要被病毒乘虚而入,而且也不要点击任何证书非法的网站,这样 HTTPS 数据就不会被中间人截取到了。
当然,我们还可以通过 HTTPS 双向认证来避免这种问题。
一般我们的 HTTPS 是单向认证,客户端只会验证了服务端的身份,但是服务端并不会验证客户端的身份。
51. HTTP/1.1 相比 HTTP/1.0 提高了什么性能?
HTTP/1.1 相比 HTTP/1.0 性能上的改进:
- 使用长连接的方式改善了 HTTP/1.0 短连接造成的性能开销。
- 支持管道(pipeline)网络传输,只要第一个请求发出去了,不必等其回来,就可以发第二个请求出去,可以减少整体的响应时间。
但 HTTP/1.1 还是有性能瓶颈:
- 请求 / 响应头部(Header)未经压缩就发送,首部信息越多延迟越大。只能压缩 Body 的部分;
- 发送冗长的首部。每次互相发送相同的首部造成的浪费较多;
- 服务器是按请求的顺序响应的,如果服务器响应慢,会招致客户端一直请求不到数据,也就是队头阻塞;
- 没有请求优先级控制;
- 请求只能从客户端开始,服务器只能被动响应。