支持服务器的iOS 9 ATS SSL错误
我安装了Xcode 7,并尝试在iOS 9下运行我的应用程序。我得到臭名昭着的错误: Connection failed! Error - -1200 An SSL error has occurred and a secure connection to the server cannot be made.
Connection failed! Error - -1200 An SSL error has occurred and a secure connection to the server cannot be made.
事情是我的服务器支持TLSv1.2,我正在使用NSURLSession
。
那可能是什么问题?
苹果已经发布了App Transport Security的完整需求清单。
原来,我们正在使用TLS v1.2,但缺less一些其他要求。
这是完整的检查清单:
- TLS至less需要1.2版本。
- 连接密码仅限于提供前向保密的密码(请参阅下面的密码列表)。
- 该服务需要至less使用SHA256指纹的证书,该证书具有2048位或更大的RSA密钥或者256位或更大的椭圆曲线(ECC)密钥。
- 无效的证书导致硬故障并且没有连接。
接受的密码是:
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
在iOS9中,苹果增加了一项名为App Transport Security(ATS)的新function。
ATS在networking呼叫期间执行最佳做法,包括使用HTTPS。
苹果预发布文档:
ATS防止意外泄露,提供安全的默认行为,并且易于采用。 您应该尽快采用ATS,无论您是创build新应用还是更新现有应用。
如果您正在开发新的应用程序,则应该专门使用HTTPS。 如果您有现有的应用程序,则应尽可能使用HTTPS,并尽快制定一个计划来迁移应用程序的其余部分。
在你的info.plist中添加下面的关键字,然后看看。
<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict>
即使你可以添加特定的exception,
<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>
看看这个苹果提供的文档 。
我在iOS 9的运行时遇到了类似的问题,我做了什么修复工作就是将NSAppTransportSecurity
Dictionary添加到我的info.plist
文件中, NSAllowsArbitraryLoads
Bool
设置为true
并在清理和重build之后运行。
我希望这有帮助!
对于我的代理被阻止尝试从不同的来源使用互联网将解决问题。 Wifi,局域网等