![HTTPS 的自定义错误页面 (deny_info)](https://linux22.com/image/698895/HTTPS%20%E7%9A%84%E8%87%AA%E5%AE%9A%E4%B9%89%E9%94%99%E8%AF%AF%E9%A1%B5%E9%9D%A2%20(deny_info).png)
我的 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文章对此进行了更详细的描述。