【问题标题】:Support of http call and ATS at the same time同时支持http调用和ATS
【发布时间】:2017-03-02 12:55:09
【问题描述】:

我正在开发一个应用程序,用户可以在其中输入我的应用程序可以连接的任意 URL。目标服务器可以是 http 或 https。我在应用程序 info.plist 中添加了以下值。

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

由于上述配置,http 调用和安全服务器工作正常,即使缺少任何安全服务器要求,即 TLS1.2、前向保密等。

我想确保我的安全服务器满足 iOS 文档中提到的所有要求,即 TLS1.2、前向保密,如果我的安全服务器上缺少任何内容,我的请求将失败。如果我的服务器未正确配置 SSL 要求(TLS1.2,前向保密),我已使用以下配置并且请求失败。

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <false/>
</dict>

使用上述配置后,我无法连接 http 服务器。如果安全服务器配置不正确,有什么方法可以连接 http 服务器并请求失败。

注意:我的应用可以连接到用户输入的任何服务器。我不能使用 NSExceptionDomains 配置来指定服务器。

【问题讨论】:

    标签: ios app-transport-security


    【解决方案1】:

    NSExceptionDomains 不仅允许在某些域上进行不太安全的设置,您还可以将其用于相反的情况,例如默认情况下允许任意加载,然后添加需要更安全设置的例外:

    <key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key>
        <true/>
        <key>NSExceptionDomains</key>
        <dict>
            <key>example.com</key>
            <dict>
                <key>NSIncludesSubdomains</key>
                <true/>
                <key>NSExceptionAllowsInsecureHTTPLoads</key>
                <false/>
                <key>NSExceptionMinimumTLSVersion</key>
                <string>TLSv1.2</string>
                <key>NSExceptionRequiresForwardSecrecy</key>
                <true/>
            </dict>
        </dict>
    </dict>
    

    【讨论】:

    • 感谢您的回复。假设有n台服务器,我事先不知道域名。稍后将添加新服务器。上述方案只有在我知道服务器地址的情况下才有效。
    • 唯一的方法是在你的代码中实现 ATS 检查,同时关闭 iOS 开箱即用的 ATS 检查。那么应用程序如何知道是否执行 ATS 以及何时忽略任何错误?从服务器源下载的域列表?
    • 你不能一边吃蛋糕一边吃。
    猜你喜欢
    • 2023-02-14
    • 1970-01-01
    • 1970-01-01
    • 2017-01-30
    • 1970-01-01
    • 2018-11-30
    • 2023-04-02
    • 2015-09-22
    相关资源
    最近更新 更多