2009-11-23 8 views
6

Quando si tenta di utilizzare SecPKCS12Import() dal framework Security fornito da Mac OS X 10.6, il codice risultato è sempre errSecUnimplemented, indipendentemente dagli argomenti forniti.SecPKCS12Import() da Security.framework non riesce su OS X 10.6

Inoltre, il linker non è in grado di trovare i simboli per le costanti relative a questa funzione dichiarate in SecImportExport.h (ad esempio kSecImportExportPassphrase, kSecImportItemIdentity, ecc.).

Cosa succede a questa libreria con la libreria - la funzione è implementata o no? Perché il linker può risolvere tutti gli altri simboli nel framework, ma non questi? Come devo convertire un blob binario formattato PKCS12 in una coppia SecIdentityRef o SecCertificateRef e SecKeyRef?

Cosa sto sbagliando? Sono sicuro che questo è un problema PEBKAC. :-)


EDIT: Vedo che non ero molto chiaro nella mia domanda. Sono consapevole del fatto che Security.framework è implementato, dato che sono in grado di utilizzare le altre funzionalità fornite senza problemi. Detto questo, sono abbastanza sicuro di collegarmi correttamente al framework, poiché se rimuovo il collegamento, non è possibile trovare nessuno dei simboli, come previsto. Quando ricollego il framework, vengono trovati tutti i simboli, ad eccezione delle costanti relative a SecPKCS12Import(), ad es. kSecImportExportPassphrase, kSecImportItemIdentity, ecc

Premesso che non posso usare questi simboli, ho passato nelle stringhe quello che avrebbe potuto non corretti (@"kSecImportItemIdentity", etc.), ma il codice di errore riscontrato è errSecUnimplemented. Questo mi ha portato a credere che forse questa funzionalità specifica non è stata implementata.

Ho provato a utilizzare l'SDK 10.5, ma ciò non ha funzionato, ovviamente. :-)


EDIT: Il mio importazione è solo un normale #import <Security/Security.h>. Per i calci, ho provato anche #import <Security/SecImportExport.h>, ma questo non ha comportato alcun cambiamento. Detto questo, l'errore viene emesso dal linker, non dal compilatore.

Ho eseguito dyldinfo -export Security.framework/Security per elencare i simboli esportati dalla libreria e ho trovato molti dei simboli new, ma kSecImportExportPassphrase e gli amici erano evidentemente mancanti. Questo potrebbe spiegare perché il linker non riesce a trovare i simboli. Il simbolo per SecPKCS12Import appare nella tabella dei simboli e posso chiamarlo senza problemi, è solo che la funzionalità non sembra essere lì.

+0

Confermato come non implementato, almeno dal 10.6.2 - si prega di depositare un Radar su questo. Dettagli nella mia risposta qui sotto. –

risposta

3

Security.framework è sicuramente implementato - vedere lo Security Reference Update che documenta cosa è cambiato nel framework in 10.6 e precedenti. Dato che conosci le intestazioni da utilizzare, presumo che tu abbia già consultato lo Security Framework Reference.

Sei sicuro di essere correttamente importato e collegato al framework? (È in /System/Library/Security.framework, quindi non è necessario specificare il percorso.)

Il compilatore emette avvisi o errori che indicano che i simboli in SecImportExport.h non sono definiti? (In caso contrario, come fai a sapere che sono "dichiarati ma non definiti"?)

Quando dici che questo non funziona su 10.6, hai provato con successo su una versione precedente del sistema operativo?


EDIT: Va bene, dal momento che si sta utilizzando altre parti del Security.framework con successo, e le API e le costanti che stai cercando di utilizzare sono solo 10,6, non sembra come un problema di collegamento . Come appare la tua importazione? Sei sicuro di importare correttamente SecImportExport.h? Le costanti vengono dichiarate appena sopra la funzione SecPKCS12Import(), quindi se ricevi delle avvertenze per le costanti, dovresti ottenerne una anche per la funzione indefinita.


EDIT: mi hanno confermato con un membro del team di Apple che funziona su Security.framework che questa funzionalità non è attualmente implementato. Si prega di presentare un bug su questo a http://bugreport.apple.com contro il componente Security (New Bugs), versione X. Includi l'URL di questa domanda nel tuo rapporto. Spiacente, non c'è una risposta migliore al momento.

+0

A causa della mia inettitudine, ho risposto a questa risposta con una mia risposta qui sotto. –

+0

Da allora ho rivisto la domanda. Speriamo che questo aiuti. :-) –

+0

Il tuo ultimo aggiornamento è abbastanza utile, in particolare che si tratta di errori di linker. Il fatto che alcuni simboli non vengano esportati è sconcertante. Scoverò più a fondo per vedere se riesco a trovare una risposta definitiva ... –

1

Per quanto ne so, Apple è bravissima nell'implementare parzialmente le cose o non lasciare documentazione. Se davvero non riesci a trovare la reale implementazione di cui hai bisogno, puoi utilizzare OpenSSL per estrarre i BLOB e quindi i servizi di sicurezza per importarli in un portachiavi o elaborare ulteriormente con i metodi Security/CDSA. Questo ti farebbe andare avanti e puoi eseguire il ping della connessione di Apple Dev con ulteriori domande, se ne hai la possibilità.

Inoltre, guardando /System/Library/Frameworks/Security.framework/Headers/SecImportExport.h sulla mia macchina 10.6.2, vedo i riferimenti a PKCS # 12 nella documentazione di SecKeychainItemImport()

Ricerca quel file per "PKCS12" per ulteriori informazioni.

Problemi correlati