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?
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