今日打开iTunes会频繁提示一个窗口,内容为“iTunes无法验证服务器 s.mzsatic.com. 的身份”,这个问题非常烦人,会导致无法与Apple服务器取得联系,从而导致无法验证固件更新、无法使用Apple Music等等,iTunes会变成一个离线音乐播放器。

1240

问题分析与解决

导致问题的根本原因是网站证书失效。导致问题的首要因素是中国电信劫持了该网站。

观察了一下该网站证书,s.mzstatic.com.的网站证书是颁发自webssl.chinanetcenter.com.的(各位可以看到ChinaNet的字样,和中国电信有脱不开的关系),这样就会导致HTTPS证书的主机名和被颁发证书原机构不符合,被判断有伪造服务器嫌疑,iTunes为了保证通讯安全,所以终止本次通讯,并提示用户错误。

通常这种情况是由于服务器配置错误,或是被拦截攻击导致的,这种情况会被判定为不安全的传输,认定证书无效。

问题归根结题出现在证书,那么解决方案就有两种,第一种就是按照国内的解析走,但是信任证书。第二种就是,绕路,不走寻常的国内DNS解析,手动将其指向国外地址,这样就不会出现此问题。

当然每种方法都有代价,您需要慎重考虑后选择出适合您的方案。

1240

国内DNS解析结果

1240

Google DNS解析结果

说人话版

如果您实在无法理解我上面到底说了什么,那么这里请看这里。

为什么iTunes报错?

假设你是iTunes,22岁,程序猿。每天早上喝杯牛奶,然后上班,有一个固定的牛奶配送员。突然有一天一个陌生人(电信运营商)给了你一瓶牛奶,并告诉你这个牛奶很安全(失效证书),你可以放心饮用。你为了保证你能好好活着,选择不喝。iTunes为了保证通讯安全,发现问题后,选择中断连接。

怎么解决这个问题?

就是喝与不喝,或者怎么喝到牛奶的问题。

方法1:你信任这个陌生人(手动信任证书),并承担饮用牛奶后的一切后果,是死是活自己看着办,你让我喝到牛奶就好。代价是可能会反胃、狗带(DNS被劫持后,黑客可能会通过某些手段窃取隐私、数据等未知危险行为)等。


方法2:为了安全地喝到牛奶,我不信任陌生人,我选择自己步行、坐车、打车、坐飞机(改变原访问路线,但访问方式可不同)去附近最近的商店,然后购买相同品牌放心可靠的牛奶,再饮用。代价是你会花更多的时间(不同的方法可能花费更多的代|理流量、学习成本等),一旦商店没营业,既耽误了时间又没得到想买的牛奶(一旦指向的IP失效或变更,那么访问将失效)。

准备工作

退出正在运行的iTunes。

方案一:手动信任证书

注意:此方法的原理是,相信运营商劫持的后的网站证书,所以可能面临劫持后,被黑客窃取隐私数据的风险。

以macOS Sierra系统为例。

  1. 打开Safari浏览器,地址栏输入s.mzstatic.com.(一定加上英文字符点),并访问。
  2. 访问过程中,Safari弹出提示框,警告用户该网站证书出现问题。如图,勾选“使用信任webssl.chinanetcenter.com”,然后点击“继续”按钮即可。
    1240
  3. 访问结束后,退出浏览器即可。重新启动iTunes,会发现已经成功可以联系Apple服务器(例如我的iTunes提示了可以更新至iOS 10.0.2)。
    1240

方案二:修改线路

注意:此方案可能给您多种方法选择,不同的方法可能花销更多的V|P|N流量、时间等,而且一旦指向IP地址失效,您需要手动维护,学习成本较高。

方案二之所以成为修改线路,意味着您可以用各种方式避开国内解析。例如:

  • 使用V|P|N
  • 使用代|理
  • 修改DNS服务器(修改后需清空DNS缓存)

只要是我可以改变路线的方式,都可以用。

为了避免不必要的问题和纠纷,并以最简单学习成本为目的,本文仅采用修改Hosts文件指向的方式解决问题。

以macOS Sierra为例。

  1. 打开“应用程序”下的“终端”App。

    1240
  2. 输入命令sudo -s,并输入口令(当前用户的登录系统密码),以获得修改hosts文件的权限。正确输入密码后,如图所示,主机名位置显示bash-3.2#

    1240
  3. 输入命令 echo "104.70.135.100 s.mzstatic.com" >> /etc/hosts ,敲击回车,使hosts文件末尾追加指向条目。然后再输入命令dscacheutil -flushdns以清空DNS缓存。

    1240
  4. 运行iTunes即可。

方案对比

选用方案方案1方案2
安全性低(可能被窃取数据)高(在指定可靠DNS服务器获取IP的前提下)
时效性取决于证书有效期取决于IP地址的变更/失效时间
学习/维护成本低高

注意事项

  1. macOS不同的系统,刷新DNS命令均有不同。请自行查阅相关信息。
  2. 方案二,步骤3,注意重定向符号的使用,千万不要输入成" > ",而是" >> "。高级玩家可以使用高级工具如Gas Mask、iHosts等。

F&Q

Q: 104.70.135.100怎么来的?可以换成别的吗?
A: 可以,使用dig命令,并指向非国内运营商DNS服务器,获取到的A记录即可作为被指向的地址。参考“问题分析与解决”版块的配图。我使用的命令:dig s.mzstatic.com. @8.8.8.8

欢迎各位对文章批评指正,欢迎各位交流讨论,如果有任何疑惑或问题,请评论或联系我。

新浪微博:@Hackl0us
Twitter: @Hackl0us