应用程序传输安全不适用于 .ninja 域名 (Swift2 / XCode7)

App Transport Security NOT Working for .ninja domain names (Swift2 / XCode7)

使用 XCode7/Swift2 并尝试加载网页时,我一直被 App Transport Security (ATS) 阻止——原因似乎是 ATS 不适用于 .ninja 网络扩展。

意思是,您可以为 domains.com 添加例外,您可以在网络视图中访问该站点。但是,您不能为 domains.ninja 添加例外,尽管这是一个有效的网址。我已经完全测试过了。

现在我能够从 somewebsite.ninja 加载内容的唯一方法是在我的 Info.plist 文件中完全关闭 ATS (NSAppTransportSecurity > NSAllowsArbitraryLoads > YES),但我知道这是做事的正确方法。我还担心这可能会在我将应用程序完成后提交到应用程序商店时引起问题。

有人知道如何为 .ninja 域添加 ATS 例外吗?

<key>NSAppTransportSecurity</key>
    <dict>
        <key>NSExceptionDomains</key>
        <dict>
            <key>domains.com</key>
            <dict>
                <key>NSTemporaryExceptionMinimumTLSVersion</key>
                <string>TLSv1.1</string>
                <key>NSIncludesSubdomains</key>
                <true/>
                <key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
                <true/>
            </dict>
            <key>domains.ninja</key>
            <dict>
                <key>NSTemporaryExceptionMinimumTLSVersion</key>
                <string>TLSv1.1</string>
                <key>NSIncludesSubdomains</key>
                <true/>
                <key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
                <true/>
            </dict>
        </dict>
    </dict>

以上将允许您在网络视图中加载 domains.com 而不是 domains.ninja,即使 keys/options 除了域名扩展名之外完全相同。

我能够在 UIWebView 中加载 domains.ninja 页面,但我必须包括该页面引用的所有其他域 - 各种分析、CDN 和跟踪站点。

我的 info.plist 摘录是 -

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>domains.ninja</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
        <key>www.geoplugin.net</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
        <key>marketo.net</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
        <key>googleapis.com</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
        <key>netdna.bootstrapcdn.com</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
        <key>www.google-analytics.com</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
        <key>mktoresp.com</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
        <key>gstatic.com</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
    </dict>
</dict>

因此,最后,通常只关闭 ATS 并为支持 TLS 的域添加例外可能更简单。