根据以下错误消息,我需要在info.plist中设置什么来启用HTTP模式?
传输安全性已阻止明文HTTP(HTTP://)资源因为它是不安全的。可以通过以下方式配置临时异常应用程序的Info.plist文件。
假设我的域名是example.com。
根据以下错误消息,我需要在info.plist中设置什么来启用HTTP模式?
传输安全性已阻止明文HTTP(HTTP://)资源因为它是不安全的。可以通过以下方式配置临时异常应用程序的Info.plist文件。
假设我的域名是example.com。
当前回答
**终于!!!已解决的应用程序传输安全**
1. Follow the follow the screen shot. Do it in Targets info Section.
其他回答
在Swift 5中,我们有两种方法来解决这个问题。我们需要在info.plist中添加NSAppTransportSecurity
我给出了info.plist源代码和图片以供参考
第一个是在info.plist中添加NSAppTransportSecurity->NSAllowsArbitraryLoads。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<false/>
</dict>
</dict>
</plist>
另一种方法是在info.plist中添加NSAppTransportSecurity->NSExceptionDomains,并添加URL的域,并启用加载子域(NSIncludesSubdomains)和允许不安全HTTP加载(NSExceptionAllowsInsecureHTTPLoads)的权限
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>www.7timer.info</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
</dict>
</dict>
</dict>
</dict>
</plist>
根据苹果的说法,通常禁用ATS会导致应用程序被拒绝,除非你有充分的理由这样做。即使如此,你也应该为可以安全访问的域添加例外。
苹果有一个很好的工具,它可以准确地告诉你要使用什么设置:在终端中,输入
/usr/bin/nscurl --ats-diagnostics --verbose https://www.example.com/whatever
和nscurl将检查此请求是否失败,然后尝试各种设置,并告诉您通过的是哪一个,以及要做什么。例如,对于我访问的某个第三方URL,此命令告诉我此字典通过了:
{
NSExceptionDomains = {
"www.example.com" = {
NSExceptionRequiresForwardSecrecy = false;
};
};
}
要区分您自己的站点和您无法控制的第三方站点,请使用例如键NSThirdPartyExceptionRequiresForwardSecrecy。
如本技术说明所述,确定可以自动执行哪些设置:
/usr/bin/nscurl --ats-diagnostics --verbose https://your-domain.com
**终于!!!已解决的应用程序传输安全**
1. Follow the follow the screen shot. Do it in Targets info Section.
对于那些想了解更多原因以及如何解决问题的人,请阅读以下内容。
随着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下添加另一个字典属性。
要了解更多有关上述密钥的信息,请阅读本已提及的技术说明。