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.

questionAnswers(4)

yourAnswerToTheQuestion