记一次线上用户头像访问异常排查

几个月前,收到掘友反馈无法查看自己的头像图片(p*-passport.byteacctimg.com),站内其他图片(p*-juejin.byteimg.com)正常。

掘金用户头像直接使用公司其他部门返回的 Passport CDN 地址,按说不应该有问题,且本地无法复现,反馈量也不大,一周几条,但一直持续。

排查过程

考虑到咱掘金用户大部分都是程序员,让掘友协助排查最高效,在反馈后评论留言,很快就联系到两名掘友。

可以 Ping 通域名

图片无法访问首先要怀疑 DNS 和网络连通性。让掘友 Ping 头像域名,一切正常,返回的 ip 也没有被劫持,DNS 和网络连通没有问题。

记一次线上用户头像访问异常排查

浏览器提示连接被重置

再让掘友用 Chrome 浏览器直接访问图片 URL,报错信息为 ERR_CONNECTION_RESET

记一次线上用户头像访问异常排查

网络环境阻断了连接

两名掘友都表示,只有在公司访问掘金才出现问题,结合浏览器给出的“连接被重置”信息,怀疑所在网络对域名进行了拦截。

一个小知识点:拦截 HTTPS 请求经常会用到 SNI 信息。

为了在同 IP 部署多个 HTTPS 服务,TLS 提供名为 SNI(Server Name Indication)的扩展,现代浏览器都支持 SNI。浏览器发送 Client Hello 握手时,会把请求 URL 中 HOST 部分明文放在 SNI 扩展中传给服务器,便于服务器返回正确域名的 HTTPS 证书。通过 SNI 信息,防火墙可以轻松拦截指定 HOST 的 HTTPS 连接,无需解密。

via:imququ.com/post/sth-ab…

先让掘友用 curl 进行了测试:

curl -vvv https://p3-passport.byteacctimg.com/img/user-avatar/05f83c4592a0bf379722fbe74730238c~300x300.image

可以看到,TCP 连接正常,但 TLS 握手过程被中断,这与在浏览器中的表现一致,这也说明该问题与浏览器无关。

记一次线上用户头像访问异常排查

又让掘友测试了不带 SNI 的 TLS 握手:

openssl s_client -connect p3-passport.byteacctimg.com:443 

可以看到,不带 SNI 时,顺利完成 TLS 握手,服务端返回了 TLS Session Tikect。

记一次线上用户头像访问异常排查

再让掘友测试带 SNI 的 TLS 握手,指定 -servername 参数可以发送 SNI 信息:

openssl s_client -connect p3-passport.byteacctimg.com:443 -servername p3-passport.byteacctimg.com

可以看到,这次 TLS 握手失败(Cipher 为空)。

记一次线上用户头像访问异常排查

由此可以判断,掘友网络环境针对 p*-passport.byteacctimg.com 域名进行了阻断。

问题解决

查明原因之后,临时解决方案是更换域名。新域名替换上线后,掘友反馈一切恢复正常:

记一次线上用户头像访问异常排查

这里必须得感慨下,掘友们是真优秀,排查问题配合度高、沟通顺畅,还具备良好的计算机知识,大大的赞!

补充信息

为什么有些网络环境会屏蔽 byteacctimg.com,我没有最终结论,但有一些猜测,记录如下。

沟通中了解到,一些公司所处行业非常注重隐私,猜测管理员在网关配置了隐私 / 广告过滤规则,用来过滤数据上报请求。

搜索发现,这个 adblock list 包含 byteacctimg.com 规则,文件来自于这个项目:github.com/badmojr/1Ho…

一些广告过滤软件,例如 AdGuard,确实会通过匹配 SNI 的方式来达到拦截广告的效果。例如:forum.adguard.com/index.php?t…

用来上报日志的域名很容易被广告 / 隐私过滤规则库收录,从而被拦截。上报日志场景最好申请单独域名,不要与业务内容域名混用。猜测 byteacctimg.com 某个子域曾经被用于上报日志,导致被 adblock list 收录。

另外,为了解决 SNI 明文传输的问题,TLS 还提供了 ESNI(Encrypted SNI)、ECH(Encrypted Client Hello)等扩展,这里不过多介绍,有兴趣的同学可以点击:blog.cloudflare.com/encrypted-c…

后记

为了更方便排查图片访问异常类问题,掘金的小伙伴开发了一个小工具,之后遇到类似问题可以先来测试一下:

juejin.cn/help-utils/…

原文链接:https://juejin.cn/post/7227000656602087479 作者:我是屈屈

(0)
上一篇 2023年4月29日 上午10:00
下一篇 2023年4月29日 上午10:13

相关推荐

发表回复

登录后才能评论