2017-06-16 3 views
3

J'essaie de gérer dans une bibliothèque C plusieurs clés et certificats RSA dans une structure PKCS # 12. La gestion d'une seule clé avec les primitives PKCS12_create et PKCS12_parse fonctionne correctement, mais je ne trouve rien à propos de la gestion de plusieurs clés. J'ai essayé d'utiliser les coffres-forts et les primitives de sacs mais je réussis seulement à corrompre mon PKCS12. Le PKCS # 12 d'OpenSSL autorise-t-il plusieurs clés et certificats dans la structure PKCS # 12? Si oui, comment puis-je gérer plusieurs clés et certificats en utilisant l'API PKCS # 12?Gérer plusieurs clés/certificats RSA dans une structure PKCS # 12

Merci à tous

+0

Vous voulez donc créer une paire de clés RSA avec l'API libcrypto? Ou voulez-vous stocker plusieurs paires de clés? – Badda

+0

Bonjour Badda. Je veux stocker et analyser plusieurs paires de clés dans une structure/fichier PKCS12. La création de la paire de clés RSA est correcte. –

Répondre

0

Je réussis enfin à ajouter/analyser plusieurs clés RSA et leurs certificats dans/à partir d'une structure/fichier PKCS12. Ma fonction d'analyse est basée sur la fonction OpenSSL parse_pk12 du fichier p12_kiss.c. Cette fonction semble retourner le dernier sac seulement. Je l'adapte pour vérifier le nom de chaque sac et retourner celui qui correspond. La fonction d'add commence par déballer les coffres-forts (STACK_OF(PKCS7)) de la PKCS12 existante, puis de travailler sur ces coffres afin d'y ajouter une nouvelle pile de sacs. Je crée ensuite un nouveau PKCS12 avec la fonction PKCS12_add_safes et efface le précédent. Merci à tous

2

PKCS # 12 est une structure de données complexe. Toutes les opérations que PKCS12_parse utilisent sont des API publiques, elles essaient simplement de simplifier le cas simple. Les 245 lignes entières de p12_kiss.c (on présume Keep It Simple, Stupid) sont PKCS12_parse et ses routines d'assistance (non publiques).

p12_crt.c est une autre 291 lignes de "man, ce format de fichier est compliqué", qui est juste PKCS12_create.

La gestion de plusieurs fichiers est un code plus simple, mais si vous souhaitez intégrer la complexité dans votre code, vous pouvez simplifier vos opérations sur les fichiers. N'oubliez pas d'appeler PKCS12_SAFEBAG_create_pkcs8_encrypt sur les sacs de clés privées. Vos clés ne sont pas cryptées à moins que vous ne l'appeliez, et (IIRC) le lecteur PFX d'Apple ne chargera pas les clés des sacs non cryptés (probablement pas une décision intentionnelle, ils ne l'ont probablement jamais expérimentée).

+1

Bonjour bartonjs. Merci pour votre bonne réponse. Je réussis finalement à analyser plusieurs clés (ajoutées avec keytool) et à sélectionner celle dont j'ai besoin en fonction de son nom convivial. Je suis maintenant coincé sur l'ajout d'une clé à un PKCS # 12 existant. La construction 'STACK_OF (PKCS7) safes' devrait être ok (même chose que dans p12_crt.c, j'utilise la fonction' PKCS12_add_key' qui fait la chose crypt), mais ce qui me manque, c'est comment l'ajouter dans le 'PKCS12' existant objet. La fonction 'PKCS12_pack_authsafes' semble ne pas être celle dont j'ai besoin. Je pense que je l'ai ajouté dans un PKCS7 avant ...? –

+0

Peut-être que j'ai besoin d'obtenir la pile PKCS7 de la PKCS12 existante, en ajoutant un nouveau sac pour ma nouvelle clé et recréer un nouveau PKCS12 avec cette pile mise à jour? Je vais essayer ceci et poster si ça réussit. –