2017-04-24 638 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