Требуется помощь по какао, Stomp, ActiveMQ, iPhone, SSL и AsyncSocket - PullRequest
2 голосов
/ 19 декабря 2008

Ну, может быть, не со всеми 4 вещами, но вот моя ситуация:

У меня есть бэкэнд ActiveMQ (работает на моем настольном Mac). Это стандартный сервер Apache ActiveMQ, который у меня есть, который я в основном использую в качестве эхо-сервера для отслеживания логов и отладки моего клиента. Клиент представляет собой проект iPhone со взломанной реализацией Stomp.framework с использованием AsyncSocket.

Мне нужно использовать библиотеку AsyncSocket Cocoa для общения с сервером Stomp, на котором я более или менее работаю. Я могу отправлять сообщения в очереди и читать их обратно, так что я думаю, что мне там хорошо.

НО, когда я пытаюсь настроить все на использование SSL (также требование), я получаю следующее описание ошибки из объекта NSError, который я получаю:

kCFStreamErrorDomainSSL error -9812.

Я не могу на всю жизнь понять, что это за код ошибки. У кого-нибудь есть подсказка?

Вот как я могу настроить SSL для AsyncSocket:

РЕДАКТИРОВАТЬ: ДОБАВЛЕН ПРАВИЛЬНЫЙ КОД ЗДЕСЬ. ПРИМЕЧАНИЕ СЕРТИФИКАТЫ.

//- (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? Я не делал никаких настроек, кроме как включить протокол SSL через Stomp в ActiveMQ. У меня нет сертификата или чего-то в этом роде. Может в этом проблема?

Любое понимание приветствуется!

Ответы [ 2 ]

2 голосов
/ 19 декабря 2008

понятия не имею о специфике кода ошибки, но я могу вам сказать, что сертификаты, которые поставляются с activemq, являются устаревшими и предназначены только для тестирования. Это самозаверяющие сертификаты (по сути, недействительные), которые могут выдавать клиентскую библиотеку ssl, которая пытается проверить длину своей цепочки. В тесте ssl broker сертификат явно добавляется в хранилище доверенных сертификатов, чтобы клиент мог принять его, а не пытаться его проверить. Хорошим началом было бы создание действительных сертификатов для брокера или поиск способа добавить существующий сертификат в хранилище доверенных сертификатов, используемое AsyncSocket (хотя понятия не имею, как это настроено, возможно, поможет связанный код теста Java)

0 голосов
/ 05 января 2009

Безопасный транспортный номер на вашем Mac

Прокрутите вниз до кодов результата, чтобы увидеть коды ошибок. То, что вы получаете, это "errSSLUnknownRootCert". (Кажется, чтобы подтвердить ответ Гтулли.)

...