Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/120.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
支持服务器的iOS 9 ATS SSL错误_Ios_Objective C_Ssl_Nsurlsession_Ios9 - Fatal编程技术网

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

支持服务器的iOS 9 ATS SSL错误,ios,objective-c,ssl,nsurlsession,ios9,Ios,Objective C,Ssl,Nsurlsession,Ios9,我安装了Xcode 7,并尝试在iOS 9下运行我的应用程序。 我得到了一个臭名昭著的错误:连接失败!错误--发生SSL错误,无法与服务器建立安全连接。 问题是我的服务器确实支持TLSv1.2,而且我正在使用NSURLSession 那么问题出在哪里呢?看看苹果提供的 我在iOS 9上运行时遇到了类似的问题,我所做的修复工作是将NSAppTransportSecurity字典添加到我的info.plist文件中,其中NSAllowsArbitraryLoadsBool设置为true,并且在清理和

我安装了Xcode 7,并尝试在iOS 9下运行我的应用程序。 我得到了一个臭名昭著的错误:
连接失败!错误--发生SSL错误,无法与服务器建立安全连接。
问题是我的服务器确实支持TLSv1.2,而且我正在使用
NSURLSession

那么问题出在哪里呢?

看看苹果提供的

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


我希望这有帮助

在iOS9中,苹果增加了一项新功能,称为应用程序传输安全(ATS)

ATS在网络通话期间实施最佳实践,包括使用HTTPS

Apple预发布文档:

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

如果你正在开发一个新的应用程序,你应该只使用HTTPS。如果 如果你有一个现有的应用程序,你应该尽可能多地使用HTTPS 现在,创建一个计划,将应用程序的其余部分迁移为 尽快

在info.plist中添加以下键,然后查看

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>
NSAppTransportSecurity
NSAllowsArbitraryLoads
即使您可以添加特定的异常

<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>
NSAppTransportSecurity
NSExceptionDomains
testdomain.com
n包括多个域
N异常低不安全HttpSloads
NSExceptionRequiresForwardSecretary
NSExceptionMinimumTLSVersion
TLSv1.2
N第三方例外低不安全HttpSloads
N第三方例外要求转发保密
第三方例外最小版本
TLSv1.2
NSRequiresCertificateTransparency
...

苹果公司发布了该产品的完整需求清单

事实证明,我们使用的是TLSV1.2,但缺少一些其他要求

这是完整的检查清单:

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
  • 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
    

    对于我来说,代理被阻止,尝试从不同的来源使用internet将解决这个问题。
    Wifi、Lan等。

    对于iOS9,我遇到了同样的问题: 虽然结果显示我的服务器上的协议/密码没有问题,但在运行iOS/9.3.5的iPad上连接到一个特定URL失败,并出现SSL错误:

    Connection cannot be established.
    
    我愚蠢的错误是,我有一个重定向,即在NGINX中(和Apache中类似):

    如果用户通过以下设置访问日历:

    https://example.org/calendar
    
    服务器重定向到另一个域,破坏了SSL连接的建立

    按如下所示设置重定向修复了它:

    rewrite /calendar     $scheme://$server_name/resources/calendar;
    

    我的服务器使用的是TLSv1.2,我使用的是NSUrlSession-所以它应该自动为我工作没有?我不想在我的应用程序中禁用TLS。另一个可能的情况是服务器上的证书可能没有经过授权的CAI签名,只是在plist中的每个地方都注意到了值1.2被设置为最低版本。这不是新的默认版本吗?可能是。。你检查过你的服务器端证书吗?添加NSAllowsArbitraryLoads密钥是否是对本地服务器进行内部测试的方法(通过IP和非SSL)?我的服务器使用TLSv1.2,我使用NSUrlSession-因此它应该自动对我起作用否?我不想在我的应用程序中禁用TLS。可能是临时解决方案。老实说,我认为这是一种解决方法,我无法提供此配置,因此我正在等待是否有新的文档出现。如果你们中的任何人使用Charles Proxy,他们都有一篇关于这方面的文章,我知道很多人也写过这方面的解决方案。你们所做的是一起禁用新的ssl检查。不推荐。@aroth很少或没有警告?WWDC是几个月前成立的。正确配置SSL并不难。我们如何检查这些项目?苹果的技术说明没有告诉更多:要测试,请转到并输入您的服务器url。它将测试您的证书并为您的设置评分。您可以像我一样包括另一组密码,因为paypal不支持这些密码,我们通过更新ssl证书以使用SHA2并启用TLS v1.2解决了这一问题。当您想将应用程序连接到内部网络上的服务器时,如何进行内部测试?这是出乎意料的。但是解决了我的问题。谢谢。该死的,我在我们的制作应用程序上发现了这个问题。开始出汗。阅读此文,关闭wifi,使用移动数据并工作。。。乌夫。现在好多了。。。非常感谢。