HTTPS 的自定义错误页面 (deny_info)

HTTPS 的自定义错误页面 (deny_info)

我的 squid.conf 中有以下 ACL,其中有一个名为 ERR_TJS 的自定义“错误页面”文件,位于“/usr/share/squid/errors/English”:

acl tjs_sites url_regex "/etc/squid/sites_regex.acl"
acl tjs_domains dstdomain "/etc/squid/domains.acl"
http_access deny tjs_sites
http_access deny tjs_domains
deny_info ERR_TJS tjs_sites
deny_info ERR_TJS tjs_domains

特别是对于 ACL 文件“/etc/squid/domains.acl”,我有以下域:

flyordie.com
www.flyordie.com
king.com
www.king.com
miniclip.com
www.miniclip.com
kongregate.com
www.kongregate.com
clashroyale.com
www.clashroyale.com
facebook.com
www.facebook.com
instagram.com
www.instagram.com
snapchat.com
www.snapchat.com

问题是,当对 Squid 执行 HTTPS 请求时,它不会给出“https://www.facebook.com例如,“显示浏览器发送的通用错误页面,如 Mozilla Firefox 发送的这个页面:

代理服务器拒绝连接

Firefox 配置为使用拒绝连接的代理服务器。

检查代理设置以确保其正确。请联系网络管理员以确保代理服务器正常运行。

我在 Squid 文档中找到了这些信息:

HTTPS 不显示自定义错误页面

HTTPS 使用 HTTP CONNECT 消息通过代理进行中继。由于浏览器处理这些 CONNECT 消息的行为(在https://bugzilla.mozilla.org/show_bug.cgi?id=479880) 代理生成的任何自定义错误页面都会被忽略,而显示通用浏览器页面。

通常,此浏览器页面会提及连接失败或其他此类不相关的详细信息。

事实上,浏览器会完全丢弃除 200 OK 之外的任何响应,并显示相同的浏览器模板页面。当通过经过身份验证的代理使用 HTTPS 时,以及对于 407 消息正文具有相关性的身份验证方案,这可能会导致一些非常奇怪的身份验证问题。

我听说使用 Squid,你可以拦截来自 HTTP/HTTPS 连接的一些“状态”,比如处理这些 CONNECT 消息。

我的问题是:有什么方法可以应用自定义拒绝信息就像我为 HTTPS 请求准备的这个一样,也许可以操纵这些 CONNECT 消息,或者通过任何其他方法?我该如何实现这一点(请举一些例子)?

答案1

当浏览器配置为使用代理进行 HTTPS 时,它首先尝试通过代理建立到远程站点的 CONNECT 隧道。除“200 Tunnel Ready”之外的任何来自代理的 HTTP 响应都将被忽略,并导致“代理拒绝连接”错误。可以通过以下方法修复此问题:解密连接,然后按照您的配置拒绝访问。请参阅https://docs.diladele.com/faq/squid/cannot_connect_to_site_using_https.html文章对此进行了更详细的描述。

相关内容