2010-08-23 12 views
6

Actualmente estoy tratando de conectarme a un servidor con un certificado autofirmado. Estoy usando NSURLConnection para conectarme al servidor. ¿Cómo puedo asegurarme de que solo confío en el servidor correcto y cancelo todas las demás conexiones? Estoy utilizando el siguiente códigoNo se puede confiar en un certificado autofirmado en iphone

- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge { 

    SecTrustResultType results; 
    SecTrustRef trust = [[challenge protectionSpace] serverTrust]; 

    SecTrustEvaluate(trust, &results); 

    if (results == kSecTrustResultProceed || results == kSecTrustResultConfirm) { 
     [challenge.sender useCredential:[NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust] forAuthenticationChallenge:challenge]; 
    } else { 
     [challenge.sender cancelAuthenticationChallenge:challenge]; 
    } 

} 

Actualmente SecTrustEvaluate vuelve siempre con resultados iguales a kSecTrustResultRecoverableTrustFailure. He instalado un perfil de configuración con el certificado en el teléfono con la utilidad de configuración de iphone y está marcado como verificado, pero no cambió los resultados.

¿Alguien puede ayudarme a obtener un resultado de confianza de kSecTrustResultProceed o kSecTrustResultConfirm para obtener un certificado autofirmado?

Respuesta

4

Deberás asegurarte de que tu certificado tenga ciertas extensiones. He configurado un certificado con las siguientes extensiones, y funcionó para mí (formato OpenSSL):

basicConstraints=critical,CA:FALSE 
extendedKeyUsage=serverAuth 
subjectAltName=IP:192.168.x.y 
+1

buena propina, funciona si está recibiendo ** ** ... kSecTrustResultRecoverableTrustFailure específicamente la tecla "subjectAltName" es muy importante. Si su servidor responde por un DNS cuando se lo llama, debe usar 'subjectAltName = DNS: example.com' o si quiere tanto' subjectAltName = IP: 10.0.1.5, DNS: example.com'. Gracias ! – gwdp

Cuestiones relacionadas