【发布时间】:2016-02-12 09:51:57
【问题描述】:
我有一个带有正确 SSL 信任链的 Windows 服务器。在此服务器上为我的 voip 应用程序运行 nodejs 信号服务器。我以前在 CentOS 上运行 nodejs 服务器,但不久前迁移到 windows。我暂时在应用程序中禁用了 SSL,但现在我再次启用它,我无法连接消息“CFNetwork SSLHandshake failed (-9824)”。
我知道没有人可以帮助我找出问题所在,但我希望苹果能提供更具描述性的信息。 9824 仅表示“握手失败”,设备日志显示没有什么特别之处。我补充说:
setenv("CFNETWORK_DIAGNOSTICS", "3", 1);
并检查了它产生的日志,但它只告诉我握手失败:/我尝试添加
CFReadStreamSetProperty(readStream, kCFStreamSSLValidatesCertificateChain, kCFBooleanFalse);
CFWriteStreamSetProperty(writeStream, kCFStreamSSLValidatesCertificateChain, kCFBooleanFalse);
到套接字初始化,看看是否允许我连接,但它没有。我还添加了奇怪的 info.plist sn-p 以允许在 iOS9 上使用 TLS1.0 而不是 TLS1.2,但即使这样也没有改变任何东西。
所以我的问题是:我到底如何获得足够的信息来开始调试这个烂摊子?我知道握手失败了,Apple,但我想知道为什么它失败了......
编辑:抱歉格式错误,我很着急:)
这是我的套接字初始化代码:
APP.onlineUsers = [[NSMutableArray alloc] init];
self.didOpenInputStream = NO;
self.didOpenOutputStream = NO;
self.messageQueue = [[NSMutableArray alloc] init];
CFReadStreamRef readStream;
CFWriteStreamRef writeStream;
NSInputStream* inputStream;
NSOutputStream* outputStream;
CFStreamCreatePairWithSocketToHost(NULL, (__bridge CFStringRef)serverUrl, (uint)serverPort, &readStream, &writeStream);
CFReadStreamSetProperty(readStream, kCFStreamPropertyShouldCloseNativeSocket, kCFBooleanTrue);
CFWriteStreamSetProperty(writeStream, kCFStreamPropertyShouldCloseNativeSocket, kCFBooleanTrue);
CFReadStreamSetProperty(readStream, kCFStreamSSLValidatesCertificateChain, kCFBooleanFalse);//tried without this as well
CFWriteStreamSetProperty(writeStream, kCFStreamSSLValidatesCertificateChain, kCFBooleanFalse);//tried without this as well
CFReadStreamSetProperty(readStream, kCFStreamPropertySocketSecurityLevel, kCFStreamSocketSecurityLevelSSLv3);//tried v2 this as well
CFWriteStreamSetProperty(writeStream, kCFStreamPropertySocketSecurityLevel, kCFStreamSocketSecurityLevelSSLv3);//tried v2 this as well
inputStream = (__bridge_transfer NSInputStream*)readStream;
outputStream = (__bridge_transfer NSOutputStream*)writeStream;
[inputStream setProperty:NSStreamNetworkServiceTypeVoIP forKey:NSStreamNetworkServiceType];
[inputStream setDelegate:self];
[outputStream setDelegate:self];
self.runLoop = [NSRunLoop currentRunLoop];
[inputStream scheduleInRunLoop:self.runLoop forMode:NSDefaultRunLoopMode];
[outputStream scheduleInRunLoop:self.runLoop forMode:NSDefaultRunLoopMode];
[inputStream open];
[outputStream open];
self.inputStream = inputStream;
self.outputStream = outputStream;
【问题讨论】:
-
OS X,iOS 版本?请出示证件。它是如何加密的?你读过关于 ATS 的文章吗?
标签: objective-c node.js ssl ios9 windows-server-2012