根据以下错误消息,我需要在info.plist中设置什么来启用HTTP模式?

传输安全性已阻止明文HTTP(HTTP://)资源因为它是不安全的。可以通过以下方式配置临时异常应用程序的Info.plist文件。

假设我的域名是example.com。


当前回答

对于那些来到这里试图找到其WKWebView始终为白色且不加载任何内容的原因的人(正如本文所述,我如何让WKWebView在swift和macOS应用程序中工作):

如果以上所有的火箭科学都不适用于你,请检查显而易见的:沙盒设置

作为swift和cocoa的新手,但在编程方面非常有经验,我花了大约20个小时来找到这个解决方案。数十个时髦的iOS教程和苹果主题演讲中都没有提到这个小复选框。

其他回答

2015-09-25(2015-09-18 Xcode更新后):

我用了一种非懒惰的方法,但没有奏效。以下是我的尝试。

第一

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>www.xxx.yyy.zzz</key>
        <dict>
            <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSTemporaryExceptionMinimumTLSVersion</key>
            <string>TLSv1.1</string>
            <key>NSIncludesSubdomains</key>
            <true/>
        </dict>
    </dict>
</dict>

其次,

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>www.xxx.yyy.zzz</key>
        <dict>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSExceptionMinimumTLSVersion</key>
            <string>TLSv1.1</string>
            <key>NSIncludesSubdomains</key>
            <true/>
        </dict>
    </dict>
</dict>

最后,我使用了懒惰的方法:

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

这可能有点不安全,但我找不到其他解决方案。

开发示例

这里是一个plist的截图,它保持ATS的完整性(=安全),但允许通过HTTP而不是HTTPS连接到本地主机。它在Xcode 7.1.1中工作。

如何修复?

按照以下步骤进行修复。

对于那些想了解更多原因以及如何解决问题的人,请阅读以下内容。

随着iOS 9的推出,为了提高应用程序与web服务之间连接的安全性,应用程序与其web服务之间的安全连接必须遵循最佳实践。最佳实践行为由App Transport Security强制执行,以:

防止意外披露,以及提供安全的默认行为。

正如App Transport Security Technote中所述,在与web服务通信时,App Transport安全现在具有以下要求和行为:

服务器必须至少支持传输层安全(TLS)协议1.2版。连接密码仅限于提供前向保密的密码(请参阅下面的密码列表)证书必须使用SHA256或更好的签名哈希算法进行签名,使用2048位或更高的RSA密钥或256位或较大椭圆曲线(ECC)密钥。无效的证书会导致硬故障和无连接。

换句话说,您的web服务请求应该:a.)使用HTTPS,b.)使用TLS v1.2进行加密,并具有转发保密性。

然而,正如在其他文章中提到的,您可以通过在应用程序的Info.plist中指定不安全的域来覆盖应用程序传输安全中的这种新行为。


要覆盖,您需要将NSAppTransportSecurity>NSExceptionDomains字典财产添加到Info.plist。接下来,您将把web服务的域添加到NSException Domains词典。

例如,如果我想绕过主机www.yourwebservicehost.com上web服务的应用程序传输安全行为,那么我将执行以下操作:

在Xcode中打开应用程序。在项目导航器中找到Info.plist文件,然后用鼠标右键单击它并选择“打开为”>“源代码”菜单选项。属性列表文件将显示在右侧窗格中。将以下财产块放入主财产字典中(在第一个<dict>下)。


<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>www.example.com</key>
        <dict>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSExceptionMinimumTLSVersion</key>
            <string>TLSv1.1</string>
            <key>NSIncludesSubdomains</key>
            <true/>
        </dict>
    </dict>
</dict>

如果您需要为其他域提供例外,则可以在NSExceptionDomains下添加另一个字典属性。

要了解更多有关上述密钥的信息,请阅读本已提及的技术说明。

以下是直观的设置: