2

好吧,也许不是所有 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 协议外,我没有进行任何配置。我没有证书或类似的东西。也许这就是问题所在?

任何见解表示赞赏!

4

2 回答 2

2

不知道错误代码的具体细节,但我可以告诉你,与 activemq 一起提供的证书是 noddy,仅用于测试。它们是自签名证书(本质上是无效的),它可以抛出一个客户端 ssl 库来尝试验证它们的链长度。在ssl 代理测试中,证书被显式添加到信任存储中,以便客户端可以接受它而不是尝试验证它。一个好的开始是为代理生成有效证书,或者想办法将现有证书添加到 AsyncSocket 使用的信任库中(虽然不知道如何配置,可能链接的 java 测试代码会有所帮助)

于 2008-12-19T11:57:13.230 回答
0

Mac 上的安全传输参考

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

于 2009-01-05T20:16:17.240 回答