我正在企业防火墙后面工作,该防火墙阻止Windows和Ubuntu上的Web流量,用于除Web浏览器和系统更新之外的几乎所有应用程序。
当我尝试使用 curl、git、python 等连接到外部资源时,我收到 SSL/TLS 错误。我能够成功忽略这些应用程序的SSL/TLS,并且它们按预期工作(例如curl -k
成功了(。
我对此类问题的工作原理有几个问题:
- 由于忽略SSL/TLS有效,这是否意味着有问题的端口对TCP/HTTP流量开放,而不是TLS/HTTPS流量?
- 为什么浏览器和
apt install <package>
能够通过HTTPS连接,而其他应用程序却不能? - 是否有不损害安全性且不涉及访问防火墙设置的通用解决方案?
既然忽略SSL/TLS有效,这是否意味着有问题的端口对TCP/HTTP流量开放,但对TLS/HTTPS流量不开放?
不,这意味着有一些(可能是透明的(代理拦截HTTPS,也可能拦截HTTP流量。使用SSL拦截,HTTPS流量在代理上解密,可能是为了检查它是否存在威胁或数据泄漏。
这个中间"攻击"的人通过将原始HTTPS连接分成两个来工作:一个在客户端和代理之间,一个在代理和目标服务器之间。由于代理无权访问原始证书私钥,因此它将使用由代理特定 CA 签名的动态创建的证书。如果此代理 CA 受信任,则访问将同样顺利进行。但如果它不被信任,它就会破裂——这就是你所看到的。如果您只是禁用证书验证,它似乎可以工作,尽管它也会盲目接受攻击者的恶意SSL拦截。
为什么浏览器和 apt install 可以通过 HTTPS 连接,而其他应用程序不能?
不幸的是,没有一个信任存储区。浏览器有自己的浏览器,Python可能有自己的浏览器,Java有自己的浏览器,应用程序可能有自己的浏览器等等。因此,虽然代理 CA 可能已添加到某些信任存储区,但可能尚未添加到其他信任存储区。
是否有不损害安全性且不涉及访问防火墙设置的通用解决方案?
解决方案是将受信任的代理 CA 添加到所有必要的信任存储区。但同样,没有一个,所以需要做什么在很大程度上取决于系统的确切设置和所使用的应用程序。有一些标准位置可供查找(取决于操作系统和浏览器(,但这些位置通常不包括系统上使用的所有可能的信任存储区。