注意啦,本工具是python开源版,python是一种编程语言,如果你不懂编程,最好不要下,因为可能对你没有用。目前,作者还没有出exe版,未来可能会有exe版本。
曾经发生过并被大众知晓的SSL劫持有:Comodo CA被黑客入侵用于伪造SSL证书、DigiNotar CA被黑客入侵用于伪造SSL证书、法国政府伪造CA证书用于劫持Gmail等。当然,还有广为流传的CNNIC,虽然并没有被发现进行过SSL劫持,不过鉴于其之前的所作所为,很多人还是很担心某天会针对自己进行劫持,而针对单人的劫持比较难以发现。
鉴于存在着这些问题,那么就需要有相应的解决方法。笔者在这里介绍一个用于预防SSL劫持的开源工具,使用中不存在删除证书的各种问题,也不存在担心中级CA机构的问题。此工具依赖于python,安装python后根据项目主页中的问于答进行操作即可使用。此项目刚开发完成,使用中或许会存在一些问题,如发现问题会尽快进行修复。
作者邮箱:lehui99@gmail.com , 有问题欢迎反馈。
关于scphcp的一些常见问题:
问:如何使用?
答:编辑config.json,填写上级代理的IP地址、端口和类型到parentProxyHost、parentProxyPort和parentProxyType中。之后启动scphcp.bat(Windows)或scphcp.sh(Linux)。之后设置浏览器代理即可,端口是config.json中的proxyPort。
问:scphcp是什么类型的代理?HTTP代理还是SOCKS代理?
答:取决于config.json中的parentProxyType。如果是none或socks,则是socks代理;如果是connect,则是https代理(只能代理https,不能代理http。所以在浏览器中只设置https代理到scphcp的端口即可)。
问:parentProxyType中的none和socks有什么区别?
答:none表示不使用上级代理,scphcp会直连目标https网站;socks表示使用上级socks代理连接目标https网站。
问:是如何防止SSL劫持的?
答:首次访问某个https网站时,scphcp会将此网站的SSL证书保存在config.json中certFilename指定的文件中。之后再次访问此网站,scphcp会将此次网络传输中证书和保存在文件中的证书进行比对,如不同则会直接断开连接。所以首次访问时最好通过浏览器查看一下证书,保证证书是正确的,避免首次访问被劫持的问题。
问:SSL不是端到端加密的吗?scphcp是怎么取得证书的?
答:SSL在握手时的数据传输是明文的,之后的数据才是加密的,而SSL证书是在握手过程中传输的。
问:某个网站由于证书时间到期或其他原因使用了新的证书,导致无法连接了,怎么办?
答:首先可以查看config.json中logFilename指定的日志文件中有没有存在Certification changed for hostname ...的日志,hostname后的就是其域名。在确认新证书确实不是被劫持的证书的情况下,可以运行cert_mgmt管理证书,删除这个域名并保存之后重新访问此网站,同时再次在浏览器中检查此网站的证书即可。
问:为什么要在浏览器的连接中检查SSL证书,而不是新建一个连接检查证书?
答:新建一个连接检查证书并不代表浏览器的连接中的证书也是正确的,为了安全起见在浏览器的连接中检查证书比较安全。