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

本文关键字:加载 公钥 文件 | 更新日期: 2023-09-27 18:13:59

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

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout privateKey.key -out certificate.crt

我为输出创建了一个GIST: https://gist.github.com/anonymous/5592135

    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);
    }

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

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

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

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

https://www.globalsign.com/support/import/apache.php

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

http://msdn.microsoft.com/en-us/library/ms148420.aspx

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