嗯,也许不是所有 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 协议(protocol)外,我没有进行任何配置。我没有证书或类似的东西。也许这就是问题所在?
感谢任何见解!
最佳答案
不知道错误代码的具体细节,但我可以告诉你,activemq 附带的证书是 noddy,仅用于测试。它们是自签名证书(基本上无效),可以抛出一个客户端 ssl 库来尝试验证它们的链长度。在ssl broker test证书被显式添加到信任库中,以便客户端可以接受它而不是尝试验证它。 一个好的开始是为代理生成有效的证书或想出一种方法将现有证书添加到 AsyncSocket 使用的信任库中(尽管不知道如何配置,链接的 java 测试代码可能会有所帮助)
关于iphone - Cocoa、Stomp、ActiveMQ、iPhone、SSL 和 AsyncSocket 需要帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/380145/