1

我有一个本地 IOS 应用程序,它连接到 Webseal 6.1 后面的后端。这最初是针对 IOS 7 编写的,并且大量使用 NSURLConnection 与后端服务器进行通信。

在我将设备升级到 IOS 9 之前,此应用程序运行良好。所以我调查了导致问题的原因,我发现这是因为 IOS 9 中引入的 App Transport Security 强制应用程序连接到后端使用 TLS 1.2 连接协议。

我花了几个小时寻找这个问题的解决方案,它总是引导我找到以下解决方案:

<key>NSAppTransportSecurity</key>
<dict>
  <key>NSExceptionDomains</key>
  <dict>
  <key>my-server-domain.com</key>
  <dict>
      <!--Include to allow subdomains-->
      <key>NSIncludesSubdomains</key>
      <true/>
      <!--Include to allow insecure HTTP requests-->
      <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
      <true/>
      <!--Include to specify minimum TLS version-->
      <key>NSTemporaryExceptionMinimumTLSVersion</key>
      <string>TLSv1.0</string>
    </dict>
  </dict>
</dict>

上面的 info.plist 添加没有解决问题并且正在返回CFNetwork SSLHandshake failed (-9824)。所以我搜索了更多答案,我发现还有另一个可以使用的密钥。所以我在plist中添加了以下内容。 NSTemporaryExceptionRequiresForwardSecrecy并设置为NO。SSL 错误仍然是他们的错误代码CFNetwork SSLHandshake failed (-9801)

我偶然发现的另一个博客提到不应使用密钥,temporary因为这是为 IOS 9 Beta 设计的,因此我通过删除temporary: from NSTemporaryExceptionAllowsInsecureHTTPLoadsto NSExceptionAllowsInsecureHTTPLoadsNSTemporaryExceptionMinimumTLSVersiontoNSExceptionMinimumTLSVersionNSTemporaryExceptionRequiresForwardSecrecytoNSExceptionRequiresForwardSecrecy来更改密钥,但无济于事。

我尝试了上述属性的键和值的不同组合,但错误仍然相同。

我发现的另一个解决方案是关闭 IOS 9 严格的传输检查。

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

但这也行不通。现在我被这个问题困住了,我的应用程序不可用。

我知道可以通过修复我的后端以使用 TLS 1.2 进行传输来解决此问题,但现在这不是一个选项。目前唯一可以接受的是修改客户端应用程序。

我希望有人可以指出任何缺失的配置以使我的应用程序正常工作。谢谢你。

4

0 回答 0