Die digitale Signatur mittels Zertifikat und-Schlüssel vom USB-token
Möchte ich signieren eine Datei mit Hilfe der Benutzer die Schlüssel und das Zertifikat aus USB-token (dongle).
Habe ich die Suche auf dieser für irgendwann, auf stackoverflow und anderen Websites, aber nicht bekommen, etwas sinnvolles, abgesehen von einigen guten Möglichkeiten .NET-framework (welches ich nicht verwende).
Es scheint, dass da der Schlüssel nicht ausgesetzt, die Verschlüsselung erfolgt durch die hardware selbst. Bedeutet das, dass jeder hardware-Hersteller liefert seine eigenen APIs und, dass es keine generische Methode, um dieses problem zu beheben?
Außerdem habe ich gelesen, dass sobald der token eingesteckt ist der computer, sein Zertifikat in das system geladen lagern. Ist es möglich das Zertifikat aus dem Speicher? Wie kann ein solches Zertifikat werden identifiziert und der Zugriff unter anderem in der Filiale? und was ist mit dem privaten Schlüssel?
Habe ich verwendet OpenSSL für die digitale Signatur wenn das Zertifikat entzogen werden können ein .p12-oder .pfx-Datei.
Korrigiert mich wenn ich irgendwo falsch, ich bin neu in diesem Thema.
@Jcoder schon sagt, viele hardware-Geräte verwenden eine PKCS#11-Schnittstelle für kryptographische Operationen. Sie müssen Fragen Sie den Hersteller der hardware, die APIs, die Sie unterstützen, bevor Sie fortfahren können.
ja, ich hatte kurz gelesen, über PKCS#11. Aber ich hatte gehofft, eine elegantere Lösung, eher als Unterstützung jeden Lieferanten separat. Speziell, wenn ich nicht weiß, den Hersteller der verwendeten hardware.
InformationsquelleAutor sg1 | 2013-03-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es existieren 2 Optionen:
Ich glaube nicht, dass OpenSSL kann verwendet werden, für Ihre Aufgabe - Sie brauchen, um CryptoAPI-oder PKCS#11.
Unserer SecureBlackbox Produkt bietet eine einheitliche high-level-Schnittstelle zum signieren von Daten nach verschiedenen kryptografischen standards und die Verwendung von PKCS#11 und/oder CryptoAPI. Noch im Falle von PKCS#11, die du (oder der Betreiber der Anlage auf, die Unterzeichnung erfolgt) Bedarf, zu wissen, den Pfad zur PKCS#11-Treiber-DLL. SecureBlackbox verwendet werden kann, von C++ unter Verwendung der Bibliothek edition.
InformationsquelleAutor Eugene Mayevski 'Allied Bits
Weiß ich nicht, ich würde prägen einen Aspekt von OpenSSL-engines als "ziemlich einfach". Die command-line-version ist, ist es chaotisch, und ich konnte nur herausfinden, was der Befehl-Linie war dabei, nachdem ich es im code selbst. Die Reihenfolge der Operationen und die Lebensdauer sind nicht aufgerufen, die sehr gut (und ich noch nicht ganz wissen, was diese sind, aber ich habe mein system laufen-und nicht länger ein Speicherleck, also yay.)
Habe ich bis funktionierende Versionen auf github: https://github.com/tkil/openssl-pkcs11-samples
Hier ist eine Führung durch die relevanten Teile des
tok-sign.c
:Zunächst einige Helfer:
Wohl die merkwürdigste Sache, über die
dynamic
Motor ist, dass es wirklich ein meta-engine: Sie füttern es verschiedene Parameter, und wenn Sie es fütternLOAD
wird, lädt die dynamische Bibliothek und macht einen neuen Motor zur Verfügung. Es ist einfach in den code, sobald Sie wissen, die richtige Reihenfolge der Operationen. Wir bekommen hier Zugang zu den dynamischen Motor, konfigurieren, und dann bitten, es zu bringen in diepkcs11
Motor:An diesem Punkt, wenn alle diese Aufrufe gelungen, Ihre OpenSSL-Instanz hat nun Zugriff auf eine neue engine namens "pkcs11". Jetzt müssen wir den Zugriff auf die neue engine, konfigurieren Sie es richtig, und lassen Sie es zu initialisieren selbst:
Nun, wir haben Zugang zu den token, den wir bekommen können die privaten Schlüssel für die Verwendung im OpenSSL-Operationen:
Allerdings konnte ich nicht herausfinden, wie die zum extrahieren der entsprechenden Bescheinigung durch das MOTOR-interface, also ging ich direkt zu LibP11:
Endlich, wir beginnen, Daten zu sammeln für die CMS_Sign Anfrage. Wir schauen uns alle die Zertifikate auf dem token, wählen Sie diejenige, die dem privaten Schlüssel und speichern Sie den rest in ein OpenSSL
STACK_OF(X509)
:Endlich können wir signieren der Daten, dann Ausgabe die Unterschrift in einem DER-formatierte Datei:
Nach, es ist einfach Aufräumen:
InformationsquelleAutor AnthonyFoiani
Können Sie dies mit Hilfe der Motoren von OpenSSL - und bietet es mit einer PKCS#11-engine.
Diese kann getan werden, von der Befehlszeile aus (die engine-flag) oder durch die Einstellung des Motors. apps.c in /apps/openssl-distribution hat gute Beispiele.
Einer typischen Aufruf-form der command-Zeile sieht so aus
erstellt&Beschilderung eine Anfrage an das Gerät.
Anmelden etwas:
tun, aber beachten Sie, dass für letztere eine ungepatchte openssl-nicht für Referenzierung des cert auf der Karte (nur den key). So muss man sich zu extrahieren, diese erste und laden als Datei.
und verwenden Sie eine Taste auf der Karte, um eine Verbindung mit client-auth an einen server:
dies ist relativ einfach zu übersetzen, um native code - suchen Sie einfach nach engine in den apps.c in openssl-apps.c-Datei - zu sehen, wie dies getan wird. In den meisten Fällen ist es einige
im Gegensatz zu dem alten
InformationsquelleAutor Dirk-Willem van Gulik