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) 您的密钥是RSACryptoServiceProviderDSACryptoServiceProvider 您的密钥已加载到密钥容器中 (!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 和密钥文件与密码的主要内容,如果未能解决你的问题,请参考以下文章

国密算法

国密算法

ssh免密登录

openssl 加解密以及国密算法

Hadoop集群配置免密登录方法

003 国密算法【技术】