@
serge001 @
linhua 也不能说看不到 HTTPS 里面的明文,而是客户端会提示风险,中间人就被发现了。
HTTPS 的原理大概如下:
1. 浏览器有一个受信的根证书列表
2. CA 们用这些根证书签发域名证书给网站
3. 网站用域名证书的私钥把 http 传输的内容加密,并连同公钥一起传给浏览器
4. 浏览器检查公钥是否由受信任的根证书签发
5. 如果公钥确实由受信任的根证书签发,则继续检查域名与证书是否匹配
6. 如果都没问题,则用公钥解密并显示内容
以上是个精简版的步骤,其实还有有效期、吊销列表等检查,暂且不表。
如果第 4 步有问题,则浏览器会提示“此网站出具的安全证书不是由受信任的证书颁发机构颁发的”。因为很多企业的内部系统会使用自签发证书,所以用户可以选择将根证书加入受信任列表,以后就不会再提示了。
如果第 5 步有问题,则浏览器会提示“安全证书上的名称无效,或者与站点名称不匹配”。
所以,如果你想做“中间人”,就必须在第 4 步之前截获数据,然后用正版的证书解密内容,就好像你是发出请求的那个浏览器一样。然后再用盗版证书把数据加密,并连同盗版证书的公钥一起发给浏览器。如果你的盗版证书是受信任的,且域名无误的话,则用户不会看到任何警告。