Estoy compilando una aplicación para iphone que necesita acceder a un servicio web a través de https utilizando certificados de cliente. Si pongo el certificado del cliente (en formato pkcs12) en el paquete de la aplicación, puedo cargarlo en la aplicación y hacer la llamada https (en gran parte gracias a stackoverflow.com).Aplicación para iPhone con certs de cliente SSL
Sin embargo, necesito una manera de distribuir la aplicación sin ningún certs y dejar que el usuario proporcione su propio certificado. Pensé que simplemente haría eso instruyendo al usuario a importar el certificado en los perfiles de iphone (configuración-> general-> perfiles), que es lo que obtienes abriendo un archivo .p12 en Mail.app y luego accedería a ese elemento en mi aplicación Esperaría que los certificados en perfiles estén disponibles a través de la API de llavero, pero creo que estoy equivocado al respecto.
1) ¿Hay una manera de acceder a un certificado que ya he cargado en el perfil de iPhone en mi aplicación?
2) ¿Qué otras opciones tengo para cargar un certificado especificado por el usuario en mi aplicación? Lo único que se me ocurre es proporcionar alguna interfaz donde el usuario pueda dar una URL a su cerificado .p12, que luego puedo cargar en el llavero de la aplicación para su uso posterior, pero eso no es exactamente lo mismo para los usuarios. Estoy buscando algo que permita al usuario poner el certificado en el teléfono (enviarlo por correo electrónico a él mismo) y luego cargarlo en mi aplicación.
¿Puede decirme cómo cargar el .p12 en la aplicación, por favor? Necesito extraer la clave pública del certificado del cliente. Gracias –
Me puse en contacto con un experto en frameworks de Apple Security, quien confirmó lo que ya se ha dicho aquí: los certificados cargados en los perfiles seting-> general-> solo pueden ser utilizados por las aplicaciones integradas (correo, safari). Su aplicación solo puede usar lo que almacena en su llavero (o llaveros de otras aplicaciones de terceros que comparten el mismo certificado de aprovisionamiento). En cuanto a la carga real, he creado una aplicación incluida con el certificado (solo para la prueba). Leí el .p12 de mi paquete de aplicaciones y obtuve la identidad con SecPKCS12Import. Luego puede usarlo para obtener la clave privada con SecIdentityCopyPrivateKey. –
He intentado con esto: NSString * thePath = [[NSBundle mainBundle] pathForResource: @ "certificate" ofType: @ "p12"]; NSData * PKCS12Data = [[NSData alloc] initWithContentsOfFile: thePath]; CFDataRef inPKCS12Data = (CFDataRef) PKCS12Data; \t CFStringRef contraseña = CFSTR ("pase"); const void * keys [] = {kSecImportExportPassphrase}; const void * values [] = {password}; CFDictionaryRef optionsDictionary = CFDictionaryCreate (NULL, claves, valores, 1, NULL, NULL); Elementos CFArrayRef = CFArrayCreate (NULL, 0, 0, NULL); SecPKCS12Import (inPKCS12Data, optionsDictionary, & items); artículos está vacío.¿Qué está pasando? –