C# 在C代码中包含CA证书

C# 在C代码中包含CA证书,c#,x509certificate,resx,ca,C#,X509certificate,Resx,Ca,我想在资源文件(Resources.resx)中包含CA证书,一旦读取为字节流,就会将其提供给X509Certificate构造函数类。CA证书采用.der格式。我已将.der文件添加到项目的Resources文件夹中。如何在另一个类中访问它并将其传递给X509Certificate构造函数 我遵循了这个链接底部给出的c#代码[ 更新:这是我在客户端的方式 client = new MqttClient(ddlServerIP.Text, MqttSettings.MQTT_BROKER

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

我遵循了这个链接底部给出的c#代码[

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

    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\u获取\u客户端\u证书:对等方未返回证书


如果将证书嵌入Assembly本身(通过右键单击该文件并在其属性下选择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...
}
使用(Stream cs=Assembly.getExecutionGassembly().GetManifestResourceStream(“MyProj.MyCert.cer”))
{
字节[]原始=新字节[cs.Length];
对于(Int32 i=0;i
如果您将证书嵌入Assembly本身(通过右键单击该文件并在其属性下选择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...
}
使用(Stream cs=Assembly.getExecutionGassembly().GetManifestResourceStream(“MyProj.MyCert.cer”))
{
字节[]原始=新字节[cs.Length];
对于(Int32 i=0;i
页面上有一个使用来自另一个类的证书的示例-您具体遇到了什么问题?我无法以这种方式访问m2mqtt_ca.der证书-->新的X509Certificate(Resources.m2mqtt_ca))@奥利弗:等等,什么?这个问题与PDF文件无关。你是否意外地选择了错误的复制目标?你最终找到了解决方案吗?没有。我无法解决它。我认为问题在于MQTT C#客户端。因为当我在Python客户端使用相同的证书时,它起作用了。下面是使用另一个客户端的证书的示例页面上的er类-您具体遇到了什么问题我无法以这种方式访问m2mqtt_ca.der证书-->新的X509Certificate(参考资料m2mqtt_ca))@奥利弗:等等,什么?这个问题与PDF文件无关。你是不是无意中选择了错误的复制目标?你最终找到了解决方案了吗?没有。我无法解决它。我认为问题在于MQTT C#客户端。因为当我在Python客户端上使用相同的证书时,它起到了作用。你在“new Bbyte[cs.Length]上有轻微的输入错误“-应该是“new Byte[cs.Length]”。感谢您提供的代码示例。您在“new Bbyte[cs.Length]”上有一点输入错误-应该是“new Byte[cs.Length]”。感谢您提供的代码示例。