根据以下错误消息,我需要在info.plist中设置什么来启用HTTP模式?
传输安全性已阻止明文HTTP(HTTP://)资源因为它是不安全的。可以通过以下方式配置临时异常应用程序的Info.plist文件。
假设我的域名是example.com。
根据以下错误消息,我需要在info.plist中设置什么来启用HTTP模式?
传输安全性已阻止明文HTTP(HTTP://)资源因为它是不安全的。可以通过以下方式配置临时异常应用程序的Info.plist文件。
假设我的域名是example.com。
当前回答
以下是直观的设置:
其他回答
这是在iOS 9 GM种子上进行测试和工作的-这是允许特定域使用HTTP而不是HTTPS的配置:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<false/>
<key>NSExceptionDomains</key>
<dict>
<key>example.com</key> <!--Include your domain at this line -->
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSTemporaryExceptionMinimumTLSVersion</key>
<string>TLSv1.1</string>
</dict>
</dict>
</dict>
NSAllowsArbitraryLoads必须为false,因为它不允许所有不安全的连接,但例外列表允许连接到一些没有HTTPS的域。
这里是直观的:
这是在plist中添加此项的快速解决方法(但不推荐):
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
这意味着(根据苹果的文档):
NSallows轨道荷载用于为NSExceptionDomains字典中未列出的任何域禁用应用程序传输安全性的布尔值。列出的域使用为该域指定的设置。默认值NO要求所有连接的默认应用程序传输安全行为。
我真的推荐链接:
苹果的技术说明WWDC 2015第706届会议(安全和应用程序)于1:50左右开始WWDC 2015第711届会议(与NSURLSession建立网络)博客文章用应用程序传输安全运送应用程序
这有助于我理解原因和所有含义。
下面的XML(在Info.plist文件中)将:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<false/>
<key>NSExceptionDomains</key>
<dict>
<key>PAGE_FOR_WHICH_SETTINGS_YOU_WANT_TO_OVERRIDE</key>
<dict>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
</dict>
</dict>
</dict>
不允许对所有页面进行任意调用,但PAGE_for_WHICH_SETTING_YOU_WANT_TO_OVERRIDE将允许连接使用HTTP协议。
在上面的XML中,您可以添加:
<key>NSIncludesSubdomains</key>
<true/>
如果要允许指定地址的子域进行不安全的连接。
最好的方法是阻止所有任意的加载(设置为false),并添加例外以仅允许我们知道的地址正常。
感兴趣的读者
2018年更新:
苹果不建议关闭此功能-更多信息可在2018年WWDC 207会议中找到,并对安全方面的更多内容进行了解释
由于历史原因和发展阶段,保留原始答案
有两种解决方案:
解决方案1:
在Info.plist文件中添加密钥为“NSAppTransportSecurity”的字典在字典中添加另一个关键字为“允许任意加载”的元素
Plist结构应如下图所示。
解决方案2:
在Info.plist文件中添加密钥为“NSAppTransportSecurity”的字典在字典中添加另一个键为“NSExceptionDomains”的元素添加具有NSDictionary类型的键“MyDomainName.com”的元素添加具有布尔类型的键“NSIncludesSubdomains”且值设置为YES的元素添加具有Boolean类型的键“NSTemporaryExceptionAllowsInsecureHTTPLoads”且值设置为YES的元素
Plist结构应如下图所示。
首选解决方案2,因为它只允许选定的域,而解决方案1允许所有不安全的HTTP连接。
对于那些想了解更多原因以及如何解决问题的人,请阅读以下内容。
随着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下添加另一个字典属性。
要了解更多有关上述密钥的信息,请阅读本已提及的技术说明。
默认情况下,iOS仅允许HTTPS API。由于HTTP不安全,您必须禁用应用程序传输安全性。有两种禁用ATS的方法:-
1.在项目info.plist中添加源代码,并在根标记中添加以下代码。
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
2.使用项目信息。
单击左侧窗格中项目上的项目,选择项目作为目标,然后选择信息选项卡。您必须按照以下结构添加字典。