2017-04-24 3 views
1

Ich habe eine bestehende Anwendung in .NET 4.5, wo ich X509Certificate2 private und öffentliche Schlüssel verwenden. Ich migriere es zu .net core. Ich bekomme nicht, wie man die privaten und öffentlichen Schlüsselwerte in XML-Format liest. Ich habe unten Code in .NET 4,5Get X509Certificate2 Private und öffentliche Schlüssel

var PublicKey = certificate.PublicKey.Key.ToXmlString(false); 
var PrivateKey = certificate.PrivateKey.ToXmlString(true); 

Wie kann ich das gleiche in .net Kern erreichen, wie die PrivateKey Eigenschaft entfernt wird?

Ich kenne die ImportParameters und ExportParameters Methoden, um in XML-Strings zu konvertieren. Aber was ich sehe, ist Zugriff auf PublicKey.Key und PrivateKey Eigenschaften, die mir das AsymmetricAlgorithm Objekt, das in RSACrypoServiceProvider gegossen werden konnte.

In .netCore gibt es Methoden GetRSAPublicKey und GetRSAPrivateKey, sie geben RSACng Objekte zurück. Die andere Seite der Anwendung, die dieses Zertifikat verwendet, verifiziert Daten mit RSACryptoServiceProvider.

+1

'PrivateKey' wird in .Net Core 2.0 sein – VMAtm

Antwort

1

und PublicKey.Key wurden nicht zu .NET Core gebracht, gerade weil jeder sie auf RSACryptoServiceProvider wirft. Während Sie eine RSACng unter Windows erhalten, ist es eine RSAOpenSsl unter Linux.

Sie sollten wirklich alle Typreferenzen auf RSA ändern, da .NET 4.6 (und .NET Core 1.0) die RSA-Basisklasse korrigiert haben, um alle erforderlichen Sign/Verify // Encrypt/Decrypt-Methoden verfügbar zu machen.

.NET Core ist nicht in der Lage, Schlüssel im XML-Format zu lesen oder zu schreiben. Auch wenn die Methoden wieder existieren für .NET Core 2.0 sie werfen nur einen PlatformNotSupportedException, da eine zirkuläre Abhängigkeit ist:

  • Cryptography.Algorithms -> XML
  • XML -> Netzwerk (einschließlich TLS)
  • Networking/TLS -> X509Certificates
  • X509Certificates -> Cryptography.Algorithms

Wenn Sie die XML-Serialisierung von asymmetrischen Schlüsseln benötigen, müssen Sie es in Ihre eigenen Bibliotheken zu schreiben.

+0

Einverstanden! Aber die Anwendung, an die ich mein Zertifikat weitergebe, ist in einer älteren Version von .net und verifiziert Daten mit 'RSACrytpoServiceProvider'. Wenn ich versuche, mit den Zertifikaten und SignedData aufzurufen, die in .Net-Kern ('RSA') erstellt wurden, erhalte ich die ungültige Zertifikat-ungültige und Signatur-Ausnahme. Wie gehe ich dieses Problem an? Und bezüglich der Umwandlung in 'XML'-Strings, ja, ich habe meine eigenen Erweiterungsmethoden erstellt. – My3

Verwandte Themen