如何防止我的应用程序在iOS 8上从TLSv1.2降级?

时间:2016-02-05 21:25:11

标签: ios secure-transport

我正在尝试限制我的应用与在1.2之前运行任何版本的TLS的服务器进行通信。从文档中看来,我应该可以通过调用SSLSetProtocolVersionMin来做到这一点,所以我已经这样做了:

SSLContextRef context = SSLCreateContext(NULL, kSSLClientSide, kSSLStreamType);
SSLSetProtocolVersionMax(context, kTLSProtocol12);
SSLSetProtocolVersionMin(context, kTLSProtocol12);

我已验证对SSLSetProtocolVersionMin的调用未返回错误,但我仍然可以连接到协商到SSLv3的服务器。

SSLSetProtocolVersionMax似乎工作正常,因为当我将其设置为TLSv1.1而服务器仅设置为TLSv1.2时,我无法连接到服务器。

似乎这在iOS 9上按预期工作。有人知道iOS 8中是否不支持此功能,或者我需要采取其他步骤吗?

1 个答案:

答案 0 :(得分:0)

您可以将iOS配置为仅使用Apple在iOS 9中的新应用程序传输安全性连接到符合最低TLS版本的服务器。

您可以将以下代码添加到Info.plist文件中:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>mydomain.com</key>
        <dict>
            <key>NSThirdPartyExceptionMinimumTLSVersion</key>
            <string>1.2<string/>
        </dict>
    </dict>
</dict>

您可以查看WWDC video

编辑:

我看到你添加到你的问题中,说明你需要在没有ATS的iOS 8上完成这个。但希望这个答案可以帮助那些使用iOS 9并且需要这样做的人,因为最初的问题不包括这个限制。