【问题标题】:How can we use HTTP and HTTPS both ATS (App Transport Security) in One Application?我们如何在一个应用程序中同时使用 HTTP 和 HTTPS ATS(应用程序传输安全)?
【发布时间】:2015-09-25 03:05:06
【问题描述】:

Apple 宣布了适用于 iOS 9 和 OSX 10.11 El Capitan 的“App Transport Security”。 iOS 9 的“What’s New in iOS”指南解释道:

应用传输安全 (ATS) 允许应用向其添加声明 Info.plist 文件,用于指定需要安全的域 沟通。 ATS 防止意外泄露,提供安全的 默认行为,并且易于采用。您应该尽快采用 ATS 尽可能,无论您是在创建新应用程序还是 更新现有的。

如果我们想删除或禁用 ATS 意味着我们只想使用 HTTP,那么我们将在 .plist 文件中输入如下:

<key>NSAppTransportSecurity</key>
<dict>
  <!--Include to allow all connections (DANGER)-->
  <key>NSAllowsArbitraryLoads</key>
      <true/>
</dict>

如果我们的域在 HTTPS 中,我们将在 .plist 文件中输入如下:

<key>NSAppTransportSecurity</key>
<dict>
  <key>NSExceptionDomains</key>
  <dict>
    <key>yourserver.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>

问题是:

如果我的应用程序仅在 HTTP 等 Web 服务上运行。我想使用 HTTPS 域,如谷歌地图或 Facebook 登录等。或者像一个 web 服务这样的东西是用于 HTTPS 域的。

那么我们如何将.plist文件中的两者结合起来呢?

【问题讨论】:

  • 那么,您只想对特定域使用 HTTPS,而对其他所有域使用 HTTP?
  • @NicolasMiari 两种情况都是。反之亦然。
  • 只需为您想要 https 的域添加例外,并且不要包含 NSTemporaryExceptionAllowsInsecureHTTPLoads
  • @Paulw11 谢谢。你能在答案中描述更多吗?

标签: ios objective-c swift ios9 app-transport-security


【解决方案1】:

如果您的应用程序(例如第三方网络浏览器) 需要加载任意内容,Apple 提供了一种完全禁用 ATS 的方法,但我怀疑您最好使用此功能谨慎:

完全禁用ATS。只需在您的 Info.plist 文件中包含以下内容,然后您就可以在一个应用程序中使用 HTTPHTTPS

<key>NSAppTransportSecurity</key>
<dict>
      <!--Include to allow all connections (DANGER)-->
      <key>NSAllowsArbitraryLoads</key>
      <true/>
</dict>

希望这会有所帮助!

【讨论】:

  • 完全禁用 ATS 后我们可以将我们的应用上传到 App Store 吗?
猜你喜欢
  • 1970-01-01
  • 2016-12-11
  • 2016-06-07
  • 2017-01-21
  • 2019-03-07
  • 1970-01-01
  • 2018-10-15
  • 2017-04-15
  • 2016-02-09
相关资源
最近更新 更多