iOS问题记录本:UIWebView可以打开不受信任的https网页,但是网页中的动态资源css/image无法加载

0.背景描述

项目中在之前版本已经兼容了打开https网页的功能,但之前因为网页证书受信任,所以打开没有什么问题。
最近一次迭代中,发现有个功能打开的网页,网页没有加载样式,布局全部乱掉。

1.问题查找

1)定位原因

通过safari开发模式查看网页,发现加载样式表和图片时提示:

Failed to load resource: The certificate for this server is invalid. You might be connecting to a server that is pretending to be “xxx.xxx.com” which could put your confidential information at risk.

原本正常的证书已经变为不受信任了。
随后在https://www.sslshopper.com/ssl-checker.html网站验证证书状态,显示证书已过期,不受信任。

2)尝试解决

然后尝试让应用可以加载不受信任的ssl证书,最后发现业务代码中其实已经做了这方面的处理,方案类似https://stackoverflow.com/questions/11573164/uiwebview-to-view-self-signed-websites-no-private-api-not-nsurlconnection-i#
但是,在应用中依然无法打开指定的网页。
随后,我又用干净的demo验证了以上的解决方案,发现以上方案能打开我所用的不受信任的网址。
所以怀疑问题出在项目中其他第三方库上面。

3.问题所在

经过排查项目中所使用的第三方库,最终将怀疑点投向了用来监控应用性能的第三方库——听云的sdk上。
因为听云的sdk要监控应用内所有的网络请求的性能与失败情况,所以它会拦截所有网络请求并做自己的业务处理。因而存在较大的嫌疑。
随后,我注释掉听云的启动代码,再打开不受信任的网址,网页以及网页上动态加载的css以及image都可以正常显示了。

4.后续

因为问题在于第三方sdk,所以问题最终解决需要向第三方sdk提供者反应。
而我的产品中,该网址因为同时支持http和https,所以我暂时只是将网址中的https替换成http,以保证正常业务不受影响。

猜你喜欢

转载自blog.csdn.net/jhq1990/article/details/80516224