C# 在C中从文件加载公钥#

C# 在C中从文件加载公钥#,c#,C#,我在加载私钥时遇到困难。 我使用以下命令创建了一个证书: openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout privateKey.key -out certificate.crt 我创建了输出的要点: 我的证书加载正常,但无法获取要加载的私钥。我得到“找不到请求的对象” 我更愿意从文件中加载私钥和证书,而不是使用存储,这可能吗?我是否错误地生成了证书和私钥?最后,我希望在xml文档中包含公钥,接收方将解析xml数据并验证私钥

我在加载私钥时遇到困难。 我使用以下命令创建了一个证书:

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout privateKey.key -out certificate.crt
我创建了输出的要点:

我的证书加载正常,但无法获取要加载的私钥。我得到“找不到请求的对象”


我更愿意从文件中加载私钥和证书,而不是使用存储,这可能吗?我是否错误地生成了证书和私钥?最后,我希望在xml文档中包含公钥,接收方将解析xml数据并验证私钥和公钥是否匹配。

如果您不想使用证书存储,我建议您将CRT和密钥合并到一个PFX文件中。这里有一个链接将讨论如何做到这一点(或者只是谷歌“openssl创建pfx”)

在您的代码中,请记住X509Certificate2对象(例如您的cert对象)将同时包含公钥和私钥——因此您不需要为私钥使用单独的对象。创建PFX文件时,系统将提示您输入密码。此密码用于加密PFX的私钥部分。当您创建X509Certificate2对象时,将为其提供PFX文件的位置以及密码。。以下是构造函数:


我不确定你的最终目标是什么。如果您希望客户端确保XML文件确实来自服务器并且没有被更改,那么应该考虑使用数字签名。简而言之,发送方使用其私钥对XML文件的哈希进行签名,接收方使用发送方的公钥进行验证。

请注意:如果有人需要示例,我在GitHub上创建了一个repo:。祝你好运
    static void Main(string[] args)
    {
        string location = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
        string certLocation = location + "\\assets\\certificate.crt";
        string privateKeyLocation = location + "\\assets\\privateKey.key";
        string xmlDocLocation = location + "\\assets\\sample.xml";

        XmlDocument Doc = new XmlDocument();
        Doc.Load(xmlDocLocation);

        // read up the certificate
        X509Certificate2 cert = new X509Certificate2(certLocation);
        X509Certificate2 privateKey = new X509Certificate2(privateKeyLocation);

    }