@霏艺Faye #2290348 代码那部分只是定义Accesser如何修改发出的SNI。验证的部分是给OpenSSL处理。
我刚才测试了 badssl.com 上的一些示例域名,测试之前将其SNI加入 config.json 以指示 Accesser 不去除 SNI。对于有问题的TLS证书处理不同。
https://expired.badssl.com/ (过期)
终止连接
ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: certificate has expired (_ssl.c:1129)
https://wrong.host.badssl.com/ (host不匹配)
没有终止连接
https://self-signed.badssl.com/(自签)
终止连接
ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate (_ssl.c:1129)
https://untrusted-root.badssl.com/ (CA不可信)
终止连接
ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:1129)
后面的 revoked 和 punning-test 是有问题的,但是我的浏览器也没有警告,所以不再测试。
由此可见GFW要完成MITM只能获取有效的其他网站的证书和私钥。并非自签就可以。
