XMPPFramework - Conecte-se via SSL no Openfire
Estou tentando conectar meus usuários viaSSL do meu cliente de bate-papo XMPP do iOS para o servidor Openfire.
No meuiOS cliente:
- (void)setupStream
{
...
// BOOL values for security settings
customCertEvaluation = NO;
allowSelfSignedCertificates = YES;
allowSSLHostNameMismatch = NO;
}
No meuAbrir fogo servidorConfigurações de segurança > Segurança de Conexão do Cliente, Eu configurei:
Required - Clients can only connect to the server using secured connections.
Assim, o seguinte método delegado será chamado:
- (void)xmppStream:(XMPPStream *)sender willSecureWithSettings:(NSMutableDictionary *)settings
{
NSString *expectedCertName = [xmppStream.myJID domain];
if (customCertEvaluation)
[settings setObject:@(YES) forKey:GCDAsyncSocketManuallyEvaluateTrust];
if (allowSelfSignedCertificates)
[settings setObject:[NSNumber numberWithBool:YES] forKey:(NSString *)kCFStreamSSLAllowsAnyRoot];
if (allowSSLHostNameMismatch)
[settings setObject:[NSNull null] forKey:(NSString *)kCFStreamSSLPeerName];
else
if (expectedCertName)
[settings setObject:expectedCertName forKey:(NSString *)kCFStreamSSLPeerName];
}
Eu tentei esta solução a partir deste segmento:Conexão XMPPFramework TLS / SSL com o Openfire
No entanto, quando executo meu aplicativo e tento conectar-me ao servidor, recebo este erro:
Security option unavailable - kCFStreamSSLAllowsAnyRoot - You must use manual trust evaluation
Eu olhei através doGCDAsyncSocket
classe e percebikCFStreamSSLAllowsAnyRoot
é declarado obsoleto. Um NSAssert foi implementado para lançar deliberadamente o erro.
Em seguida, decidi alterar meus valores BOOL da seguinte forma:
- (void)setupStream
{
...
// BOOL values for security settings
// Manually evaluate trust
customCertEvaluation = YES;
allowSelfSignedCertificates = NO;
allowSSLHostNameMismatch = NO;
}
Dessa vez, novamente, nenhuma conexão pôde ser estabelecida com o servidor, mas nenhum erro foi solicitado.
Eu poderia me conectar ao Openfire corretamente se eu alterasse o Client Connection Security de volta à configuração original>Opcional. Porém, eu não estaria conectado via SSL, conforme indicado por umtrava ícone ao lado do status de todos os usuários nas sessões do cliente.
Meu cliente Android (usando a API Smack para XMPP) se conecta ao Openfire via SSL sem problemas. Então, eu estou querendo saber se há uma solução alternativa que tenho que implementar para o meu cliente iOS usando XMPPFramework.
Eu gostaria muito de receber algum conselho.