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

6
我得到了以下错误消息(每次都完全相同):
2016-07-20 20:09:28.013 MyApp[1140:374263] CFNetwork SSL握手失败 (-9806) 2016-07-20 20:09:28.014 MyApp[1140:374263] NSURLSession/NSURLConnection HTTP加载失败 (kCFStreamErrorDomainSSL, -9806) 错误=可选项(错误域=NSURLErrorDomain Code=-1200 "发生了SSL错误,无法建立与服务器的安全连接。" UserInfo={_kCFStreamErrorCodeKey=-9806, NSLocalizedRecoverySuggestion=您是否仍要连接到服务器?, NSUnderlyingError=0x154dda750 {错误域=kCFErrorDomainCFNetwork Code=-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,该机构包含在{{link1:Apples根CA列表}}中。
- 返回代码是Verify return code: 0 (ok) 我还运行了几个ssl诊断工具网站,例如digicert,没有错误结果。
我可以在iOS设备上使用Safari加载域名,也可以在我的计算机上使用Chrome,而无需接受“不受信任的证书”。 有什么建议吗?
2个回答

3
若有人遇到同样的问题,我将回答自己的问题。在提问时,使用的证书的CA Let's Encrypt不支持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>

在某个时期,它们将这个默认值更改为false。我不确定这是何时发生的,但在iOS 10.0之后就不再是问题了。


那么在哪里可以找到这个文件?Info.plist,在 Joomla 网站上播放视频时我遇到了这个问题。 - Amir978

1
如果有人在2023年遇到自签名证书的问题,这里是完整的解决方案。
<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>YOUR-URL.COM</key>
        <dict>
            <key>NSAllowsArbitraryLoads</key>
            <true/>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSTemporaryExceptionRequiresForwardSecrecy</key>
            <false/>
        </dict>
    </dict>
</dict>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接