关于Charles代理的问题:涉及CA证书认证问题

问题

Charles在进行代理时是如何拦截请求,其内在逻辑是啥?

同步认知:前提描述
首先,我们先理解一下浏览器和服务器的通信过程

  1. 开发网站后,会向证书认证机构申请一份证书
  2. 然后认证机构会将证书(包含公钥和企业信息)发给你
  3. 然后你将这份公钥和证书配置到你的服务器中。
  4. 客户端向你发送请求
  5. 服务器将配置的公钥和证书发送出去
  6. 然后客户端收到公钥后,会对公钥进行验证,通过浏览器缓存或者送往认证机构
  7. 如果通过认证后,就会用这个公钥去加密一个请求,里面携带着客户端内部生成的对称密钥,发送给服务器。
  8. 这里因为有了公钥认证环节,导致黑客无法用自己的公钥进行掉包,从请求上杜绝了黑客环节。

但是这里便有一个问题:如果黑客也申请了一个正规的证书和公钥,那么它拿着这个公钥去进行替换,能否通过认证? 这个问题很重要,因为同样影响到Charles代理,因为Charles代理同样需要配置一个CA证书。

解答了这个问题后
如果浏览器本身并不能区分公钥的特殊性(即对应服务器的公钥),只能区分公钥是否是真的(是否是从认证机构中申请得来),那么我觉得压根就无法阻绝黑客。

如果浏览器可以识别公钥的特殊性,那么是如何识别的呢?(这个其实就是上面的前置问题)

最后一个问题:
Charles代理时需要配置CA证书,其运行逻辑是像黑客一样,即浏览器实际上是在跟服务器在通信,只是Charles像黑客一样在中间掉包请求,从而能获取与解密请求的内容:这种情况下,需要解释Charles是如何做到破译的。

第二种情况是,浏览器虽然最终通信结果是和服务器在通信,但实际上,浏览器是与Charles进行通信,而Charles又与服务器进行通信,他们都知道是在和谁通信,即确确实实存在两段通信,只是说Charles会将浏览器的请求内容,发送给服务器,又将服务器的内容发送给浏览器。

那么到底是哪种情况呢?
如果是第一种情况存在请求的拦截解密,通信实际上是在双方展开的
如果是第二种情况实际上并不存在黑客行径,只是作为信息中转而已,通信则是在三方展开