【问题标题】:Cocoa, Stomp, ActiveMQ, iPhone, SSL, & AsyncSocket Help NeededCocoa、Stomp、ActiveMQ、iPhone、SSL 和 AsyncSocket 需要帮助
【发布时间】: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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    Secure Transport reference on your Mac

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

    【讨论】:

      猜你喜欢
      • 2017-03-06
      • 2014-02-01
      • 2010-10-28
      • 1970-01-01
      • 1970-01-01
      • 2011-02-26
      • 2018-03-27
      • 2010-10-09
      • 1970-01-01
      相关资源
      最近更新 更多