La Signature numérique à l'aide du certificat et la clé USB token
Je veux signer un fichier à l'aide de la clé de l'utilisateur et le certificat à partir d'une clé USB (dongle).
J'ai été chercher sur ce pendant un certain temps, sur stackoverflow et d'autres sites, mais ne pas obtenir quelque chose d'utile à part quelques bonnes capacités .NET framework (dont je ne suis pas de l'utiliser).
Il semble que, depuis la clé n'est pas exposé, le cryptage est fait par le matériel lui-même. Est-ce à dire que chaque fabricant de votre matériel fournit sa propre Api et qu'il n'existe pas de méthode générique pour remédier à ce problème?
Aussi, j'ai lu qu'une fois que le jeton est branché à l'ordinateur, son certificat est chargé dans le magasin du système. Est-il possible d'utiliser le certificat dans le magasin? Comment un tel certificat est identifié et accessible, entre autres, dans le magasin? et que dire de la clé privée?
J'ai OpenSSL utilisée pour la signature numérique lorsque le certificat peut être extraite d'une .p12 ou .fichier pfx.
Corrigez-moi si je me trompe quelque part, je suis nouveau sur ce sujet.
@Jcoder l'indique, de nombreux équipements pour utiliser une interface PKCS#11 pour les opérations de chiffrement. Vous devez demander au vendeur de matériel qui les Api qu'ils soutiennent avant de poursuivre.
oui, je l'avais brièvement lire sur PKCS#11. Mais j'espérais une solution plus élégante, plutôt que de soutenir chaque vendeur séparément. Spécialement, quand je ne sais pas le vendeur du matériel utilisé.
OriginalL'auteur sg1 | 2013-03-12
Vous devez vous connecter pour publier un commentaire.
Il existe 2 options:
Je ne pense pas que OpenSSL peut être utilisé pour votre tâche, vous devez utiliser soit CryptoAPI ou PKCS#11.
Notre SecureBlackbox produit fournit un uniforme interface de haut niveau pour signer des données selon les différentes normes cryptographiques et à l'aide de PKCS#11 et/ou de CryptoAPI. Toujours en cas de PKCS#11 vous (ou l'exploitant du système sur lequel la signature est fait) ont besoin de connaître le chemin d'accès vers le fichier PKCS#11 pilote DLL. SecureBlackbox peut être utilisée en C++ en utilisant la Bibliothèque de l'édition.
OriginalL'auteur Eugene Mayevski 'Allied Bits
Je ne sais pas que j'avais de caractériser n'importe quel aspect de OpenSSL moteurs comme "assez simple". La version ligne de commande est chaotique, et je ne pouvais comprendre ce que la ligne de commande a été fait après l'avoir fait dans le code moi-même. L'ordre des opérations et la durée de vie ne sont pas appelés très bien (et je n'ai toujours pas savoir ce que c'est, mais j'ai mon système en cours d'exécution et n'est plus une fuite de mémoire, donc yay.)
J'ai mis en place le fonctionnement des versions sur github: https://github.com/tkil/openssl-pkcs11-samples
Voici une visite guidée à travers les parties pertinentes de
tok-sign.c
:Tout d'abord, certaines aides:
Probablement le plus étrange chose à propos de la
dynamic
moteur est qu'il est vraiment un méta-moteur: vous nourrir de différents paramètres, et quand vous le nourrirLOAD
, il charge la dynamique de la bibliothèque et fait un nouveau moteur disponible. Il est simple dans le code, une fois que vous savez le bon ordre des opérations. Ici, nous avons accès à la dynamique du moteur, le configurer, puis lui demander d'apporter lapkcs11
moteur:À ce point, si tous ces appels réussi, OpenSSL instance a maintenant accès à un nouveau moteur appelé "pkcs11". Maintenant, nous devons obtenir de l'accès à ce nouveau moteur, le configurer correctement, et de le laisser s'initialiser:
Maintenant que nous avons accès au jeton, nous pouvons obtenir la clé privée pour une utilisation dans OpenSSL opérations:
Cependant, je ne pouvais pas comprendre comment extraire le certificat correspondant, par le biais de l'interface du MOTEUR, donc je suis allé directement à LibP11:
Enfin, nous avons commencer à recueillir des données pour la CMS_Sign demande. Nous regardons tous les certificats sur le jeton, choisir celui correspondant à la clé privée, puis stocker le reste dans un OpenSSL
STACK_OF(X509)
:Enfin, nous pouvons signer les données, alors la sortie de la signature dans un DER format de fichier:
Après, c'est juste de nettoyage:
OriginalL'auteur AnthonyFoiani
Vous pouvez le faire en utilisant les moteurs de OpenSSL et la dotant d'un fichier PKCS#11 moteur.
Cela peut être fait à partir de la ligne de commande (le moteur de drapeau) ou par le moteur. des apps.c dans /apps/de la openssl distribution a de bons exemples.
Typique de l'invocation de la forme de la ligne de commande ressemble à
qui crée&les signes d'une demande sur l'appareil.
Signe quelque chose:
ne notez bien que pour ce dernier point, un non corrigés openssl ne permet pas pour le référencement du cert sur la carte (seulement la clé). Si l'on doit extraire de cette première et de les stocker en tant que fichier.
et à l'aide d'une touche sur la carte pour se connecter avec l'authentification des clients à un serveur:
c'est assez simple à traduire en code natif - il suffit de chercher pour le moteur dans les applications.c dans openssl apps.c fichier - pour voir comment c'est fait. Dans la plupart des cas, il est certain
par opposition à l'ancien
OriginalL'auteur Dirk-Willem van Gulik