尝试通过双向SSL(HTTPS)连接到f5 BigIP服务器时,我在iOS客户端遇到一个奇怪的错误 - 只有在服务器不需要时,客户端才能通过其证书验证服务器SSL协商期间的客户端证书。签署服务器的根CA和我的客户端证书的证书已在我的可信锚证书列表中。
以下是我尝试过的每个测试中的步骤,以及他们的SSL协商结果:
setAllowsAnyHTTPSCertificate:YES
- 仅用于测试目的)在案例1和案例2之间,只有服务器被更改为需要客户端证书(从而启用双向SSL),而客户端在两种情况下都验证服务器证书。在案例2和案例3之间,客户端更改为接受所有服务器证书,而服务器在两种情况下都需要客户端证书。
所以看起来我只能在任一方向实现单向SSL而不能实现双向SSL。这很奇怪,因为客户端验证服务器的初始步骤应该在服务器请求客户端证书之前发生,因此每次都会产生相同的结果。我从测试用例2得到的错误如下:
此服务器的证书无效。你可能正在连接 一个冒充“server.myexample.com”的服务器 将您的机密信息置于危险之中。发生错误 提取https://server.myexample.com/service:错误 Domain = NSURLErrorDomain Code = -1202“此服务器的证书是 无效。您可能正在连接到假装的服务器 “server.myexample.com”可以提供您的机密信息 处于危险之中。
我收到包含相同信息但指定错误的其他消息:NSErrorFailingURLStringKey
,NSErrorFailingURLKey
,NSUnderlyingError
和NSURLErrorFailingURLPeerTrustErrorKey
。
我不相信我需要为双向和单向SSL提供不同的服务器证书,还是我?
提前致谢!
答案 0 :(得分:0)
问题是我在f5服务器上的iRule中有客户端请求。我删除了iRule的这一部分,并将请求添加到客户端SSL配置文件中。这似乎适用于iOS客户端,这意味着iOS代码可能有些奇怪,因为我测试的所有浏览器都以我提出请求的方式工作(iRule或客户端SSL配置文件)。 iOS应用程序仅适用于在客户端SSL配置文件中发出请求。