为证书提供 EC 私钥以在 HttpClient C# 中使用

2023-11-26

我有一个可以使用 X509Certificate2 类读取的证书,如下所示:

X509Certificate2 证书 = new X509Certificate2(@"certificate.pem");

但我也有一个EC私钥。这是它的文件内容。

-----BEGIN EC PRIVATE KEY-----
MHcCAQEEIKpAuZ/Wwp7FTSCNJ56fFM4Y/rf8ltXp3xnrooPxNc1UoAoGCCqGSM49
AwEHoUQDQgAEqiRaEw3ItPsRAqdDjJCyqxhfm8y3tVrxLBAGhPM0pVhHuqmPoQFA
zR5FA3IJZaWcopieEX5uZ4KMtDhLFu/FHw==
-----END EC PRIVATE KEY-----

我如何将此私钥“提供”到证书并最终提供给我的Http客户端这样它就可以用作客户端证书了?

这是我的其余代码:

X509Certificate2 certificate = new X509Certificate2(@"certificate.pem");
//certificate.PrivateKey = something;
httpClientHandler.ClientCertificates.Clear();
httpClientHandler.ClientCertificates.Add(certificate);
httpClientHandler.SslProtocols = SslProtocols.Tls12;
httpClientHandler.ClientCertificateOptions = ClientCertificateOption.Manual;

HttpClient httpClient = new HttpClient(httpClientHandler);
HttpResponseMessage result = httpClient.GetAsync("https://server.cryptomix.com/secure/").Result;
string str = result.Content.ReadAsStringAsync().Result;

我想我已经明白了...这使用 BouncyCastle NuGet 包。

using Org.BouncyCastle.Crypto;
using Org.BouncyCastle.OpenSsl;
using Org.BouncyCastle.Pkcs;
using Org.BouncyCastle.Security;
using System.Security.Cryptography.X509Certificates;
using System;
using System.IO;

string pemKey = @"-----BEGIN EC PRIVATE KEY-----
MHcCAQEEIKpAuZ/Wwp7FTSCNJ56fFM4Y/rf8ltXp3xnrooPxNc1UoAoGCCqGSM49
AwEHoUQDQgAEqiRaEw3ItPsRAqdDjJCyqxhfm8y3tVrxLBAGhPM0pVhHuqmPoQFA
zR5FA3IJZaWcopieEX5uZ4KMtDhLFu/FHw==
-----END EC PRIVATE KEY-----";

string pemCert = @"-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----";

var keyPair = (AsymmetricKeyParameter)new PemReader(new StringReader(pemKey)).ReadObject();
var cert = (Org.BouncyCastle.X509.X509Certificate)new PemReader(new StringReader(pemCert)).ReadObject();

var builder = new Pkcs12StoreBuilder();
builder.SetUseDerEncoding(true);
var store = builder.Build();

var certEntry = new X509CertificateEntry(cert);
store.SetCertificateEntry("", certEntry);
store.SetKeyEntry("", new AsymmetricKeyEntry(keyPair.Private), new[] { certEntry });

byte[] data;
using (var ms = new MemoryStream())
{
    store.Save(ms, Array.Empty<char>(), new SecureRandom());
    data = ms.ToArray();
}

var x509Cert = new X509Certificate2(data);

诀窍似乎是将证书和密钥组合到一个 pkcs12 容器中,然后将其输入X509Certificate2一气呵成。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为证书提供 EC 私钥以在 HttpClient C# 中使用 的相关文章

