使用 CRT 的 C# HTTPS 调用和带有密码的密钥文件



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

我通过邮递员成功地使用这些来调用外部 API。 如何在 c# 中执行此操作?

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

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

老实说,最好的选择是使用OpenSSL之类的东西将证书和密钥粘合到PFX中。

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

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

  • C# 中的数字签名,不使用 BouncyCastle
  • 如何在C#中解析(转换为RSAParameter)X.509私钥?
  • 在 C# 中使用 RSA 私钥文件创建 RSACryptoServiceProvider 对象
  • 如何在 pem 证书中加密私钥?

一旦你想出了如何加载密钥,你就有一个密钥和一个证书,它们彼此不理解。 有解决方案。

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

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

X509Certificate2 certWithKey = cert.CopyWithPrivateKey(privateKey);

如果要将 certWithKey 添加到 X509Store,则需要使用持久密钥,或者导出到 PFX 并使用X509KeyStorageFlags.PersistKeySet将其导入回

在遥远的第二位:

如果(全部):

  • 您使用的是 .NET Framework(不是 .NET Core)
  • 您的密钥是RSACryptoServiceProviderDSACryptoServiceProvider
  • 您的密钥已加载到密钥容器中 (!string.IsNullOrEmpty(key.CspKeyContainerInfo.KeyContainerName))
  • 您要么没有从 X509Store 获得此证书,要么不担心潜在的意外副作用

然后你可以使用 X509Certificate2.PrivateKey 的 setter。

结语

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

相关内容

  • 没有找到相关文章

最新更新