【问题标题】:Include CA certificate in C# code在 C# 代码中包含 CA 证书
【发布时间】:2023-04-02 15:19:02
【问题描述】:

我想在资源文件 (Resources.resx) 中包含 CA 证书,并且一旦作为字节流读取,就会提供给 X509Certificate 构造函数类。 CA 证书为 .der 格式。我已将 .der 文件添加到项目的 Resources 文件夹中。如何在另一个类中访问它并将其传递给 X509Certificate 构造函数?

我正在关注此链接底部给出的 c# 代码 [http://www.embedded101.com/Blogs/PaoloPatierno/entryid/366/mqtt-over-ssl-tls-with-the-m2mqtt-library-and-the-mosquitto-broker]

更新:这是我在客户端做的方式。

    client = new MqttClient(ddlServerIP.Text, MqttSettings.MQTT_BROKER_DEFAULT_SSL_PORT, true, new X509Certificate(Properties.Resources.ca)
           , new X509Certificate(Properties.Resources.client2), MqttSslProtocols.TLSv1_2);   
        String clientId= Guid.NewGuid().ToString();
        byte code = client.Connect(clientId);

但是在服务器端我得到一个错误:

OpenSSL 错误:错误:140890C7:SSL 例程:SSL3_GET_CLIENT_CERTIFICATE:对等体未返回证书

【问题讨论】:

  • 页面上有一个使用另一个类的证书的例子——你具体有什么问题
  • 我无法通过这种方式访问​​m2mqtt_ca.der证书---> new X509Certificate(Resources.m2mqtt_ca))
  • @Oliver:等等,什么?这个问题与PDF文件无关。您是否不小心选择了错误的欺骗目标?
  • 你终于找到解决方案了吗?
  • 没有。我无法修复它。认为问题出在 MQTT C# 客户端。因为当我对 Python 客户端使用相同的证书时,它可以工作

标签: c# x509certificate resx ca


【解决方案1】:

如果您将证书嵌入到程序集本身中(通过右键单击该文件并在其属性下选择 Build Action = 'Embedded Resource' 来确保该文件是一个“嵌入式资源”),那么您可以按照以下步骤进行操作:

using (Stream cs = Assembly.GetExecutingAssembly().GetManifestResourceStream("MyProj.MyCert.cer"))
{
    Byte[] raw = new Byte[cs.Length];

    for (Int32 i = 0; i < cs.Length; ++i)
        raw[i] = (Byte)cs.ReadByte();

    X509Certificate2 cert = new X509Certificate2();
    cert.Import(raw);

    // Do whatever you need...
}

【讨论】:

  • 您在“new Bbyte[cs.Length]”上有一个小错误 - 应该是“new Byte[cs.Length]”。感谢您提供代码示例。
猜你喜欢
  • 2021-09-12
  • 1970-01-01
  • 1970-01-01
  • 2021-07-22
  • 2020-06-15
  • 1970-01-01
  • 2021-02-16
  • 2012-09-07
  • 2020-03-02
相关资源
最近更新 更多