2016-12-01 14 views
4

nicht unterstützt. Ich versuche, ein selbstsigniertes Zertifikat zu erstellen (programmgesteuert) in einer C# -Assembly (Targeting .NET 4.0), um als eine Stammzertifizierungsstelle zu dienen, andere Zertifikate zu generieren. Das Zertifikat muss nicht im Windows-Zertifikatspeicher gespeichert werden, ich werde es als Datei exportieren.Die angeforderte Operation wird in CngKey.Create

Durchlesen this question (und insbesondere @dthorpe's answer), entschied ich mich, CLR Security zu versuchen.

Die CLR Security Bibliothek stellen eine Erweiterungsmethode auf CngKey class ein selbst signiertes Zertifikat zu generieren, aber ich konnte in eine Instanz von CngKey mit nicht gelingen:

var key = CngKey.Create(CngAlgorithm.Sha1); //same with Sha256, Sha512 and MD5 
//or 
var key = CngKey.Create(CngAlgorithm.Sha1, null, new CngKeyCreationParameters() 
{ 
    ExportPolicy = CngExportPolicies.AllowExport, 
    KeyUsage = CngKeyUsages.AllUsages, 
    KeyCreationOptions = CngKeyCreationOptions.MachineKey, 
}); 

Jede dieser Linien wirft die Ausnahme:

System.Security.Cryptography.CryptographicException unhandled war
HResult = -2146893783
Message = Die angeforderte Operation wird nicht unterstützt.

Source=System.Core 
StackTrace: 
    at System.Security.Cryptography.NCryptNative.CreatePersistedKey(SafeNCryptProviderHandle provider, String algorithm, String name, CngKeyCreationOptions options) 
    at System.Security.Cryptography.CngKey.Create(CngAlgorithm algorithm, String keyName, CngKeyCreationParameters creationParameters) 
    at System.Security.Cryptography.CngKey.Create(CngAlgorithm algorithm) 
    at Tests.Program.Main(String[] args) at Program.cs:line 51 

Suche durch SO und das Internet, habe ich folgendes geprüft:

  • Ich bin mit einem Windows 7-Box (so unterstützt es RPC gemäß MSDN)
  • Versuchte in einem Windows Server 2012-Feld, der gleiche Fehler
  • Der Prozess läuft als admin (so dass es Zugriff auf alle Cert-Speicher haben, sowieso)
  • Th Die Dienste CNG Key Isolation und Remote Procedure Call (RPC) werden ausgeführt

Jede Hilfe wäre willkommen.

Antwort

1

Kleinen Wegthema: bei Google-Suche für diese Frage a site with HRESULT descriptions und handliches Suchwerkzeug auf SO und MSDN (für Ihren HRESULT Code -2146893783 ich einfach googeln) gefunden


ich ein topic on MSDN, den Code enthält Fehler mit ähnlichen HRESULT und stellt der Autor eine link to MSDN article about CNG:

NCRYPT_ALGORITHM_GROUP_PROPERTY L "Algorithm Group"
Eine nullterminierte Unicode-Zeichenfolge, die den Namen der Algorithmusgruppe des Objekts enthält. Diese Eigenschaft gilt nur für Schlüssel. Die folgenden Kennungen werden von der Microsoft-Schlüssel Storage-Anbieter zurückgegeben:

  • NCRYPT_RSA_ALGORITHM_GROUP
    "RSA", The RSA Algorithmus Gruppe.
  • NCRYPT_DH_ALGORITHM_GROUP
    "DH", die Diffie-Hellman Algorithmusgruppe.
  • NCRYPT_DSA_ALGORITHM_GROUP
    "DSA", die DSA Algorithmusgruppe.
  • NCRYPT_ECDSA_ALGORITHM_GROUP
    "ECDSA", die elliptic curve DSA Algorithmusgruppe.
  • NCRYPT_ECDH_ALGORITHM_GROUP
    "ECDH", die elliptic curve Diffie-Hellman Algorithmusgruppe.

Auch fand ich einen Artikel auf MSDN über CNG Key Storage Providers, die ähnliche Liste der Algorithmen enthält:

  • Diffie-Hellman (DH)
    geheime Vereinbarung und Schlüsselaustausch, 512 to 4096 in 64-bit increments
  • Digitaler Signaturalgorithmus (DSA) Signaturen, 512 to 1024 in 64-bit increments
  • Elliptic Curve Diffie-Hellman (ECDH) geheime Vereinbarung und Schlüsselaustausch, P256, P384, P521
  • Elliptic Curve Digital Signature Algorithm (ECDSA) Signaturen, P256, P384, P521
  • RSA Asymmetrische Verschlüsselung und Signatur, 512 to 16384 in 64-bit increments

Also, wie Sie gesagt haben, dass Sie nur Sha1, Sha256, Sha512 und MD5 versucht haben, vielleicht verwenden Sie einfach einen anderen algorithm from list available?

Here other developers successfully created einer von ihnen und war in der Lage, es zu exportieren:

var cngKey = CngKey.Create(CngAlgorithm.ECDiffieHellmanP256, null, 
    new CngKeyCreationParameters { ExportPolicy = CngExportPolicies.AllowPlaintextExport }); 
+0

Das war in der Tat mein Problem. Vielen Dank. Auf der Seite der von Ihnen verknüpften CNG-Schlüsselspeicheranbieter heißt es: "Microsoft installiert die folgenden KSPs, beginnend mit Windows Vista und Windows Server 2008. Anbieter können andere Anbieter erstellen und installieren." – Dinei

Verwandte Themen