2012-02-23 28 views
6

Quiero verificar si el certificado SSL está presente en la URL también quiere verificar su versión y tipo de validación.¿Cómo verificar la seguridad del certificado SSL en iOS?

He creado una aplicación en la que yo estoy llamando a los métodos de delegado NSURLConnection enviar solicitud a través de un servidor.

también utilizó "canAuthenticateAgainstProtectionSpace" método, pero este método no está recibiendo llamados una vez establecida la conexión.

¿Alguien me puede decir cómo lograr esto.

Respuesta

9

iOS no le da acceso muy granular a la información del certificado. Tienes dos opciones: API privadas o compila tu propio evaluador con OpenSSL.

se puede ver las funciones de certificación privados en el opensource code. La versión está disponible en SecCertificateVersion(). No estoy seguro de lo que quiere decir con "tipo de validación" aquí.

Para hacer esto con OpenSSL, puede obtener los datos DER con SecCertificateCopyData() y luego analizar todo usted mismo.

Sugiero abrir un radar (bugreporter.apple.com) sobre este tema. La falta de acceso a información básica sobre el certificado es un problema grave.

Si usted está buscando un código de ejemplo que extrae el certificado de la NSURLConnection, ver el Chapter 11 sample code de iOS:PTL:

- (void)connection:(NSURLConnection *)connection 
    willSendRequestForAuthenticationChallenge: 
    (NSURLAuthenticationChallenge *)challenge 
{ 
    NSURLProtectionSpace *protSpace = challenge.protectionSpace; 
    SecTrustRef trust = protSpace.serverTrust; 
    ... 
    SecCertificateRef cert = SecTrustGetCertificateAtIndex(trust, 0); 
    ... 

En este punto, cert sostiene su certificado de hoja.

+0

Gracias por su sugerencia, "tipo de validación" significa qué tipo de validación de SSL se implementa en la URL, ya sea validación estándar o extendida. Aquí he utilizado el código que figura en el "Código de ejemplo del Capítulo 11", pero cuando intento crear la aplicación obtengo errores de tiempo de compilación a -> Símbolos indefinidos para la arquitectura i386: "_SecPolicyCreateBasicX509", referenciado en: _RNSecTrustEvaluateAsX509 en ConnectionViewController.o, "_SecCertificateNotValidAfter", hace referencia a partir de: - [ConnectionViewController conexión: willSendRequestForAuthenticationChallenge:] en ConnectionViewController.o – iLearner

+2

Es necesario vincular Security.framework. –

Cuestiones relacionadas