0

当我尝试通过 2 路 SSL (HTTPS) 连接到 f5 BigIP 服务器时,我的 iOS 客户端遇到了一个奇怪的错误 - 只有当服务器不需要客户端证书时,客户端才能通过其证书验证服务器在 SSL 协商期间。签署服务器和我的客户端证书的根 CA 的证书已经在我的受信任锚证书列表中。

以下是我尝试过的每个测试中的步骤,以及它们的 SSL 协商结果:

  1. 服务器不需要客户端证书,客户端验证服务器证书(1-way ssl:客户端->服务器)
    • 客户端验证服务器证书(通过)
    • 客户端将其证书提供给服务器(未选中 - 服务器不需要)
    • 连接建立,服务器允许客户端访问
  2. 服务器需要客户端证书,客户端验证服务器证书(2-way SSL:客户端 <-> 服务器)
    • 客户端验证服务器证书(失败!!)
    • 没有其他事情发生
  3. 服务器需要客户端证书,客户端接受任何受信任的服务器(单向 SSL:客户端 <- 服务器)
    • 客户端不验证服务器证书(setAllowsAnyHTTPSCertificate:YES- 仅用于测试目的)
    • 客户端将其证书提供给服务器(通过)
    • 连接建立,服务器允许客户端访问

在情况 1 和 2 之间,只有服务器更改为需要客户端证书(从而启用 2-way SSL),而客户端在两种情况下都验证服务器证书。在情况 2 和 3 之间,客户端更改为接受所有服务器证书,而服务器在这两种情况下都需要客户端证书。

所以看起来我只能在任一方向上实现 1-way SSL,但不能实现 2-way SSL。这很奇怪,因为客户端验证服务器的初始步骤应该发生在服务器请求客户端证书之前,因此每次都会产生相同的结果。我从测试用例 2 得到的错误如下:

此服务器的证书无效。您可能正在连接到伪装成“server.myexample.com”的服务器,这可能会使您的机密信息面临风险。获取https://server.myexample.com/service时出错:错误域 = NSURLErrorDomain 代码 = -1202“此服务器的证书无效。您可能正在连接到伪装成“server.myexample”的服务器。 com”,这可能会使您的机密信息面临风险。

我收到具有相同信息但指定错误的其他消息:NSErrorFailingURLStringKeyNSErrorFailingURLKeyNSUnderlyingErrorNSURLErrorFailingURLPeerTrustErrorKey

我认为我不需要为 2-way 与 1-way SSL 提供不同的服务器证书,或者我需要吗?

提前致谢!

4

1 回答 1

0

问题是我在 f5 服务器上的 iRule 中有客户端请求。我删除了 iRule 的这一部分并将请求添加到客户端 SSL 配置文件中。这似乎适用于 iOS 客户端,这意味着 iOS 代码可能有些奇怪,因为我测试过的所有浏览器都以我发出请求的方式工作(iRule 或客户端 SSL 配置文件)。iOS 应用程序仅适用于在客户端 SSL 配置文件中发出请求。

于 2013-10-29T16:47:59.913 回答