c# https 调用 crt 和密钥文件与密码
Posted
技术标签:
【中文标题】c# https 调用 crt 和密钥文件与密码【英文标题】:c# https call with crt and key file with passphrase 【发布时间】:2018-03-03 15:30:37 【问题描述】:我有一个 crt 和密钥文件以及一个密码。
我正在通过 Postman 成功使用这些来调用外部 API。 如何在 C# 中执行此操作?
我看到了将 X509Certificate 与 httpclient 一起使用的示例,但我没有看到构造函数的任何选项,我可以在其中使用 2 个文件并设置密码
【问题讨论】:
【参考方案1】:.NET 不会轻易为您做到这一点。
老实说,最好的办法是使用 OpenSSL 之类的东西将证书和密钥粘合到 PFX 中。
假设您决定不这样做,答案现在应该继续。
不乏询问如何在没有证书的情况下加载密钥的问题,例如:
Digital signature in c# without using BouncyCastle How to parse(Convert to RSAParameters) X.509 private key in C#? Create RSACryptoServiceProvider object using RSA private key file in C# How is a private key encrypted in a pem certificate?一旦你弄清楚如何加载密钥,你就有了一个密钥和一个证书,但它们彼此不理解。有解决办法。
最安全、最简单的下一步:
如果您使用 .NET Core,或者正在使用 .NET Framework 4.7.2,则可以使用
X509Certificate2 certWithKey = cert.CopyWithPrivateKey(privateKey);
如果您将 certWithKey 添加到 X509Store,您要么需要使用持久密钥,要么导出到 PFX 并使用 X509KeyStorageFlags.PersistKeySet
将其导入回
远秒:
如果(全部):
您使用的是 .NET Framework(不是 .NET Core) 您的密钥是RSACryptoServiceProvider
或DSACryptoServiceProvider
您的密钥已加载到密钥容器中 (!string.IsNullOrEmpty(key.CspKeyContainerInfo.KeyContainerName)
)
您要么没有从 X509Store 获得此证书,要么您不害怕潜在的意外副作用
那么你可以使用 X509Certificate2.PrivateKey 的设置器。
最后的想法
在我对.NET Standard - Merge a certificate and a private key into a .pfx file programmatically 的回答底部有一些 P/Invoke 建议,用于制作 PFX。一旦你制作了 PFX,你就回到了“简单”的领域。
【讨论】:
感谢@bartonjs 的回复。因此,如果我更改为 pfx(让生活更轻松),我可以使用 X509Certificate(string fileName, SecureString password) ctr @Noel 是的。虽然只有在通过Console.ReadKey()
提示用户时才应该使用 SecureString,但字符串重载更适合大多数人的需求以上是关于c# https 调用 crt 和密钥文件与密码的主要内容,如果未能解决你的问题,请参考以下文章