好吧,也許不是所有的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協議外,我沒有進行任何配置。我沒有證書或類似的東西。也許這是問題?
任何見識都被讚賞!
這個圖書館的作者讓我直率。 ActiveMQ具有不可信的證書,因此CFNetwork代碼不信任它。 您必須明確聲明您要允許使用此屬性的不受信任的證書:kCFStreamSSLAllowsAnyRoot。 如果有人想要示例代碼,我可以在上面添加它。只是喊。 – Genericrich 2008-12-21 00:34:11