【发布时间】:2010-09-27 15:59:07
【问题描述】:
嗯,也许不是所有 4 件事,但这是我的情况:
我有一个 ActiveMQ 后端(在我的桌面 Mac 上运行)。这是我拥有的库存 Apache ActiveMQ 服务器,我基本上将其用作回显服务器来跟踪日志并调试我的客户端。客户端是一个 iPhone 项目,使用 AsyncSocket 进行了破解 Stomp.framework 实现。
我需要使用 AsyncSocket Cocoa 库来与我或多或少工作的 Stomp 服务器通信。我可以将消息发送到队列,然后将它们读回,所以我认为我在那里做得很好。
但是,当我尝试将所有内容设置为使用 SSL(也是一项要求)时,我从返回的 NSError 对象中得到以下错误描述:
kCFStreamErrorDomainSSL error -9812.
我一生都无法弄清楚这个错误代码是什么。有人知道吗?
这是我为 AsyncSocket 设置 SSL 的方法:
编辑:在此处添加了正确的代码。注意自签名证书。
//- (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 协议外,我没有进行任何配置。我没有证书或类似的东西。也许这就是问题所在?
感谢任何见解!
【问题讨论】:
-
图书馆的作者直言不讳。 ActiveMQ 有一个不受信任的证书,因此 CFNetwork 代码不信任它。您必须明确声明您希望使用此属性允许不受信任的证书:kCFStreamSSLAllowsAnyRoot。如果有人想要示例代码,我可以在上面添加。大喊一声。
-
继续添加它,几个月后从 Google 来到这里的人可能会发现它很有用。 :)
标签: iphone ssl activemq stomp asyncsocket