随机推荐

  • 将带有 NSNotificationCenter 的对象传递给其他视图

    我试图将一个对象从我的主视图类传递到另一个类中的其他通知接收器 我想传递一个名为 Country 的对象 该对象从主控制器中的 SOAP 请求加载所有城市 并且我想将其发送到下一个视图 国家 国家分配 init 国家 地区标题 interf
  • Eclipse CDT 抱怨未解决的功能,但仍然构建成功

    以下 C 应用程序在 Eclipse CDT 中成功编译并运行 但 IDE 仍然报告错误 Could not resolve function wprintf include
  • 如何禁用这些 VSCode 工具提示? [复制]

    这个问题在这里已经有答案了 每当我打字时 这些工具提示就会出现 有办法禁用它们吗 有几种方法可以在 VSCode 中自定义 IntelliSense 我相信你照片中的那个是参数提示 你可以去文件 首选项 设置并搜索 parameterHin
  • 如何在支持 Python 3 的 OSX 上安装 vim?

    我安装时遇到问题vim with python 3 for MacOS 我知道有一个类似的类似的问题关于那个话题 但我无法解决问题 首先我跑了vim version并得到了 Included patches 1 503 505 680 68
  • 如何从 Firebase 实时数据库导出数据?

    我正在使用 Firebase 进行开发 并将数据存储在实时数据库 我需要在 Stack Overflow 上分享我的数据库结构以解决问题 或者在进行重大更改之前进行备份 如何使用 Firebase 控制台执行此操作 数据可以从 Fireba
  • 使用 PowerShell 在远程服务器上安装证书

    我想在远程服务器上安装使用 makecert exe 创建的证书 X 509 我无法使用 psexec 或类似的东西 但必须使用 PowerShell 服务器操作系统 Windows Server 2008 R2 PowerShell 版本
  • Meteor 找到带有 id 的对象

    假设我有一个 id 字符串 看起来像557fba5a8032a674d929e6a1它存储在会话中 我尝试检索一个文档 其 id与上面相同 但即使它存在我也找不到它 Posts findOne id 557fba5a8032a674d929
  • 将 2500 个 geoJSON 多边形渲染到传单地图上

    我一直在寻找但似乎找不到解决方案 我有一个大小为 170mb 的 GeoJSON 文件 它包含大约 2500 个多边形 不知何故 我需要将其渲染为传单地图 显然以这样的规模我没有机会 呈现这些数据的最简单方法是什么 我是否能够创建一个完整的
  • django中如何动态创建权限?

    现在我可以使用 Django 组模块创建新组 from django contrib auth models import Group我可以为组分配权限 例如我创建了一个新组 人力资源 by Group name HR 现在我想创建像这样的
  • 如何将 javascript 值设置为 jinja 变量

    我知道我们可以像这样将 Jinja 变量设置为 js 变量 var x value 但我正在尝试做相反的事情 即我正在尝试将 javascript 值设置为 jinja 变量 我尝试了以下方法 但没有任何效果 value x set val
  • .zshrc 配置文件语法错误

    我在 zshrc 文件中的某处遇到语法错误 但我似乎找不到它 我收到此错误消息 zshrc 49 bad assignment 这是我的 zshrc 文件 Path to your oh my zsh configuration ZSH H
  • R:数据框中的重音字符

    我很困惑为什么某些字符 例如 和 在数据框中丢失了变音标记 而其他字符 例如 和 却没有 顺便说一句 我的操作系统是 Windows 10 在下面的示例代码中 向量 czechvec 有 11 个单字符字符串 全部是斯拉夫重音字符 R 正确
  • 学说合并:日期时间字段始终更新

    我用现有的实体创建一个新实体Id 我想更新相关的数据库记录 教义merge一直是我最好的朋友 识别是否有更改并生成正确的更新查询 entity new Entity entity gt setId 1 entity gt setName t
  • 如何使用 stringr 的 Replace_all() 函数替换字符串中的特定匹配项

    The stringr包有帮助str replace and str replace all 功能 例如 mystring lt one fish two fish red fish blue fish str replace mystri
  • Keras 极高的损失

    我试图通过特征来预测价格 我选择了一个非常简单的模型 但它的工作原理很奇怪 损失函数非常高 我看不出问题出在哪里 这是我的模型 define base model def baseline model create model model
  • 在Java流中添加多个字段(以及条件流操作)

    假设我有这门课 public class Thing private BigDecimal field1 private BigDecimal field2 private BigDecimal otherField1 private Bi
  • php中数组的右旋转

    例如我有一个数组 a 1 2 3 4 5 由此 a 如何获取最后一个并将其设置为第一个 5 1 2 3 4 我如何将最后两个数组变成这样 4 5 1 2 3 您可以结合使用array pop which pops数组的最后一个元素 以及ar
  • 通过 python 在脚本中使用密码 ssh 到远程计算机

    我正在使用远程机器 每次我需要验证文件更新时间时 我都必须使用 ssh 并且有多个脚本可以通过 ssh 连接到远程计算机 我在网上查了一下 但找不到符合我要求的 我试图找到一个使用 ssh 的 python 脚本 并且密码也在脚本中 因为我
  • 始终在 jQuery 自动完成中显示特定选择,即使它与输入不匹配

    我有一个 jQuery 自动完成 jquery ui 版本 1 8 我可以在其中输入一个名称 如果可用 我希望用户从列表中选择一个名称 因为这些是我们数据库中的所有者名称 但是 有时他们需要添加新的所有者名称 在这种情况下 我希望他们从自动
  • 为证书提供 EC 私钥以在 HttpClient C# 中使用

    我有一个可以使用 X509Certificate2 类读取的证书 如下所示 X509Certificate2 证书 new X509Certificate2 certificate pem 但我也有一个EC私钥 这是它的文件内容 BEGIN