我正在尝试测试 ssl_bump server_first Squid 指令,但我不明白它是如何工作的。据我所知,ssl_bump 指令有三种工作模式:
- None:不拦截 HTTPS 流量,客户端直接与远程服务器连接,squid 仅转发流量。
- 客户端优先:客户端通过 SSL 连接到 Squid(因此,在第一次连接时,用户必须接受 Squid 的 SSL 证书),Squid 连接到服务器,自动接受其 SSL 证书。(或者是否有选项可以只接受某些证书而拒绝其他证书?)
- 服务器优先:Squid 连接到服务器,接受 SSL 证书,然后……?Squid 文档说:
首先与服务器建立安全连接,然后使用模仿的服务器证书与客户端建立安全连接。
“模仿服务器证书”是什么意思?Squid 会生成一个假证书,复制(?)从远程服务器收到的证书?我尝试设置 ssl_bump server_first Squid,但每次我连接到 HTTPS 站点时,浏览器都会警告我证书不匹配,如果我检查证书,我会发现它始终是同一个证书,是在 Squid 安装期间创建的...我看不出它与“客户端优先”行为有什么区别...
我知道 SSL 拦截不是一个安全的过程,但我正在探索此功能,因为我可能会被迫使用它......
先感谢您。
答案1
服务器优先和客户端优先之间的区别在于用户最终看到(或看不到)的错误消息
随着客户端优先 SSL 的出现,存在三个问题:
- 提供的 SSL 证书与目标不匹配;例如,客户端看到 SSL 证书颁发给 proxy.yourdomain.com,但用户正尝试访问 www.securewebsite.com。他们的浏览器将就此发出警告。(糟糕)
- SSL 证书来自不受信任的证书颁发机构。他们的浏览器也会就此发出警告。(糟糕)
- 如果服务器 SSL 证书有问题,没有好的办法让客户端知道。当 Squid 发现有错误时(可能是过期、不可信、指向错误的网站等),客户端已经有一个“好的”SSL 证书,并认为它即将收到真正的流量。他们的浏览器无法就此发出警告。(同样不好)
服务器优先 SSL 消除了第一个和第三个问题。第二个问题仍然存在。以下是关于使用服务器优先 SSL 缓冲的理由的优秀资源。它显然是在该功能仍在开发时编写的,所以不要让将来时态困扰你。
由于证书是你自己生成的,而且任何人都可以自己生成证书,所以仅仅拥有证书并不意味着通信是安全的。证书必须来自你信任的颁发者。浏览器默认带有受信任的证书颁发机构列表。这些 CA 保证他们出售的证书,这就是你的计算机知道信任证书的方式。
解决此问题的方法是您必须告诉您的计算机信任您用于 SSL 碰撞的证书。不同操作系统的程序不同。对于 Windows 客户端,您可以通过 GPO 推送某些内容,对于移动设备,您可以通过 MDM 推送某些内容,等等。
仅用于测试(在 Windows 中),您可以右键单击证书并选择安装。按照向导操作。不要让 Windows 选择证书的放置位置,而是浏览并选择受信任的根证书颁发机构。完成此操作后,您的计算机将信任您的 squid ssl-bump 服务器生成的任何证书。