【问题标题】:How can I prevent my app from downgrading from TLSv1.2 on iOS 8?如何防止我的应用在 iOS 8 上从 TLSv1.2 降级?
【发布时间】:2016-05-15 23:59:17
【问题描述】:

我试图限制我的应用程序与运行 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 中是否不受支持,或者我是否需要采取其他步骤?

【问题讨论】:

  • 可能是 iOS 8 中的一个错误。我会尝试通过仅允许 TLSv1.2 使用的强密码(请参阅SSLSetEnabledCiphers)来解决它——您可以从 ATS 规范中获取列表。还有一个SSLSetSessionStrengthPolicy 函数,但它似乎已被弃用。

标签: ios secure-transport


【解决方案1】:

您可以使用 Apple 在 iOS 9 中的新应用程序传输安全性将 iOS 配置为仅连接到满足最低 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 并且需要这样做的人,因为最初的问题不包括这个限制。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-03
    • 2017-09-14
    • 1970-01-01
    相关资源
    最近更新 更多