ssl 在.net标准2.1中从客户端证书和密钥文件创建X509Certificate2对象

dced5bon  于 2023-02-04  发布在  .NET
关注(0)|答案(1)|浏览(144)

. Net6有一个函数X509Certificate2.CreateFromPem,在.Net Standard 2.1中使用客户端证书和密钥.pem文件并创建X509Certificate2对象的方法是什么?

bis0qfac

bis0qfac1#

.NET Standard 2.1是一个不寻常的目标,因为它本质上只是.NET Core开发线(尽管Unity已经更新了他们的.NET副本,使其兼容.NET Standard 2.1)。因此,业界最常见的答案是避免该目标,而只针对满足您需求的.NET Core / .NET 5+版本。
但是,如果您确实希望以.NET标准2.1为目标,则需要

  • 使用byte[](编码内容)或string(文件名)构造函数加载证书,这两个构造函数都理解PEM格式(但不会加载私钥)。
  • 如果PEM内容是字符串形式,则需要通过Encoding.Utf8.GetBytes将其转换为字节
  • 使用cert.GetKeyAlgorithm()的值了解私钥使用的算法。根据需要调用RSA.Create()、ECDsa.Create()、ECDiffieHellman.Create()或DSA.Create()。
  • 加载密钥文件的PEM内容。
  • 使用PEM头来了解有效负载的数据类型。
  • Base64-解码PEM有效载荷
  • 将解码后的有效负载发送到ImportPkcs 8 PrivateKey、ImportRSAPrivateKey或ImportECPrivateKey(由PEM报头确定)
  • 使用X509Certificate2 combined = cert.CopyWithPrivateKey(key);合并证书和密钥

https://github.com/dotnet/runtime/blob/9e8d0a81a35f05eaa2c4d0ab258ed9a1f4e2ec76/src/libraries/System.Security.Cryptography/src/System/Security/Cryptography/X509Certificates/X509Certificate2.cs#L937-L963 可能是一个合理的起点......但是它的很多实现使用了.NET Standard 2.1中没有的东西。

相关问题