支持服务器的iOS 9 ATS SSL错误

Yog*_*ton 20 ssl objective-c ios nsurlsession ios9

我安装了Xcode 7并尝试在iOS 9下运行我的应用程序.我收到臭名昭着的错误:Connection failed! Error - -1200 An SSL error has occurred and a secure connection to the server cannot be made. 事情是我的服务器支持TLSv1.2并且我正在使用NSURLSession.

那可能是什么问题呢?

Yog*_*ton 31

Apple已发布App Transport Security的完整要求列表.

原来我们正在使用TLS v1.2但是缺少其他一些要求.

这是完整的检查清单:

  1. TLS至少需要1.2版.
  2. 连接密码仅限于提供前向保密的密码(请参阅下面的密码列表.)
  3. 该服务需要至少使用带有2048位或更高RSA密钥的SHA256指纹或256位或更高椭圆曲线(ECC)密钥的证书.
  4. 无效的证书导致硬故障并且没有连接.

接受的密码是:

TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
Run Code Online (Sandbox Code Playgroud)

  • 要测试,请转到[SSL实验室](https://www.ssllabs.com/ssltest/index.html)并输入您的服务器URL.它将测试您的证书并评估您的设置. (2认同)

Nil*_*tel 11

在iOS9中,Apple增加了一项名为App Transport Security(ATS)的新功能.

ATS在网络呼叫期间实施最佳实践,包括使用HTTPS.

Apple预发布文档:

ATS可防止意外泄露,提供安全的默认行为,并且易于采用.无论您是创建新应用程序还是更新现有应用程序,都应尽快采用ATS.

如果您正在开发新应用,则应该专门使用HTTPS.如果您有现有应用,则应尽可能多地使用HTTPS,并创建一个计划,以便尽快迁移其余应用.

在info.plist中添加以下密钥然后查看.

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>
Run Code Online (Sandbox Code Playgroud)

即使你可以添加特定的例外,

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>testdomain.com</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <false/>
            <key>NSExceptionAllowInsecureHTTPSLoads</key>
            <false/>
            <key>NSExceptionRequiresForwardSecrecy</key>
            <true/>
            <key>NSExceptionMinimumTLSVersion</key>
            <string>TLSv1.2</string>
            <key>NSThirdPartyExceptionAllowInsecureHTTPSLoads</key>
            <false/>
            <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
            <true/>
            <key>NSThirdPartyExceptionMinimumTLSVersion</key>
            <string>TLSv1.2</string>
            <key>NSRequiresCertificateTransparency</key>
            <false/>
        </dict>

        ...

    </dict>
</dict>
Run Code Online (Sandbox Code Playgroud)


小智 5

查看苹果提供的此文档.

我在运行时在iOS 9上遇到了类似的问题,我在修复它时所做的是将NSAppTransportSecurity字典添加到我的info.plist文件中,NSAllowsArbitraryLoads Bool设置为true清理和重建后的工作.

我希望这有帮助!