c# https 调用,使用 crt 和带有密码的密钥文件

Noe*_*oel 5 c# https httpclient x509certificate

我有一个 crt 和密钥文件以及密码。

我通过 Postman 成功使用这些来调用外部 API。我如何在 C# 中执行此操作?

我看到了将 X509Certificate 与 httpclient 一起使用的示例,但没有看到构造函数的任何选项,我可以在其中使用 2 个文件并设置密码

bar*_*njs 4

.NET 不会轻易地为您做到这一点。

老实说,最好的选择是使用 OpenSSL 之类的工具将证书和密钥粘合在一起形成 PFX。

假设您决定不这样做,答案现在将继续。

不乏询问如何在没有证书的情况下加载密钥的问题,例如:

一旦您弄清楚如何加载密钥,您就拥有了密钥和证书,但它们彼此无法理解。有解决方案。

最安全、最简单的下一步:

如果您使用 .NET Core,或者使用 .NET Framework 4.7.2,则可以使用

X509Certificate2 certWithKey = cert.CopyWithPrivateKey(privateKey);
Run Code Online (Sandbox Code Playgroud)

如果您要将 certWithKey 添加到 X509Store,您要么需要使用持久密钥,要么导出到 PFX 并使用以下命令将其导入回来X509KeyStorageFlags.PersistKeySet

在遥远的第二位:

如果(全部):

  • 您使用的是 .NET Framework(而不是 .NET Core)
  • 你的钥匙是一个RSACryptoServiceProvider或一个DSACryptoServiceProvider
  • 您的钥匙已装入钥匙容器 ( !string.IsNullOrEmpty(key.CspKeyContainerInfo.KeyContainerName))
  • 您要么没有从 X509Store 获得此证书,要么您不担心潜在的意外副作用

那么你可以使用X509Certificate2.PrivateKey的setter。

最后的想法

在我对.NET Standard - 将证书和私钥以编程方式合并到 .pfx 文件中以制作 PFX 的答案的底部有一些 P/Invoke 建议。一旦你制作了 PFX,你就回到了“简单”的领域。