我得到以下错误消息(每次尝试都是相同的)
2016-07-20 20:09:28.013 MyApp[1140:374263] CFNetwork SSLHandshake failed(-9806)2016-07-20 20:09:28.014 MyApp[1140:374263] NSURLSession/NSURLConnection HTTP load failed(kCFStreamErrorDomainSSL,-9806)error=Optional(Error Domain=NSURLErrorDomain Code=-1200“An SSL error has occurred and a secure connection to the server cannot be made.”UserInfo={_kCFErrorCodeKey =-9806,NSLocalizedRecoverySugggestion =是否仍要连接到服务器?,NSUnderlyingError= 0x 154 dda 750 {Error Domain=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
,包含在Apples root CA list中 - 返回的代码是
Verify return code: 0 (ok)
我还运行了几个ssl诊断工具网站,如digicert,它没有给出任何错误结果。
我可以从iOS设备上的Safari加载域,以及从我的电脑上加载Chrome,而不必接受“不受信任的证书”。
有什么建议吗?
2条答案
按热度按时间k10s72fa1#
如果有人遇到同样的问题,我会回答我自己的问题。在提出问题时,Let's Encrypt(所使用证书的CA)不支持其https证书的前向保密(至少不是我得到的那个)。苹果在当时使用的iOS版本中默认要求这一点(我相信它在9.5左右,但我可能弄错了)。
为了绕过前向保密的要求,可以在Info.plist中的域异常下指定。
字符串
沿着某个时候,他们将其更改为default land on false。我不知道这是什么时候的事,但在iOS 10.0之后,这从来都不是问题。
2nbm6dog2#
如果有人在2023年与自签名证书作斗争,以下是完整的蒙蒂:
字符串