目前有个需求是防抓包,同时要支持证书无缝升级。(每年都要换一次证书<del>万恶之源</del>,而且运维人员换证书可能不会提前和你说。而且保证存量用户不影响升级)
目前的证书链是这样的
CA -> CA2-> AA
最开始的想法: 比对下 CA 的 hash, 和 AA 证书的 SAN(Subject Alternative Name)。 hash 在白名单并且 SAN 匹配域名那就通过。
后来发现,同样在 CA 申请的合法证书 BB.com 放在 Charles 里面竟然也能通过验证,
浏览器看了下,显示的结构变成
CA -> CA2 -> BB -> AA1
好,再改,将 SAN 验证从叶子到 root 一路验证, 凡是有 SAN 字段的,就验证 SAN,如果不匹配就报错。
然后我想到一点,如果对方从 CA2 申请一个不含 SAN 的证书,岂不是又可以跳过? 我尝试了下, 申请了一个用于代码签名的 证书 CC 放到 Charles 里面,又能跳过验证了。岂可修!!!(当然,浏览器报错)
CA -> CA2 -> CC -> AA2
对了,有时加一个自签名 ca 作为白名单,方便出 bug 自己抓包。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.