'发生了SSL错误,无法与服务器建立安全连接。验证证书

时间:2016-07-20 18:46:19

标签: ios ssl https

我收到以下错误消息(每次尝试都相同)

  

2016-07-20 20:09:28.013 MyApp [1140:374263] CFNetwork SSLHandshake失败(-9806)   2016-07-20 20:09:28.014 MyApp [1140:374263] NSURLSession / NSURLConnection HTTP加载失败(kCFStreamErrorDomainSSL,-9806)   error =可选(错误域= NSURLErrorDomain代码= -1200"发生SSL错误,无法与服务器建立安全连接。" UserInfo = {_ kCFStreamErrorCodeKey = -9806,NSLocalizedRecoverySuggestion =您要无论如何连接到服务器?,NSUnderlyingError = 0x154dda750 {错误域= kCFErrorDomainCFNetwork代码= -1200"(null)" UserInfo = {_ kCFStreamPropertySSLClientCertificateState = 0,_kCFNetworkCFStreamSSLErrorOriginalValue = -9806,_kCFStreamErrorDomainKey = 3,_kCFStreamErrorCodeKey = -9806 ,NSLocalizedDescription =发生了SSL错误,无法建立与服务器的安全连接。,NSErrorFailingURLKey = https://example.com:8080/api/login,NSErrorFailingURLStringKey = https://example.com:8080/api/login,_ kCFStreamErrorDomainKey = 3})

证书是由letsencrypt提供的经过验证的证书。我一遍又一遍地测试了我的Web服务器配置,一切似乎都应该如此。

运行命令openssl s_client -connect example.com:8080/api/login -tls1_2会得到所有预期的结果:

- 将权限验证为DST Root CA X3,其中包含Apples root CA list

- 返回代码为Verify return code: 0 (ok)

我还运行了几个ssl诊断工具网站,例如digicert,它没有给出任何错误结果。

我可以从iOS设备上的Safari加载域,也可以从我的计算机加载chrome,而不必接受"不受信任的证书"。

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

如果有人遇到同样的问题,那就回答我自己的问题。 在提问时,我们的加密(使用的证书的CA)不支持前向保密用于他们的https证书(至少不是我得到的证书)。苹果默认在当时使用的iOS版本中需要这个(我相信它大概是9.5,但我可能会在这里弄错)。

为了解决前向保密的要求,可以在域例外的Info.plist中指定。

<key>NSAppTransportSecurity</key>
<dict>
  <key>NSExceptionDomains</key>
  <dict>
    <key>example.com</key>
    <dict>
      <key>NSTemporaryExceptionRequiresForwardSecrecy</key>
      <false/>
    </dict>
  </dict>
</dict>

在路上的某个时候,他们将此更改为默认的土地。我不确定这是什么时候,但在iOS 10.0之后它从来都不是问题。