可可,跺脚,ActiveMQ的,iPhone,SSL,和AsyncSocket帮助需要

可可,跺脚,ActiveMQ的,iPhone,SSL,和AsyncSocket帮助需要

问题描述:

好吧,也许不是所有的4两件事,但这里是我的情况:可可,跺脚,ActiveMQ的,iPhone,SSL,和AsyncSocket帮助需要

我有一个ActiveMQ的后端(我的桌面Mac上运行)。这是我拥有的股票Apache ActiveMQ服务器,我基本上使用它作为回显服务器来记录日志并调试我的客户端。客户端是一个使用AsyncSocket破解了Stomp.framework实现的iPhone项目。

我需要使用AsyncSocket Cocoa库来与Stomp服务器交谈,我或多或少都在使用它。我可以将消息发送给队列,并将它们读出来,所以我认为我很好。

但是,当我尝试设置一切使用SSL(也要求)我得到以下错误的描述出NSError对象,我回去:

kCFStreamErrorDomainSSL error -9812. 

我不能为我的生活找出这个错误代码是什么。任何人都有线索?

这里是我设置的SSL工具和AsyncSocket如何:

编辑:添加正确的代码这里。注意自签名的CERTS。

//- (BOOL)onSocketWillConnect:(AsyncSocket *)sock 
{ 
// Connecting to a secure server 
NSMutableDictionary * settings = [NSMutableDictionary dictionaryWithCapacity:2]; 

// Use the highest possible security 
[settings setObject:(NSString *)kCFStreamSocketSecurityLevelNegotiatedSSL 
      forKey:(NSString *)kCFStreamSSLLevel]; 

// Allow self-signed certificates 
[settings setObject:[NSNumber numberWithBool:YES] 
      forKey:(NSString *)kCFStreamSSLAllowsAnyRoot]; 

CFReadStreamSetProperty([sock getCFReadStream], 
         kCFStreamPropertySSLSettings, (CFDictionaryRef)settings); 
CFWriteStreamSetProperty([sock getCFWriteStream], 
         kCFStreamPropertySSLSettings, (CFDictionaryRef)settings); 

return YES; 

}

人有什么想法?我认为我正确设置流属性。也许这与ActiveMQ设置有关?除了在ActiveMQ中启用SSL over Stomp协议外,我没有进行任何配置。我没有证书或类似的东西。也许这是问题?

任何见识都被赞赏!

+0

这个图书馆的作者让我直率。 ActiveMQ具有不可信的证书,因此CFNetwork代码不信任它。 您必须明确声明您要允许使用此属性的不受信任的证书:kCFStreamSSLAllowsAnyRoot。 如果有人想要示例代码,我可以在上面添加它。只是喊。 – Genericrich 2008-12-21 00:34:11

不知道错误代码的细节,但我可以告诉你,与activemq一起提供的证书是noddy,仅用于测试。他们是自签名的证书(基本上是无效的),可以抛出一个客户端ssl库,试图验证他们的链长度。在ssl broker test中,证书明确添加到信任存储中,以便客户端可以接受它而不是试图验证它。 一个好的开始是为代理生成有效的证书或找出一种方法将现有的证书添加到AsyncSocket使用的信任存储(不知道如何配置,尽管可能链接的Java测试代码将帮助)

Secure Transport reference on your Mac

向下滚动到结果代码查看错误代码。你得到的是“errSSLUnknownRootCert”。 (似乎证实了gtully的回答。)