昨天临近发包的时候,测试告诉我说微博登录 一直报 SSL 验证失败,然后就登录失败了,但是微信跟qq都没有问题。。
一开始以为自己代码有问题,进行代理抓包后(抓包的步骤),iOS10系统又可以正常登录了,这个就很奇怪了。。。
iOS10之前的版本都可以正常登录,代理抓包后也可以正常登录,那只剩下一个可能,就是微博自己的HTTPS证书有问题!!!
把微博的请求地址放到浏览器中,发现 chrome 也报警告了。。。
在搜索解决方法的时候,发现 iOS10 系统对TLS 1.0 加密的证书,是认为无效的,要求加密方式要 TLS 1.2,然后去 weibo 的github 上看看有没有更新SDK (应该早点上去看的。。。后悔),
原来已经有人提交了 pull request 来解决这个问题 别人提交的解决方案
<key>NSThirdPartyExceptionMinimumTLSVersion</key>
<string>TLSv1.0</string>
1.对传输安全的支持
在新一代的iOS系统中,默认需要为每次网络传输建立SSL。解决这个问题有两种方法:
A. 建立白名单并添加到你的app的plsit中
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>sina.cn</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
<false/>
<key>NSThirdPartyExceptionMinimumTLSVersion</key>
<string>TLSv1.0</string>
</dict>
<key>weibo.cn</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
<false/>
<key>NSThirdPartyExceptionMinimumTLSVersion</key>
<string>TLSv1.0</string>
</dict>
<key>weibo.com</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
<false/>
<key>NSThirdPartyExceptionMinimumTLSVersion</key>
<string>TLSv1.0</string>
</dict>
<key>sinaimg.cn</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
<false/>
<key>NSThirdPartyExceptionMinimumTLSVersion</key>
<string>TLSv1.0</string>
</dict>
<key>sinajs.cn</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
<false/>
<key>NSThirdPartyExceptionMinimumTLSVersion</key>
<string>TLSv1.0</string>
</dict>
<key>sina.com.cn</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
<false/>
<key>NSThirdPartyExceptionMinimumTLSVersion</key>
<string>TLSv1.0</string>
</dict>
</dict>
</dict>
如果没有添加可能会遇到"An SSL error has occurred and a secure connection to
the server cannot be made."这样的问题。
B. 移除 NSAppTransportSecurity 中的其他设置,只留下 NSAllowsArbitraryLoads,2017年苹果将会拒绝使用该方式的应用。
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
2. 等待微博升级 HTTPS 证书,采用 TLSv1.2 加密方式 (遥遥无期)
美柚公司内推,有需要可以私信我: