【发布时间】:2018-03-03 15:30:37
【问题描述】:
我有一个 crt 和密钥文件以及一个密码。
我正在通过 Postman 成功使用这些来调用外部 API。 如何在 C# 中执行此操作?
我看到了将 X509Certificate 与 httpclient 一起使用的示例,但我没有看到构造函数的任何选项,我可以在其中使用 2 个文件并设置密码
【问题讨论】:
标签: c# https httpclient x509certificate
我有一个 crt 和密钥文件以及一个密码。
我正在通过 Postman 成功使用这些来调用外部 API。 如何在 C# 中执行此操作?
我看到了将 X509Certificate 与 httpclient 一起使用的示例,但我没有看到构造函数的任何选项,我可以在其中使用 2 个文件并设置密码
【问题讨论】:
标签: c# https httpclient x509certificate
.NET 不会轻易为您做到这一点。
老实说,最好的办法是使用 OpenSSL 之类的东西将证书和密钥粘合到 PFX 中。
假设您决定不这样做,答案现在应该继续。
不乏询问如何在没有证书的情况下加载密钥的问题,例如:
一旦你弄清楚如何加载密钥,你就有了一个密钥和一个证书,但它们彼此不理解。有解决办法。
如果您使用 .NET Core,或者正在使用 .NET Framework 4.7.2,则可以使用
X509Certificate2 certWithKey = cert.CopyWithPrivateKey(privateKey);
如果您将 certWithKey 添加到 X509Store,您要么需要使用持久密钥,要么导出到 PFX 并使用 X509KeyStorageFlags.PersistKeySet 将其导入回
如果(全部):
RSACryptoServiceProvider 或DSACryptoServiceProvider
!string.IsNullOrEmpty(key.CspKeyContainerInfo.KeyContainerName))那么你可以使用 X509Certificate2.PrivateKey 的设置器。
在我对.NET Standard - Merge a certificate and a private key into a .pfx file programmatically 的回答底部有一些 P/Invoke 建议,用于制作 PFX。一旦你制作了 PFX,你就回到了“简单”的领域。
【讨论】:
Console.ReadKey() 提示用户时才应该使用 SecureString,但字符串重载更适合大多数人的需求