【问题标题】:Get X509Certificate2 Private and Public keys获取 X509Certificate2 私钥和公钥
【发布时间】:2017-09-20 20:38:11
【问题描述】:

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

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 验证数据。

【问题讨论】:

  • PrivateKey 将在 .Net Core 2.0 中

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


【解决方案1】:

X509Certificate2.PrivateKeyPublicKey.Key 没有被引入 .NET Core 正是因为每个人都将它们转换为 RSACryptoServiceProvider。虽然您在 Windows 上获得 RSACng,但在 Linux 上却是 RSAOpenSsl

您实际上应该将所有类型引用更改为 RSA,因为 .NET 4.6(和 .NET Core 1.0)更正了 RSA 基类以公开所有必需的 Sign/Verify//Encrypt/Decrypt 方法。

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

  • Cryptography.Algorithms -> XML
  • XML -> 网络(包括 TLS)
  • 网络/TLS -> X509Certificates
  • X509Certificates -> Cryptography.Algorithms

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

【讨论】:

  • 同意!但是我通过我的证书的应用程序是旧版本的 .net 并使用 RSACrytpoServiceProvider 验证数据。当我尝试使用在 .Net 核心 (RSA) 中创建的证书和 SignedData 进行调用时,我得到 Certificate Invalid 和 Signature invalid 异常。我该如何解决这个问题。关于转换成XML 字符串,是的,我已经创建了自己的扩展方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-02
  • 2013-07-09
  • 2021-05-08
  • 1970-01-01
  • 1970-01-01
  • 2011-07-19
  • 1970-01-01
相关资源
最近更新 更多