1

我有一个使用 SSL/HTTPS 与服务器通信的 iOS 应用程序。服务器提供的证书适用于 TLSv1.2(应用程序传输安全的主要要求)。演示这一点的示例 URL(可以通过检查证书来验证 TLSv1.2)是https://api.branon.co.uk/checkOnline

但是,该应用程序正在引发与应用程序传输层相关的错误——当谷歌搜索时,这些错误意味着这是因为服务器没有在 TLSv1.2 上运行。一个示例错误是:

NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9813)

和:

NSURLSession/NSURLConnection HTTP load failed (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>

但这不会改变结果。

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

server {
    listen [::]:443 ssl;
    listen 443 ssl;
    ssl on;
    ssl_certificate /root/ssl/<domain>.crt;
    ssl_certificate_key /root/ssl/server.key;
    server_name api.<domain>;
    access_log /var/log/nginx/api.access.log;
    error_log /var/log/nginx/api.error.log;
    location ~ ^/([a-zA-Z]+)$ {
        proxy_pass http://127.0.0.1:5000/$1;
    }
}

有人知道为什么会这样吗?

谢谢!

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

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

我仍然得到同样的错误!因此,如果不是 App Transport Security,可能是什么原因造成的?我再次遇到的那个错误是: NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9813)

4

2 回答 2

2

服务器在其SSL/TLS 握手中未提供完整的证书链。虽然一些客户可以处理此问题并建立信任链,但其他客户则不能。

您可以通过https://whatsmychaincert.com/?api.branon.co.uk找到丢失的中间证书,并在 nginx 的 SSL 配置中将其与您的站点证书一起提供。

请记住删除您可能已经设置的任何 ATS 例外!

于 2016-03-24T21:30:36.500 回答
1

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

<key>NSIncludesSubdomains</key>
<string>NO</string>
<key>NSThirdPartyExceptionMinimumTLSVersion</key>
<string>TLSv1.1</string>
<key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
<string>NO</string>

结构的其余部分看起来相同。有一次,我们在根级别有这个。

<key>NSExceptionMinimumTLSVersion</key>
<string>TLSv1.0</string>
于 2016-03-23T21:35:50.663 回答