Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 传输安全性已阻止明文HTTP_Ios_Xcode_Ios9_Ios10_App Transport Security - Fatal编程技术网

Ios 传输安全性已阻止明文HTTP

Ios 传输安全性已阻止明文HTTP,ios,xcode,ios9,ios10,app-transport-security,Ios,Xcode,Ios9,Ios10,App Transport Security,根据以下错误消息,我需要在我的info.plist中设置什么才能启用HTTP模式 传输安全性已阻止明文HTTP(HTTP://)资源 加载,因为它是不安全的。可以通过配置临时异常 你的应用程序的Info.plist文件 假设我的域名是example.com参见论坛帖子 还有页面 例如,您可以添加特定域,如: <key>NSAppTransportSecurity</key> <dict> <key>NSExceptionDomains<

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

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

假设我的域名是
example.com

参见论坛帖子

还有页面

例如,您可以添加特定域,如:

<key>NSAppTransportSecurity</key>
<dict>
  <key>NSExceptionDomains</key>
  <dict>
    <key>example.com</key>
    <dict>
      <!--Include to allow subdomains-->
      <key>NSIncludesSubdomains</key>
      <true/>
      <!--Include to allow HTTP requests-->
      <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
      <true/>
      <!--Include to specify minimum TLS version-->
      <key>NSTemporaryExceptionMinimumTLSVersion</key>
      <string>TLSv1.1</string>
    </dict>
  </dict>
</dict>
NSAppTransportSecurity
NSExceptionDomains
example.com
n包括多个域
NSTemporary ExceptionalLowsInSecureHttpLoads
NSTemporaryExceptionMinimumTLSVersion
TLSv1.1
惰性选项是:

<key>NSAppTransportSecurity</key>
<dict>
  <!--Include to allow all connections (DANGER)-->
  <key>NSAllowsArbitraryLoads</key>
      <true/>
</dict>
NSAppTransportSecurity
NSAllowsArbitraryLoads
注:
info.plist
是一个XML文件,因此您可以将此代码或多或少地放在文件中的任何位置。

使用NSAppTransportSecurity:

您必须在info.plist文件的NSAppTransportSecurity字典下,将nsallowsrabiryloads键设置为YES


这是一个快速解决方法(但不推荐),可将其添加到plist中:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>
如果要允许指定地址的子域的不安全连接

最好的方法是阻止所有任意加载(设置为false)并添加异常,以便只允许我们知道的地址是正确的

2018年更新:

苹果不建议关闭此功能-更多信息可以在中找到,更多关于安全的解释


出于历史原因和开发阶段,保留原始答案这是经过测试的,并正在使用iOS 9 GM seed-这是允许特定域使用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>
NSAppTransportSecurity
NSAllowsArbitraryLoads
NSExceptionDomains
example.com
n包括多个域
NSTemporary ExceptionalLowsInSecureHttpLoads
NSTemporaryExceptionMinimumTLSVersion
TLSv1.1

NSAllowsArbitraryLoads
必须为
false
,因为它不允许所有不安全的连接,但例外列表允许连接到一些不带HTTPS的域。

传输安全在iOS 9.0或更高版本上可用。尝试在应用程序内调用WS时,可能会出现以下警告:

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

将以下内容添加到Info.plist将禁用ATS:

<key>NSAppTransportSecurity</key>
<dict>
     <key>NSAllowsArbitraryLoads</key><true/>
</dict>
NSAppTransportSecurity
NSAllowsArbitraryLoads
使用:


在类型为字典的plist文件中添加一个新项NSAppTransportSecurity,然后在类型为布尔的字典中添加子项NSAllowsArbitraryLoads,并设置布尔值YES。这对我很有用。

对于那些想了解发生这种情况的原因以及如何解决的人,请阅读下面的内容

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

  • 防止意外披露,以及
  • 提供安全的默认行为
如中所述,在与web服务通信时,应用程序传输安全现在具有以下要求和行为:

  • 服务器必须至少支持传输层安全(TLS)协议版本1.2
  • 连接密码仅限于提供前向保密的密码(请参阅下面的密码列表)
  • 证书必须使用SHA256或更好的签名哈希算法进行签名,该算法使用2048位或更高的RSA密钥或256位或更高的RSA密钥 大椭圆曲线(ECC)密钥
  • 无效证书会导致硬故障和无连接
换句话说,您的web服务请求应该:a.)使用HTTPS,b.)使用具有前向保密性的TLS v1.2进行加密

但是,正如在其他帖子中提到的,您可以通过在应用程序的
Info.plist
中指定不安全的域,从应用程序传输安全性中覆盖此新行为


要覆盖,您需要将
NSAppTransportSecurity
NSExceptionDomains
字典属性添加到
Info.plist
。接下来,您将把web服务的域添加到
NSExceptionDomains
字典中

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

"NSAppTransportSecurity": [
   {
      "xml": "<dict><key>NSAllowsArbitraryLoads</key><true /></dict>"
   }
]
  • 在Xcode中打开你的应用程序

  • 在ProjectNavigator中找到
    Info.plist
    文件,然后“鼠标右键”单击该文件并选择OpenAs>SourceCode菜单选项。属性列表文件将显示在右侧窗格中

  • 将以下属性块放在主属性字典中(在第一个
    下)


  • NSAppTransportSecurity
    NSExceptionDomains
    www.example.com
    N异常低安全Http负载
    NSExceptionMinimumTLSVersion
    TLSv1.1
    n包括多个域
    
    如果您需要为其他域提供异常,那么您可以在
    NSEx下面添加另一个字典属性
    
    <key>NSAppTransportSecurity</key>
    <dict>
         <key>NSAllowsArbitraryLoads</key><true/>
    </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>
    
    <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>
    
    /usr/bin/nscurl --ats-diagnostics --verbose https://your-domain.com
    
     <key>NSAppTransportSecurity</key><dict><key>NSAllowsArbitraryLoads</key><true/></dict>
    
     "</dict>
    </plist>"
    
    "NSAppTransportSecurity": [
       {
          "xml": "<dict><key>NSAllowsArbitraryLoads</key><true /></dict>"
       }
    ]
    
    "*-Info.plist": {
       "parents": {
       }
    }
    
    /usr/bin/nscurl --ats-diagnostics --verbose https://www.example.com/whatever
    
    {
        NSExceptionDomains = {
            "www.example.com" = {
                NSExceptionRequiresForwardSecrecy = false;
            };
        };
    }
    
    <key>NSAppTransportSecurity</key>
    <dict>
      <key>NSExceptionDomains</key>
      <dict>
        <key>myawesomemacbook.local</key>
        <dict>
          <!--Include to allow subdomains-->
          <key>NSIncludesSubdomains</key>
          <true/>
          <!--Include to allow HTTP requests-->
          <key>NSExceptionAllowsInsecureHTTPLoads</key>
          <true/>
        </dict>
      </dict>
    </dict>
    
    <key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key>
        <true/>
    </dict>
    
    <key>NSAppTransportSecurity</key>
    <dict>
        <key>NSExceptionDomains</key>
        <dict>
            <key>example.com</key>
            <dict>
                <key>NSExceptionAllowsInsecureHTTPLoads</key>
                <true/>
                <key>NSIncludesSubdomains</key>
                <true/>
            </dict>
        </dict>
    </dict>
    
    <key>App Transport Security Settings</key>
    <dict>
         <key>Allow Arbitrary Loads</key><true/>
    </dict>
    
    <key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key>
        <true/>
    </dict>
    
      1. Follow the follow the screen shot. Do it in Targets info Section.