2017-04-24 115 views
1

我有一個.NET 4.5中的現有應用程序,我使用X509Certificate2私鑰和公鑰。我正在將其遷移到.net核心。我沒有得到如何將私鑰和公鑰值讀入XML格式。我有下面的代碼在.NET 4.5獲取X509Certificate2私鑰和公鑰

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

如何實現.NET的核心一樣PrivateKey財產被刪除?

我知道ImportParametersExportParameters轉換爲XML字符串的方法。但是我正在看的是訪問PublicKey.KeyPrivateKey屬性,它使我得到了可以被轉換爲RSACrypoServiceProvider的AsymmetricAlgorithm對象。

在.netCore中有方法GetRSAPublicKeyGetRSAPrivateKey,它們返回RSACng對象。使用此證書的應用程序的另一端使用RSACryptoServiceProvider驗證數據。

+1

'PrivateKey'將在.Net Core 2.0 – VMAtm

回答

1

X509Certificate2.PrivateKeyPublicKey.Key沒有提交給.NET Core,因爲每個人都將它們投射到RSACryptoServiceProvider。當您在Windows上獲得RSACng時,它在Linux上是RSAOpenSsl

因爲.NET 4.6(和.NET Core 1.0)更正了RSA基類以公開所有必需的Sign/Verify // Encrypt/Decrypt方法,所以您實際上應該將所有類型引用更改爲RSA

.NET Core無法讀取或寫入XML格式的密鑰。即使再次.NET 2.0的核心存在的方法,他們只是拋出一個PlatformNotSupportedException,因爲有一個循環依賴:

  • Cryptography.Algorithms - > XML
  • XML - >網絡(包括TLS)
  • 網絡/ TLS - > X509Certificates
  • X509Certificates - > Cryptography.Algorithms

如果你需要,你需要將它寫入自己的庫非對稱密鑰的XML序列化。

+0

同意!但是,我通過證書的應用程序是舊版本的.net,並使用'RSACrytpoServiceProvider'驗證數據。當我嘗試使用在.Net核心('RSA')中創建的證書和SignedData進行調用時,我得到Certificate Invalid和Signature invalid exception。我如何解決這個問題。關於轉換成XML字符串,是的,我創建了自己的擴展方法。 – My3