Cacau, Stomp, ActiveMQ, iPhone, SSL, e AsyncSocket Help Needed
-
22-08-2019 - |
Pergunta
Bem, talvez não com todos os 4 coisas, mas aqui está a minha situação:
Eu tenho um backend ActiveMQ (em execução no meu desktop Mac). É um servidor de estoque Apache ActiveMQ eu tenho que estou usando basicamente como um servidor de eco à cauda os logs e depurar o meu cliente. O cliente é um projeto de iPhone com um hackeou Stomp.framework implementação usando AsyncSocket.
Eu preciso usar biblioteca AsyncSocket Cacau para conversar com o servidor Stomp, que mais ou menos se trabalhar. Posso enviar mensagens para filas, e lê-los de volta, então eu acho que eu sou bom lá.
Mas, quando eu tentar definir tudo até SSL uso (também uma exigência) recebo a seguinte descrição de erro fora do objeto NSError eu voltar:
kCFStreamErrorDomainSSL error -9812.
Não consigo para a vida de me descobrir o que este código de erro é. Alguém tem uma pista?
Aqui está como eu configurar o material SSL para AsyncSocket:
EDIT: adicionado o código correto AQUI. NOTA CERTS em Self Signed.
//- (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;
}
Alguém tem alguma idéia? I pensar Eu estou definindo as propriedades de fluxo corretamente. Talvez seja algo a ver com a configuração ActiveMQ? Eu não fiz qualquer configuração diferente para habilitar o SSL sobre protocolo Stomp em ActiveMQ. Eu não tenho um certificado ou qualquer coisa assim. Talvez que é o problema?
Qualquer visão é apreciada!
Solução
nenhuma idéia sobre as especificidades do código de erro, mas posso dizer-lhe que os certificados que acompanham o activemq são noddy, destina-se apenas para teste. Eles são auto-assinado certs (essencialmente inválidos), que pode jogar uma biblioteca SSL lado do cliente que tenta validar sua cadeia de comprimento. Na teste corretor SSL o certificado é explicitamente adicionado ao armazenamento de confiança para que o cliente pode aceitá-la ao invés de tentar validá-lo. Um bom começo seria gerar certificados válidos para o corretor ou descobrir uma maneira de adicionar o certificado existente para o armazenamento de confiança usado por AsyncSocket (não têm idéia de como isso é configurado, porém, possivelmente, o código de teste java ligada irá ajudar)
Outras dicas
referência transporte seguro noreferrer nofollow no seu Mac
Vá até resultar códigos para ver os códigos de erro. O que você está recebendo é "errSSLUnknownRootCert". (Parece responder a confirmação do gtully.)