iOS10 / macOS Sierra 下无法访问浦发银行部分网页的问题的研究

TL;DR:水果禁用了一小波 SSL 加密参数导致万年不升级的浦发 HTTPS Server 达不到水果的安全要求无法建立 HTTPS 连接。


事情是这样的,今天晚上打开 TG,看见小伙伴们在讨论 iOS10 和 macOS 10.12没法打开浦发的网站,提示“Safari 无法打开该网页,因为无法与服务器建立安全连接”,受影响的域名包括但不限于quanyiwap.spdbccc.com.cn和onlineapp.spdbccc.com.cn,我随手在 iOS9 和 OS X 10.11下试了一下都正常,我第一反应是你们水果是不是又在新系统拉黑了什么CA(实际上如果是取消对 CA 的信任应该是系统版本无关),于是乎让小伙伴打开终端,试试

curl -ILv https://quanyiwap.spdbccc.com.cn/

意外的发现,好像 curl 没啥问题, Symantec 的 EV 证书,看起来是没有问题的,排除之前 CA 问题的猜想;虽然看到 curl 里使用的 TLS1.0 我曾经以为是 Safari 禁用了 TLSv1,感觉不大可能,而且 SSL 版本不匹配应该是有单独的报错代码:

photo_2016-07-31_19-46-25

这就很神奇了,于是我找来了万年只开热点 iOS10 的5s,插上 USB 打开 Safari 远程调试,看了半天发现怎么都只给我一句话:“Safari 无法打开该网页,因为无法与服务器建立安全连接”,mdzz 这么废柴我为啥要开电脑调试。

换 Chrome 看了一眼,给的信息稍微多了一点,ERR_SSL_PROTOCOL_ERROR,印象里 SSL 版本错误是ERR_SSL_VERSION_OR_CIPHER_MISMATCH,应该不是一刀切了 TLS1.0 的原因:

photo_2016-07-31_19-34-31

nice,错误原因有了查起来就方便多了,经查发现这个错误的原因似乎很多,包括但不限于:

  1. Invalid System Time
  2. Firewall is Blocking website or IP address
  3. Website is blacklisted in Host File
  4. Browser Extension blocking website
  5. Cookies and Cache not cleared since many days/weeks

唔似乎都不太像。果然还是抓个包看看,不想用什么 Charles 做代理,感觉特别麻烦,于是找到了一个非常简单的在 Mac 上抓 iOS 的包的办法:

首先在 iTunes 或者 Xcode 里看到 iOS 设备的 UDID;

或者在 Xcode 安装了的情况下执行 instruments -s devices 然后 rvictl -s [UDID]会看到提示:Starting device xxxxxxxxxxxxxxxxxxxx [SUCCEEDED] with interface rvi0,然后 Mac 上就会多出一个 rvi0 的网卡接口,wireshark 对着这个接口抓包就好啦。

抓包看到在 Safari 发送了 Client Hello 之后服务器直接回了一个 Fatal error:Handshake failure,握手失败的原因八成就是加密参数协商失败,展开 Client Hello 里的 cipher suites 信息,发现 iOS10 的 Safari 支持的22个 suites 里并没有 curl 建立连接的时候使用的 TLS_DHE_RSA_WITH_AES_256_CBC_SHA :

photo_2016-07-31_19-34-48

那么原因基本可以确定是水果在新系统(或者新的 Safari 版本)里禁用了一批安全度相对低的 cipher siute,导致不知道几万年不升级的银行服务器没有支持的加密方式而拒绝了 SSL 握手,我顺便在 OS X 10.11 下抓了一下握手包,协商出来的 suite 是 TLS_RSA_WITH_RC4_128_SHA ,也不在前面 iOS10 支持的列表里,肯定了之前的猜想。

photo_2016-07-31_19-34-42

那么这个结论其实是很悲惨的,要么水果妥协重新支持这些安全性较低的 cipher suites,要么等浦发发现这个问题升级一波 SSL 库和服务端程序版本,在此期间 iOS 和 Mac 新版用户使用浦发银行业务都要受影响,当然我估计最后结果是肯定后一种情况。

最后不要忘了关掉 rvi0 接口:rvictl -x [UDID] 看到 Stopping device xxxxxxxxxxxxxxxxxxx [SUCCEEDED] 就 OK 了。

顺便吐槽一下安全策略激进(其实禁用 RC4和 DHE 也不算很激进····)引起不兼容的问题以前一直都是谷歌在干,这次难得轮到水果干一次啊23333

所以说我又水了一篇废话。


PS.这次用到的 rvictl 感觉确实是个好东西,

Remote Virtual Interface Tool starts and stops a remote packet capture instance
for any set of attached mobile devices. It can also provide feedback on any attached
devices that are currently relaying packets back to this host.


PSS.听说 Chrome 要取消 DHE 的支持,听说 Windows 马上也要打不开浦发了,你们浦发这是药丸啊


PSSS. UPDATE 2016.08.01

昨天小伙伴说:

QQ20160801-0@2x

然后今天我 Mac 上的 Chrome 也:

QQ20160801-1@2x

这就很尴尬了,药丸药丸。


PS*4. 然而 macOS 自带的 openssl 还是0.9.8zh,你们水果是不是精分


PS*5. 恭喜中行加入被 Chrome block 豪华午餐

QQ20160810-0@2x


PS*6. 我不是针对谁,而是说,你们银行都是渣 IT

QQ20160811-0@2x

https://www.technoids.com/index.php/banks-and-https/


本文链接:https://www.starduster.me/2016/07/31/ssl-error-on-ios10-and-macos/
本站基于 Creactive Commons BY-NC-SA 4.0 License 允许并欢迎您在注明来源和非商业使用前提下自由地对本文进行复制、分享或基于本文进行创作。
请注意:受限于笔者水平,本站内容可能存在主观臆断或事实错误,文中信息也可能因时间推移而不再准确,在此提醒读者结合自身判断谨慎地采纳。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据