Der private Schlüssel wird beim Laden aus dem Zertifikatsspeicher nicht geladen

Die Authentifizierung bei RavenDB 4 muss über Zertifikate erfolgen, die ich über Let’s Encrypt erstellt habe. Mein privates Schlüsselzertifikat (.pfx) wird im Azure Key Vault gespeichert. Da nur passwortgeschützte Zertifikate hochgeladen werden können, habe ich es über ein Passwort gesichert.

Beim Laden des Zertifikats über die Verwendung von Fingerabdruck des Zertifikats zeigt es immer, dass es keinen privaten Schlüssel hat, wodurch der Authentifizierungsprozess in meiner RavenDB-Instanz fehlschlägt. Sowohl lokal über den Windows Certificate Store als auch bei Azure.

Ich habe bereits versucht, mit privates Schlüsselzertifikat ohne Passwort zu arbeiten, ich konnte dann den privaten Schlüssel erhalten. Dies ist jedoch keine Lösung, da ich sie nicht in Azure hochladen kann.

var certStore = new X509Store(StoreName.My, StoreLocation.CurrentUser);
certStore.Open(OpenFlags.ReadOnly);
X509Certificate2 targetClientCertificate;
var certCollection = certStore.Certificates.Find(X509FindType.FindByThumbprint, ravenDbSettings["CertificateThumbPrint"], false);
targetClientCertificate = new X509Certificate2(certCollection[0].GetRawCertData(), ravenDbSettings["CertificatePassword"], X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable); ;

Ich habe es auch über die Verwendung des Exports versucht, den ich irgendwo gefunden habe

var targetTwo = new X509Certificate2(certCollection[0].Export(X509ContentType.Pfx, ravenDbSettings["CertificatePassword"]));

Aber dann bekam ich

Internal.Cryptography.CryptoThrowHelper.WindowsCryptographicException: 'Key not valid for use in specified state'

Mein Ziel ist es, den privaten Schlüssel des Zertifikats zu laden und mich so bei RavenDB authentifizieren zu können.

🤔 А знаете ли вы, что...
C# поддерживает LINQ (Language Integrated Query) для удобного запроса и обработки данных.


1 013
2

Antworten:

Das hat wahrscheinlich mit der Art und Weise zu tun, wie Sie Ihr Zertifikat erstellen. Versuche dies:

OpenSSL herunterladen:http://gnuwin32.sourceforge.net/packages/openssl.htm

Zertifikat und privaten Schlüssel generieren: openssl req -new -newkey rsa:1024 -days 365 -nodes -x509 -keyout YourName.key -out YourName.cert

PFX-Datei generieren: openssl pkcs12 -export -inkey IhrName.Schlüssel -in IhrName.cert -out IhrName.pfx

Importieren IhrName.pfx in den Store


Gelöst

Sie müssen ein vorhandenes Zertifikat verwenden, das in der Variablen certCollection gespeichert ist. Die letzte Zeile (wo Sie die Variable targetClientCertificate ausfüllen) ist nicht erforderlich und funktioniert nicht, wenn der private Schlüssel nicht exportierbar ist. Wenn der Code eine vorhandene Instanz der Klasse X509Certificate2 erfordert, wird er in certCollection gespeichert und verfügt über einen zugehörigen privaten Schlüssellink.