2009-11-23 11 views
6

Cuando intento utilizar SecPKCS12Import() desde el marco de seguridad proporcionado por Mac OS X 10.6, el código de resultado siempre es errSecUnimplemented, independientemente de los argumentos proporcionados.SecPKCS12Import() de Security.framework falla en OS X 10.6

Además, el vinculador no puede encontrar símbolos para las constantes relevantes para esta función declarada en SecImportExport.h (es decir, kSecImportExportPassphrase, kSecImportItemIdentity, et al.).

¿Qué diablos está pasando con esta biblioteca? ¿Está implementada la función o no? ¿Por qué el enlazador puede resolver todos los demás símbolos en el marco, pero no estos? ¿Cómo debo convertir un blob binario con formato PKCS12 en un par SecIdentityRef o SecCertificateRef y SecKeyRef?

¿Qué estoy haciendo mal? Estoy seguro de que este es un problema PEBKAC. :-)


EDIT: Veo que no estaba muy claro en mi pregunta. Soy consciente de que Security.framework está implementado, dado que puedo usar la otra funcionalidad que proporciona sin problemas. Dado esto, estoy bastante seguro de que estoy vinculándome contra el marco correctamente, ya que si elimino el enlace, ninguno de los símbolos se puede encontrar, como se esperaba. Cuando vuelvo a vincular el marco, se encuentran todos los símbolos, con la excepción de las constantes correspondientes al SecPKCS12Import(), p. kSecImportExportPassphrase, kSecImportItemIdentity, etc.

Teniendo en cuenta que no puedo usar estos símbolos, que pasó en las cadenas de lo que podría haber sido incorrecta (@"kSecImportItemIdentity", etc.), pero devolvió el código de error fue errSecUnimplemented. Esto me llevó a creer que tal vez esta funcionalidad específica no se haya implementado.

Intenté usar el 10.5 SDK, pero eso no funcionó, por supuesto. :-)


EDIT: La importación es sólo un habitual #import <Security/Security.h>. Para las patadas, probé #import <Security/SecImportExport.h> también, pero esto no afectó ningún cambio. Dicho esto, el error es emitido por el vinculador, no el compilador.

Ejecuté dyldinfo -export Security.framework/Security para enumerar los símbolos exportados por la biblioteca y encontré muchos de los símbolos new, pero faltaban kSecImportExportPassphrase y amigos. Esto podría explicar por qué el enlazador no puede encontrar los símbolos. El símbolo para SecPKCS12Import aparece en la tabla de símbolos y puedo llamarlo sin problemas, es solo que la funcionalidad no parece estar allí.

+0

Confirmado que no se ha implementado, al menos a partir de 10.6.2 - presente un Radar al respecto. Detalles en mi respuesta a continuación. –

Respuesta

3

Security.framework es sin duda implementado - ver el Security Reference Update que documenta lo que ha cambiado en el marco en 10.6 y anteriores. Como conoce los encabezados, asumo que ya ha consultado el Security Framework Reference.

¿Está seguro de que está importando y vinculando correctamente con el marco? (Está en /System/Library/Security.framework, por lo que no debería tener que especificar la ruta.)

hace el compilador emitir advertencias o errores que indican que los símbolos en SecImportExport.h no están definidos? (Si no, ¿cómo sabe que están "declarados pero no definidos"?)

Cuando dice que esto falla en 10.6, ¿lo ha probado con éxito en una versión anterior del SO?


EDITAR: Está bien, están 10,6 única, que no parece ya que estás usando otras partes del Security.framework éxito, y las API y las constantes que está tratando de utilizar como un problema de vinculación . ¿Cómo se ve tu importación? ¿Seguro que está importando SecImportExport.h correctamente? Las constantes se declaran justo encima de la función SecPKCS12Import(), por lo que si recibe advertencias para las constantes, también debe obtener una para la función que no está definida.


EDITAR: He confirmado con un miembro del equipo de Apple que funciona en Security.framework que esta funcionalidad no está implementada actualmente. Por favor presente un error para quejarse sobre esto al http://bugreport.apple.com contra el componente Security (New Bugs), versión X. Incluya la URL a esta pregunta en su informe. Lo siento, no hay una mejor respuesta en este momento.

+0

Debido a mi ineptitud, he respondido a esta respuesta con una respuesta mía a continuación. –

+0

He revisado la pregunta nuevamente. Espero que esto ayude. :-) –

+0

Su última actualización es bastante útil, específicamente que estos son errores de enlazador. El hecho de que algunos símbolos no se exporten es desconcertante. Profundizaré más para ver si puedo encontrar una respuesta definitiva ... –

1

Que yo sepa, Apple es excelente para implementar parcialmente cosas o no dejar documentación. Si realmente no puede encontrar la implementación real que necesita, puede usar OpenSSL para extraer los blobs y luego los servicios de seguridad para importarlos a un llavero o seguir el proceso con los métodos de seguridad/CDSA. Eso lo pondría en marcha y puede hacer ping a la conexión del desarrollador de Apple con más preguntas, si tiene la posibilidad.

Además, mirando a /System/Library/Frameworks/Security.framework/Headers/SecImportExport.h en mi máquina 10.6.2, veo referencias a PKCS # 12 en la documentación de SecKeychainItemImport()

Buscar ese archivo para "PKCS12" para más información.

Cuestiones relacionadas