00『 基础知识 』iOS进阶指南移动开发

Weibo Api 在 iOS10 请求报错

2016-09-01  本文已影响395人  店长推荐

昨天临近发包的时候,测试告诉我说微博登录 一直报 SSL 验证失败,然后就登录失败了,但是微信跟qq都没有问题。。

一开始以为自己代码有问题,进行代理抓包后(抓包的步骤),iOS10系统又可以正常登录了,这个就很奇怪了。。。

Paste_Image.png

iOS10之前的版本都可以正常登录,代理抓包后也可以正常登录,那只剩下一个可能,就是微博自己的HTTPS证书有问题!!!

把微博的请求地址放到浏览器中,发现 chrome 也报警告了。。。

Paste_Image.png

在搜索解决方法的时候,发现 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 加密方式 (遥遥无期)

美柚公司内推,有需要可以私信我:


上一篇下一篇

猜你喜欢

热点阅读