3

我无法加载我的私钥。我使用以下命令创建了一个证书:

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 数据并验证私钥和公钥是否匹配。

4

1 回答 1

1

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

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

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

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

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

于 2013-05-16T14:45:40.563 回答