同时支持http呼叫和ATS

时间:2016-10-20 13:28:47

标签: ios app-transport-security

我正在使用一个应用程序,用户可以在其中输入我的应用程序可以连接的任意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配置来指定服务器。

1 个答案:

答案 0 :(得分: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>