ver valido servidor para mail este electronico correo confiar confiable certificados certificado iphone objective-c ssl-certificate keychain

valido - iphone mail certificado no confiable



AplicaciĆ³n de iPhone con certificados de cliente SSL (7)

Estoy creando una aplicación para iPhone que necesita acceder a un servicio web a través de https usando certificados de cliente. Si pongo el certificado de 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).

Sin embargo, necesito una forma de distribuir la aplicación sin ningún certificado y dejar que el usuario proporcione su propio certificado. Pensé que solo haría eso al instruir al usuario para que importara el certificado en los perfiles de iphone (configuración-> general-> perfiles), que es lo que obtiene al abrir un archivo .p12 en Mail.app y luego accedería a ese elemento. en mi aplicación Espero que los certificados en los perfiles estén disponibles a través de la API de llavero, pero creo que estoy equivocado en eso.

1) ¿Hay alguna forma de acceder a un certificado que ya haya 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 proporcionar una URL a su certificado .p12, que luego puedo cargar en el llavero de la aplicación para su uso posterior, pero eso no es exactamente el usuario. 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.



Apple restringe el uso de claves / certificados de todo el dispositivo a sus propias aplicaciones / servicios, como WiFi, VPN, Correo, etc. Las aplicaciones de terceros no pueden usar ninguna de estas claves / certificados (sin jailbreak). Sin embargo, las aplicaciones pueden importar, almacenar y usar claves y certificados en un llavero integrado en la aplicación. Además, puede compartir llaves / certificados en múltiples aplicaciones con la función de keychain-access-group en iOS.

Recientemente publiqué una publicación de blog titulada In-App Mobile Certificates Made Easy con mCMS , que puede haberte ayudado. Nuestra compañía está desarrollando una API que facilita el soporte de certificados en la aplicación, obtenidos directamente de su PKI basada en Microsoft. Nuestra solución también ofrece generación de claves en el dispositivo, en lugar de generar un P12 en otra máquina e intentar importarlo en su aplicación.


He hecho esto para una aplicación reciente al hacer que la carpeta de documentos de la aplicación sea accesible a través de itunes. A nuestros usuarios se les indica que arrastren su clave generada (en un archivo de formato p12) al panel de documentos de nuestra aplicación en iTunes. Cuando se inicia la aplicación, comprueba la existencia del archivo p12 y, si existe, importa el archivo en el llavero.

No es el procedimiento más sencillo, pero es el más seguro porque no tiene un archivo de clave privada que se envía por correo electrónico.


He intentado con esto:

NSString *thePath = [[NSBundle mainBundle] pathForResource:@"certificate" ofType:@"p12"]; NSData *PKCS12Data = [[NSData alloc] initWithContentsOfFile:thePath]; CFDataRef inPKCS12Data = (CFDataRef)PKCS12Data; CFStringRef password = CFSTR("pass"); const void *keys[] = { kSecImportExportPassphrase }; const void *values[] = { password }; CFDictionaryRef optionsDictionary = CFDictionaryCreate(NULL, keys, values, 1, NULL, NULL); CFArrayRef items = CFArrayCreate(NULL, 0, 0, NULL); SecPKCS12Import(inPKCS12Data, optionsDictionary, &items);

inPKCS12Data es correcto pero los elementos están vacíos. ¿Que esta pasando?


Oh, hombre, esto me trae recuerdos dolorosos de octubre / noviembre de 2009. Pude lograr que los certificados del lado del cliente funcionen con éxito, pero tuve que transferir libcurl al iPhone (lo cual no fue fácil, ya que la NDA aún estaba vigente en el hora).

No he hecho el desarrollo de la aplicación para iPhone en más de un año, así que no sé cuánto ha cambiado, pero si fuera usted, primero trataría de arreglármelas sin los certificados del lado del cliente y, si es absolutamente necesario, debe tenerlos. Utilice libcurl con certificados formateados PEM.


Si está utilizando AirWatch para la distribución de aplicaciones, su SDK ofrece la capacidad de proporcionar certificados de su Autoridad de Certificación a sus dispositivos registrados. Esto le permite aprovisionar sus certificados y luego acceder a ellos desde el código de su aplicación.


Si un archivo .p12 no es demasiado grande, podría codificarlo con Base64 y luego incrustar un enlace en un correo electrónico con un esquema de URL personalizado, por ejemplo:

myapp://certificate/<base 64 data>

El usuario hace clic en el enlace, su aplicación guarda el certificado en algún lugar para su uso futuro. Solo asegúrate de que Mail.app en el iPhone no dañe el correo electrónico.