2013-05-16 2 views
3

У меня возникли трудности с загрузкой личного ключа. Я создал сертификат, используя следующую команду:Загрузка открытого ключа из файла в C#

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 и проверять соответствие закрытых и открытых ключей.

ответ

1

Если вы хотите избежать использования хранилища сертификатов, я бы рекомендовал вам объединить CRT и ключ в файл PFX. Вот одна ссылка, которая обсудит, как это сделать (или просто google «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 с его закрытым ключом, а получатель проверяет его с помощью открытого ключа отправителя.

+0

Спасибо, я смог заставить его работать! – TheWebGuy

+0

Обратите внимание: если кому-то нужен пример, я создал репо на GitHub: https://github.com/tekguy/SignXMLExample. Удачи! – TheWebGuy

Смежные вопросы