Вопрос

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

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

Любое понимание ценится!

Это было полезно?

Решение

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

Другие советы

Справочник по безопасному транспорту на вашем Mac

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top