Ich habe eine Client-Server-Architektur in meiner Anwendung, die SSL verwendet. Momentan wird der private Schlüssel in CAPIs Schlüsselspeicherort gespeichert. Aus Sicherheitsgründen möchte ich den Schlüssel an einem sichereren Ort aufbewahren, idealerweise ein Hardware Signing Modul (HSM), das für diesen Zweck gebaut wird. Leider kann ich mit dem privaten Schlüssel, der auf einem solchen Gerät gespeichert ist, nicht herausfinden, wie ich es in meiner Anwendung verwenden kann.SSL mit privatem Schlüssel auf einem HSM
Auf dem Server verwende ich einfach die SslStream
Klasse und die AuthenticateAsServer(...)
Aufruf. Diese Methode benötigt ein X509Certificate
Objekt, das seinen privaten Schlüssel geladen hat, aber da der private Schlüssel in einem sicheren (z. B. nicht exportierbaren) Speicherort auf dem HSM gespeichert ist, weiß ich nicht, wie das zu tun ist.
auf dem Client Ich verwende ein HttpWebRequest
Objekt und dann die ClientCertificates
Eigenschaft mit meinem Client-Authentifizierungszertifikat hinzufügen, aber ich habe das gleiche Problem: Wie bekomme ich die privaten Schlüssel?
Ich weiß, dass es einige HSM gibt, die als SSL-Beschleuniger fungieren, aber ich brauche keinen Beschleuniger. Außerdem haben diese Produkte eine spezielle Integration mit Webservern wie IIS und Apache, die ich nicht verwende.
Irgendwelche Ideen? Das einzige, was mir einfällt, wäre, meine eigene SSL-Bibliothek zu schreiben, die es mir erlauben würde, den signierenden Teil der Transaktion an das HSM zu übergeben, aber das scheint eine Menge Arbeit zu sein.
Mit welchen HSMs haben Sie auf diese Weise mit dieser Funktion gearbeitet? Ich evaluiere ein Paar und beide funktionieren ähnlich, indem sie einen kryptografischen Dienstanbieter zur Verwendung mit CAPI bereitstellen. Sie haben jeweils die Fähigkeit, einfach Schlüssel zu generieren, Daten zu verschlüsseln/zu entschlüsseln, zu hashen und zu signieren. Soweit ich das beurteilen kann, müsste ich meine eigene Zertifikatanforderung erstellen und das HSM für mich signieren lassen (da es nur den privaten Schlüssel hat). Hoffentlich verpasse ich etwas oder schaue mir einfach nicht die richtigen HSM an? – Jason
Hauptsächlich eine Variation von nCipher HSMs; PCI HSMs + NetHSMs. Die ausführende Version der Funktionsweise ihrer Geräte besteht darin, dass die Kryptooperation zum HSM geleitet wird. Das HSM ist das einzige, das den privaten Schlüssel kennt. Daher führt es die Kryptooperation aus und gibt das Ergebnis zurück. Tatsächlich befindet sich der private Schlüssel im normalen Zertifikatsspeicher auf der Maschine, aber er ist 3DES-verschlüsselt und der 3DES-Schlüssel befindet sich im HSM. Wenn Sie Ihre Kryptooperation ausführen, werden die Daten + der Zertifikatschlüssel + die 3DES-Schlüsselkennung an das HSM gesendet, der private Schlüssel des Zertifikats entschlüsselt und die Operation ausgeführt. – Rovpedal
Interessant, ich muss in diese Produkte schauen. Wenn ich den Workflow verstehe, steht der private Schlüssel dann in der Software zur Verfügung, wenn er entschlüsselt wird? Das würde den Zweck des HSM besiegen. Der entschlüsselte Schlüssel ist also möglicherweise nur für das HSM selbst verfügbar. In welchem Fall verwendet Ihre Anwendung sie? – Jason