Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.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应用程序传输安全不接受TLSv1.2连接和plist异常,没有任何区别_Ios_Ssl_Nginx_App Transport Security - Fatal编程技术网

iOS应用程序传输安全不接受TLSv1.2连接和plist异常,没有任何区别

iOS应用程序传输安全不接受TLSv1.2连接和plist异常,没有任何区别,ios,ssl,nginx,app-transport-security,Ios,Ssl,Nginx,App Transport Security,我有一个iOS应用程序,它使用SSL/HTTPS与服务器通信。服务器提供的证书可在TLSv1.2(应用程序传输安全的主要要求)上运行。示例URL演示了这一点(可以通过检查证书来验证TLSv1.2) 然而,该应用程序抛出了与应用程序传输层相关的错误——当谷歌搜索时,这些错误意味着这是因为服务器没有在TLSv1.2上工作。一个示例错误是: NSURLSession/NSURLConnection HTTP加载失败(kCFStreamErrorDomainSSL,-9813) 以及: NSURLSes

我有一个iOS应用程序,它使用SSL/HTTPS与服务器通信。服务器提供的证书可在TLSv1.2(应用程序传输安全的主要要求)上运行。示例URL演示了这一点(可以通过检查证书来验证TLSv1.2)

然而,该应用程序抛出了与应用程序传输层相关的错误——当谷歌搜索时,这些错误意味着这是因为服务器没有在TLSv1.2上工作。一个示例错误是:

NSURLSession/NSURLConnection HTTP加载失败(kCFStreamErrorDomainSSL,-9813)

以及:

NSURLSession/NSURLConnection HTTP加载失败(kCFStreamErrorDomainSSL,-9824)

我甚至在plist文件中添加了一系列异常,例如:

<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key><my top level domain - the app uses a subdomain - allowed below></key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSTemporaryExceptionMinimumTLSVersion</key>
            <string>TLSv1.1</string>
        </dict>
    </dict>
</dict>
</plist>

NSExceptionDomains
n包括多个域
NSTemporary ExceptionalLowsInSecureHttpLoads
NSTemporaryExceptionMinimumTLSVersion
TLSv1.1
但这并没有改变结果

使用的证书是由颁发的免费证书。下面是我的nginx配置(仅供参考)

服务器{
听[:]:443 ssl;
听443ssl;
ssl-on;
ssl_证书/root/ssl/.crt;
ssl\u证书\u key/root/ssl/server.key;
服务器名称api。;
access_log/var/log/nginx/api.access.log;
error\u log/var/log/nginx/api.error.log;
地点^/([a-zA-Z]+)${
代理通行证http://127.0.0.1:5000/$1;
}
}
有人知道为什么会这样吗

谢谢

更新: 根据@Paulw11建议的运行nscurl的测试结果(如下),我决定尝试完全禁用应用程序传输安全性。我将plist中的App Transport Security dictionary更改为以下内容:

<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

NSAllowsArbitraryLoads
我还是会犯同样的错误!那么,如果不是应用程序传输安全问题,是什么导致了这种情况?我再次遇到的错误是:
NSURLSession/NSURLConnection HTTP加载失败(kCFStreamErrorDomainSSL,-9813)

我用于允许旧版本TLS(例如amazonaws)的密钥格式如下所示:

<key>NSIncludesSubdomains</key>
<string>NO</string>
<key>NSThirdPartyExceptionMinimumTLSVersion</key>
<string>TLSv1.1</string>
<key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
<string>NO</string>
n包括多个域
不
第三方例外最小版本
TLSv1.1
N第三方例外要求转发保密
不
结构的其余部分看起来是一样的。在某一点上,我们在根级别上实现了这一点

<key>NSExceptionMinimumTLSVersion</key>
<string>TLSv1.0</string>
NSExceptionMinimumTLSVersion
TLSv1.0
在其SSL/TLS握手中。虽然一些客户可以处理这一问题并建立信任链,但其他客户则不能

您可以通过找到缺少的中间证书,并在nginx中的SSL配置中将其与站点的证书一起提供


请记住删除您可能设置的任何ATS异常

如果在OSX终端中运行
nscurl--ats诊断*yoururl*--verbose
,您会得到什么结果?@Paulw11每个测试都通过。这太令人困惑了!你知道为什么iOS仍然拒绝这个吗?你有没有尝试过通过nginx中的ssl_证书指令为api.branon.co.uk提供中间证书?(combine.crt并从中获得)谢谢@AnandBhat-这起作用了-完全没有预料到这一点,因为我认为他们已经做到了,所以没有看。请随意发布答案,我会接受。添加此选项后(将域更改为我的子域,并将
nsincludesubdomains
更改为NO以匹配您的子域),我收到一个非常类似的错误:
NSURLSession/NSURLConnection HTTP加载失败(kcfstreamerordomainssl,-9802)
但我认为这与TLS版本无关-服务器似乎在TLSv1.2上运行得很舒服(请参见
https://api.branon.co.uk/checkOnline
<key>NSExceptionMinimumTLSVersion</key>
<string>TLSv1.0</string>