iOS NSURLAuthenticationMethodClientCertificate no solicitado vs servidor ActiveSync



Answers

Question

Estoy intentando implementar la autenticación de certificado en un cliente de ActiveSync que estoy desarrollando. El código para usar la autenticación del certificado podría funcionar, pero a partir de ahora el servidor, o más exactamente, la interpretación de la biblioteca del iOS de la respuesta del servidor, me parece incorrecto. Aquí está mi código:

- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge
{
    NSURLProtectionSpace *protectionSpace = [challenge protectionSpace];
    NSString *authenticationMethod = [protectionSpace authenticationMethod];

    if ([authenticationMethod isEqualToString:NSURLAuthenticationMethodClientCertificate])
    {
        NSURLCredential* credential = [ self buildCredentialClientCert];

        if ( credential == nil )
        {
            [[challenge sender] cancelAuthenticationChallenge:challenge];
        }
        else
        {
            [[challenge sender] useCredential:credential forAuthenticationChallenge:challenge];
        }
    }
    else if ([authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust])
    {
        .... // do other stuff

El problema es que, aunque sé que el servidor admite la autenticación del certificado del cliente, cuando configuro un punto de interrupción, authenticationMethod siempre se establece en NSURLAuthenticationMethodServerTrust .

La respuesta del servidor HTTPS sin formato contiene lo siguiente:

Código de error: 403 Prohibido. La página requiere un certificado de cliente como parte del proceso de autenticación. Si está utilizando una tarjeta inteligente, deberá insertar su tarjeta inteligente para seleccionar un certificado apropiado. De lo contrario, póngase en contacto con su administrador de servidor. (12213)

Mi pregunta es, ¿qué determina si el desafío de autenticación es NSURLAuthenticationMethodServerTrust versus NSURLAuthenticationMethodClientCertificate ?