如何调试Mac OS X中的CFNetwork SSLHandshake失败(-9824)?

问题描述:

我的Mac OS X应用程序需要访问巴西的不同服务器,其中一台服务器似乎存在sslv3问题。看来,通过MS Windows解决方案访问是正常的。我尝试使用Internet Explorer,它的工作原理。这是一个什么样的Firefox显示我举一个例子:如何调试Mac OS X中的CFNetwork SSLHandshake失败(-9824)?

Firefox result

我在http://www.idanfe.com/trustAuthenticationTester.zip,以证明方法写一个示例应用程序 - (无效)连接:(NSURLConnection的*)aConnection willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)aChallenge是在与服务器https://nfe.sefaz.ce.gov.br/nfe2/services/NfeStatusServico2通话时根本没有被呼叫,但我可以正常使用服务器https://nfe.sefazvirtual.rs.gov.br/ws/NfeStatusServico/NfeStatusServico2。目的是自定义服务器信任评估。但在这一点上,这是不可能的。

这些都是错误,我得到:

CFNetwork的SSLHandshake失败(-9824)

CFNetwork的SSLHandshake失败(-9802)

CFNetwork的SSLHandshake失败(-9802)

NSURLConnection的/ CFURLConnection HTTP加载失败(kCFStreamErrorDomainSSL,-9802)

谢谢。

最新版本的OS X在主机服务器上需要TLSv1.2 SSL,因此SSL失败。您可以在您的info.plist文件中设置例外。

<key>NSAppTransportSecurity</key> 
<dict> 
    <key>NSExceptionDomains</key> 
    <dict> 
    <key>BrazilServer.com</key> 
    <dict> 
     <key>NSIncludesSubdomains</key> 
     <true/> 
     <key>NSExceptionMinimumTLSVersion</key> 
     <string>TLSv1.1</string> 
    </dict> 
    </dict> 
</dict> 

而且NSURLConnection的已被废弃,你应该切换到NSURLSession代替,因为有与处理中的info.plist和NSURLConnection的异常错误。

如果你想获得你可以在架构设置环境变量设置CFNETWORK_DIAGNOSTICS到错误的详细信息,日志会产生什么是SSL握手期间发生的更准确的结果。