verificar ver valido servidor perfiles mail imposible identidad este confianza confiable certificados certificado apple ios ssl ssl-certificate asihttprequest nsurlrequest

ios - ver - Utilice un certificado ssl autofirmado en una aplicación para iphone



perfiles iphone (1)

OK, lo descubrí. Estaba ladrando el árbol equivocado.

La información más importante que encontré fue en la documentación de Apple para la Guía de programación de certificados, claves y servicios de confianza , en particular, la página "Tareas para iOS". Eso detalla cómo extraer la identidad de seguridad del archivo .p12 y cómo agregar una excepción de confianza.

La última pieza del rompecabezas estaba en la documentación de ASIHTTPRequest sobre el Soporte de certificados del cliente . Al usar la identidad que extraje directamente del archivo p12, pude pasar eso a la solicitud y obtener todo autenticado correctamente.

Espero que esto ayude a cualquier otra persona que tenga que implementar una característica similar.

Me disculpo de antemano por la pregunta larga. Tengo problemas con un certificado SSL autofirmado y quiero documentar todo lo que he intentado hasta ahora.

Estoy trabajando en una aplicación que se comunica con un servicio REST. El servidor de prueba utiliza un certificado SSL autofirmado que puedo instalar en mi computadora sin problemas. Es un archivo .p12 que requiere una contraseña para instalar. Sin este certificado instalado, todas las solicitudes al servidor devuelven un 403.

El .p12 instala tres elementos en el llavero, una "autoridad de certificación raíz", un certificado de "usuario de prueba" emitido por la "autoridad de certificación raíz" y una clave privada que está asociada con el certificado "usuario de prueba".

He instalado este certificado en mi iPad enviándome el archivo .p12. Hice tapping en el archivo adjunto, ingresé la contraseña y ahora puedo acceder al sitio en Safari. Desafortunadamente, debido a la zona de pruebas de aplicaciones, esto no es suficiente para que mi aplicación se comunique con el servicio REST.

Estoy usando ASIHTTPRequest para toda la comunicación con el servicio REST desde mi aplicación. Cada solicitud es una subclase de ASIHTTPRequest. Lo primero que tuve que hacer fue llamar a [self setValidatesSecureCertificate:NO]; para que incluso intente la conexión SSL al servidor. Si eso es todo lo que hago, recibo 403 códigos de error del servicio.

Ahora no puedo entender cómo obtener la solicitud para usar el certificado. Intenté exportar los tres elementos como un archivo .cer separado, incluyéndolos en el proyecto y agregándolos a la solicitud usando el siguiente código:

NSData *data = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"cert" ofType:@"cer"]]; SecCertificateRef cert = SecCertificateCreateWithData(NULL, (CFDataRef)data); ... [self setClientCertificates:[NSArray arrayWithObjects:(id)cert, ..., nil]];

Mientras que el código se ejecuta sin problemas usando este enfoque, sigo recibiendo el error 403.

Incluso intenté incluir el archivo .p12 en mi aplicación e importarlo usando el mismo código. Esto falla porque SecCertificateCreateWithData devuelve nil.

Admito que realmente no sé lo que estoy haciendo aquí. Todo esto está un poco sobre mi cabeza y cualquier ayuda que alguien pueda darme sería muy apreciada.