iOS 9 支持服务器的 ATS SSL 错误
iOS 9 ATS SSL error with supporting server
我安装了 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
.
那可能是什么问题?
查看苹果提供的this doc。
我在 iOS 9 上的运行时遇到了类似的问题,我所做的修复是将 NSAppTransportSecurity
字典添加到我的 info.plist
文件中,其中包含 NSAllowsArbitraryLoads
Bool
设置为 true
并在清理和重建后它工作了。
希望对您有所帮助!
在 iOS9 中,Apple 添加了名为 App Transport Security (ATS) 的新功能。
ATS 在网络调用期间强制实施最佳实践,包括使用 HTTPS。
Apple 预发布文档:
ATS prevents accidental disclosure, provides secure default behavior,
and is easy to adopt. You should adopt ATS as soon as possible,
regardless of whether you’re creating a new app or updating an
existing one.
If you’re developing a new app, you should use HTTPS exclusively. If
you have an existing app, you should use HTTPS as much as you can
right now, and create a plan for migrating the rest of your app as
soon as possible.
在您的 info.plist 中添加 Below 键,然后查看。
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
甚至你可以添加特定的例外,
<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>
Apple 已发布 App Transport Security 的完整要求列表。
原来我们使用的是 TLS v1.2,但缺少一些其他要求。
这是完整的检查清单:
- TLS 至少需要 1.2 版。
- 连接密码仅限于提供前向保密的密码(请参阅下面的密码列表。)
- 该服务要求证书至少使用 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
对我来说代理被阻止尝试使用来自不同来源的互联网将解决问题。
Wifi、局域网等
对于 iOS9,我遇到了同样的问题:
虽然 SSLlab 结果显示我的服务器上的协议/密码没有问题,但与一个特定 URL 的连接在 iPad 运行 iOS/9.3.5 上失败了SSL-Error:
Connection cannot be established.
我的愚蠢错误是,我有一个重定向,即在 NGINX 中(在 Apache 中类似):
rewrite /calendar $scheme://www.example.org/resources/calendar;
如果用户通过设置访问 /calender
:
https://example.org/calendar
服务器重定向到另一个域,破坏了 SSL-connection 的建立。
如下设置重定向修复了它:
rewrite /calendar $scheme://$server_name/resources/calendar;
我安装了 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
.
那可能是什么问题?
查看苹果提供的this doc。
我在 iOS 9 上的运行时遇到了类似的问题,我所做的修复是将 NSAppTransportSecurity
字典添加到我的 info.plist
文件中,其中包含 NSAllowsArbitraryLoads
Bool
设置为 true
并在清理和重建后它工作了。
希望对您有所帮助!
在 iOS9 中,Apple 添加了名为 App Transport Security (ATS) 的新功能。
ATS 在网络调用期间强制实施最佳实践,包括使用 HTTPS。
Apple 预发布文档:
ATS prevents accidental disclosure, provides secure default behavior, and is easy to adopt. You should adopt ATS as soon as possible, regardless of whether you’re creating a new app or updating an existing one.
If you’re developing a new app, you should use HTTPS exclusively. If you have an existing app, you should use HTTPS as much as you can right now, and create a plan for migrating the rest of your app as soon as possible.
在您的 info.plist 中添加 Below 键,然后查看。
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
甚至你可以添加特定的例外,
<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>
Apple 已发布 App Transport Security 的完整要求列表。
原来我们使用的是 TLS v1.2,但缺少一些其他要求。
这是完整的检查清单:
- TLS 至少需要 1.2 版。
- 连接密码仅限于提供前向保密的密码(请参阅下面的密码列表。)
- 该服务要求证书至少使用 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
对我来说代理被阻止尝试使用来自不同来源的互联网将解决问题。 Wifi、局域网等
对于 iOS9,我遇到了同样的问题: 虽然 SSLlab 结果显示我的服务器上的协议/密码没有问题,但与一个特定 URL 的连接在 iPad 运行 iOS/9.3.5 上失败了SSL-Error:
Connection cannot be established.
我的愚蠢错误是,我有一个重定向,即在 NGINX 中(在 Apache 中类似):
rewrite /calendar $scheme://www.example.org/resources/calendar;
如果用户通过设置访问 /calender
:
https://example.org/calendar
服务器重定向到另一个域,破坏了 SSL-connection 的建立。
如下设置重定向修复了它:
rewrite /calendar $scheme://$server_name/resources/calendar;