木子喵
木子喵
  • 发布:2017-11-13 16:20
  • 更新:2017-11-21 15:26
  • 阅读:6415

iOS请求非受信任的https资源的问题

分类:5+ SDK

环境:服务器配置为自签名证书
步骤:用Safari调试应用,其中有一个用GET的方法请求服务器的servlet返回验证码图片,进入应用后Safari的控制台打出“Failed to load resource: 此服务器的证书无效。您可能正在连接到一个伪装成XXXX的服务器,这会威胁到您的机密信息的安全。”,手动刷新页面后不再出现提示并且图片正常显示。

请问这是什么原因?怎么做才能在不刷的情况下就能让图片显示出来?

2017-11-13 16:20 负责人:无 分享
已邀请:
骁骑

骁骑

1 5+基座在使用https时会默认信任自签名证书不需要特殊处理
2 如果需要在safari上使用https要使用可信任机构颁发的证书才能不刷新就能显示图片

  • 木子喵 (作者)

    1.所有自签名证书都会信任吗?支不支持只配置特定的呢?

    2.在APP内的页面上不是Safari ,用“http://XXXX:XX/transfer/generate?codename=loginVerifycode”这种方式请求回验证码图片不能显示,需要刷新之后才能,请问怎么能解决呢?(问题描述中提到的Safari只是用它辅助真机调试,并不是用它看图片)


    谢谢!~

    2017-11-14 08:45

木子喵

木子喵 (作者)

另外由于服务器上的ssl证书是自签名的,想要参考这篇文章进行处理(制作应用打算发布到托管平台而不发到应用市场所以不考虑审核的问题)
iOS开发HTTPS实现之信任SSL证书和自签名证书
请问按照文中的处理方法,是否会跟5+SDK发生什么冲突或者造成应用的bug?因为5+SDK也对网络请求进行封装处理了所以想请教一下我可不可以按文章所说的那么做

木子喵

木子喵 (作者)

一开始这么写的,刚才试了一下加了个timeout就好用了,进入页面不刷新也能显示图片了。
现在比较想请教一下plusReady,貌似并不是所有都ready了(https那好像没转换处理完毕),请问后期会优化吗?还是我的用法有问题呢?

木子喵

木子喵 (作者)

重复试了好多次,不加setTimeout的话Xcode控制台会输出下面这段:
2017-11-14 09:54:16.597090+0800 HBuilder[982:420266] TIC SSL Trust Error [1:0x1c4170d40]: 3:0
2017-11-14 09:54:16.615174+0800 HBuilder[982:420266] NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9813)
2017-11-14 09:54:16.615234+0800 HBuilder[982:420266] Task <85A0F154-AD6F-4E96-9E0B-0BF03E975E20>.<0> HTTP load failed (error code: -1202 [3:-9813])
2017-11-14 09:54:16.615821+0800 HBuilder[982:420268] NSURLConnection finished with error - code -1202

而加了就不会有这段

木子喵

木子喵 (作者)

搞明白了,在应用中首先“用GET的方法请求服务器的servlet返回验证码图片”的话会有“NSURLConnection finished with error”的问题因为是自签名的证书不受信任,而在调用一次mui.ajax(需要添加crossDomain:true)之后再请求servlet就能正确返回验证码。
猜测是调用添加了crossDomain:true的mui.ajax时SDK里处理了一下把网络访问那证书验证的环节重新设置了。
要是有小伙伴遇到类似问题,如果官方暂时不想提供手动开放https放行的接口的话可以自己写一个无关紧要的请求调用mui.ajax然后再访问无法配置的不走mui.ajax的请求。

该问题目前已经被锁定, 无法添加新回复