我在 Ubuntu 15.10 服务器上安装了 Squid 3.15。Squid 已使用 sslbump 设置用于 https 流量。该功能运行正常,即:来自 http 和 https 的所有流量都经过 Squid,并且所有安装了证书的设备都可以访问所有互联网。
有一个例外:'Netflix APP' 不再适用于 IOS 设备(iPhone、iPad)。无论我做什么。所有其他互联网服务(Safari 和其他应用程序)都可以在这些设备上正常运行。
我能够通过 Linux 机器甚至 OS X Safari 上的浏览器运行 Netflix。唯一无法运行的是 IOS 上的 Netflix APP。
当然,如果我禁用 sslbump 并仅允许 http 通过 Squid,Netflix 就可以正常工作。我在 iPhone 上尝试了透明模式和代理模式,但仍然不起作用。
有人设法让 IOS 设备上的 Netflix APP 与启用了 sslbump 的 squid 一起工作吗?
答案1
问题是 Netflix 应用程序使用了证书固定。
“证书固定就是忽略整个事情,只信任此证书或者只信任由此证书签名的证书。”
https://security.stackexchange.com/questions/29988/what-is-certificate-pinning
我建议你升级到 Squid 3.17,因为你可能需要使用透明模式,因为 iPad 上没有办法配置 Netflix 应用程序以连接到其他端口。3.17 现在允许在透明模式下查看和拼接
“我们的目标是让用户浏览一些重要的网页(如银行或支付系统)时不被 SSL 拦截(在 Squid 的术语中称为 Splice),但其余的 HTTPS 流量应该被拦截(“拦截”)以验证内容。”“现在得益于 HTTPS 标准中的 TLS 扩展(引入 SNI)和 Squid 的 peek & splice 功能,可以通过查看客户端的请求来确定 server_name(只要客户端兼容 TLS/SNI)。”
http://marek.helion.pl/install/squid.html <--太棒了,谢谢你,马雷克!
这就是我最终做的事情
acl step1 at_step SslBump1
acl step2 at_step SslBump2
acl nobumpSites ssl::server_name .netflix.com
# Peek at client's TLS-request in order to find the SNI
ssl_bump peek step1 all
# don't bump the nobumpSites
ssl_bump splice step2 nobumpSites
# bumping all other SSL connections
ssl_bump bump
如果您不知道 SNI 应该是什么(.netflix.com),请使用 wireshark 查看客户端问候语。由于 netflix 客户端流量是 https,因此 squid 知道域的唯一方法是查看应该包含 SNI 的未加密客户端问候语。
我应该注意到,ipad netflix 应用程序大约需要 60 秒才能开始播放视频。我知道原因,稍后会在这里更新。
重要提示(上面没有实现)“Squid 是否可以攻击 SSL 连接,但故意为自签名或无效的上游连接生成无效证书,以便我的浏览器标记它们?”“当前的 Squid 会这样做,前提是您在知道服务器详细信息后在步骤 3 中执行 SSL-Bump“bump”操作。” http://lists.squid-cache.org/pipermail/squid-users/2016-March/009707.html <--非常感谢 Amos 分享的所有有关鱿鱼的知识!
其他来源 http://www.squid-cache.org/Doc/config/acl/
http://lists.squid-cache.org/pipermail/squid-users/2016-April/010009.html