2008-12-19 72 views
2

好吧,也許不是所有的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協議外,我沒有進行任何配置。我沒有證書或類似的東西。也許這是問題?

任何見識都被讚賞!

+0

這個圖書館的作者讓我直率。 ActiveMQ具有不可信的證書,因此CFNetwork代碼不信任它。 您必須明確聲明您要允許使用此屬性的不受信任的證書:kCFStreamSSLAllowsAnyRoot。 如果有人想要示例代碼,我可以在上面添加它。只是喊。 – Genericrich 2008-12-21 00:34:11

回答

2

不知道錯誤代碼的細節,但我可以告訴你,與activemq一起提供的證書是noddy,僅用於測試。他們是自簽名的證書(基本上是無效的),可以拋出一個客戶端ssl庫,試圖驗證他們的鏈長度。在ssl broker test中,證書明確添加到信任存儲中,以便客戶端可以接受它而不是試圖驗證它。 一個好的開始是爲代理生成有效的證書或找出一種方法將現有的證書添加到AsyncSocket使用的信任存儲(不知道如何配置,儘管可能鏈接的Java測試代碼將幫助)