【问题标题】:iOS App Transport Security issueiOS 应用程序传输安全问题
【发布时间】:2016-01-05 03:50:21
【问题描述】:

TL;博士:

我有一个连接到网络服务的 iOS 应用程序满足新 ATS 功能的最低要求。我修改了我的Info.plist 以允许异常,因此我的应用程序仍然可以连接到网络服务。 (NSURLSession/NSURLConnection HTTP load failed on iOS 9 ) 这在开发中可以正常工作,但是,我刚刚推送到商店的更新仍然无法访问 web 服务。我不知道断开连接发生在哪里或如何解决此问题。

===

首先,这一切都发生在模拟器中,当我在 xcode 中直接部署到我的 ipad 时,行为相同:

我正在尝试在我的 iOS 应用程序中通过 https 连接到网络服务。我现在每次尝试连接到网络服务时都会收到此错误:

NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9802)

据我了解,这是因为新的 ATS 功能不允许连接。我已通过将修复程序 (NSURLSession/NSURLConnection HTTP load failed on iOS 9) 应用到我的 Info.plist 文件来确认这一点:

<key>NSAppTransportSecurity</key>
<dict>
  <key>NSExceptionDomains</key>
  <dict>
    <key>mydomain.com</key>
    <dict>
      <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
      <true/>
      <key>NSIncludesSubdomains</key>
      <true/>
      </dict>
  </dict>
</dict>

一旦我把它放进去,它就会毫无问题地连接到网络服务。

显然,虽然我的服务器满足 TLS 1.2 要求和密码要求,但它不满足签名要求 (https://developer.apple.com/library/ios/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html#//apple_ref/doc/uid/TP40009251-SW35 )

但是,我已经对我的应用进行了更新并推送到了应用商店,但我的应用的商店版本无法连接到网络服务。相同的代码在我的本地机器上构建良好,并在从 xcode 部署到我的设备上运行,但商店中的版本似乎忽略了.plist 修复。 我该如何解决这个问题?这对我来说毫无意义。

【问题讨论】:

  • 您是否在生产和开发中使用相同的 API 端点?还是他们不一样?
  • @halbano 是的,我使用的是同一个端点。

标签: ios xcode web-services nsurlconnection app-transport-security


【解决方案1】:

尝试将以下代码添加到您的 info.plist

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

更多信息见链接:apple forum

【讨论】:

  • 这个答案和其他答案一样,没有解释为什么它在开发中有效,但在商店版本中无效。我不想允许任意加载,我只希望我的 web 服务的 API 有一个例外。
【解决方案2】:

试试这个版本的info.plist配置:

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

编辑:尝试将NSExceptionRequiresForwardSecrecy 也指定为NO

【讨论】:

  • 嗨,这看起来和我发布的一样,除了你有 TLSv1.1 异常。我的服务器使用的是 TLSv1.2,所以我不明白为什么会有不同的工作方式。在模拟器中,这与我的原始设置相同。
  • 所以,这就是问题所在,它在我当前的设置下在模拟器中运行良好,所以我看不出稍微修改这些设置将如何解决它在开发中有效但在开发中无效的主要问题我的商店版本。另外,我不应该需要requires forward secrecy exception,因为我使用的是一种公认​​的密码,特别是TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256。再次,该编辑与我的原始版本一起在模拟器中工作
  • 嗯。那我就一头雾水了。
猜你喜欢
  • 2017-03-09
  • 2016-04-29
  • 2016-02-28
  • 2016-07-13
  • 2016-06-07
  • 2016-09-19
  • 2016-11-11
  • 1970-01-01
  • 2016-01-25
相关资源
最近更新 更多