【问题标题】:c# https call with crt and key file with passphrasec# https 调用 crt 和密钥文件与密码
【发布时间】:2018-03-03 15:30:37
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# https httpclient x509certificate


    【解决方案1】:

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

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

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

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

    一旦你弄清楚如何加载密钥,你就有了一个密钥和一个证书,但它们彼此不理解。有解决办法。

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

    如果您使用 .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,但字符串重载更适合大多数人的需求
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-15
    • 2020-10-11
    • 1970-01-01
    相关资源
    最近更新 更多