获取X509Certificate2私钥和公钥

时间:2017-04-24 08:41:31

标签: c# .net cryptography .net-core

我在.NET 4.5中有一个现有的应用程序,我使用X509Certificate2私钥和公钥。我正在将其迁移到.net核心。我没有得到如何将私钥和公钥值读入XML格式。我在.NET 4.5中有以下代码

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

如何在删除PrivateKey属性的.net核心中实现相同的功能?

我知道要转换为XML字符串的ImportParametersExportParameters方法。但我正在查看的是访问PublicKey.KeyPrivateKey属性,这些属性可以获取AsymmetricAlgorithm对象,该对象可以转换为RSACrypoServiceProvider。

在.netCore中有方法GetRSAPublicKeyGetRSAPrivateKey,它们返回RSACng个对象。使用此证书的应用程序的另一端使用RSACryptoServiceProvider验证数据。

1 个答案:

答案 0 :(得分:1)

X509Certificate2.PrivateKeyPublicKey.Key并未完全转移到.NET Core,因为每个人都将它们转换为RSACryptoServiceProvider。当你在Windows上获得RSACng时,它在Linux上是RSAOpenSsl

您应该只更改RSA的所有类型引用,因为.NET 4.6(和.NET Core 1.0)更正了RSA基类以公开所有必需的签名/验证//加密/解密方法

.NET Core无法读取或写入XML格式的密钥。即使这些方法再次存在于.NET Core 2.0中,它们也会抛出PlatformNotSupportedException,因为存在循环依赖:

  • 密码学。算法 - > XML
  • XML - >网络(包括TLS)
  • Networking / TLS - > X509Certificates
  • X509Certificates - > Cryptography.Algorithms

如果您需要非对称密钥的XML序列化,则需要将其写入您自己的库中。