Как я могу изменить пару ключей в формате XML на формат PEM в C #? - PullRequest
4 голосов
/ 09 августа 2011

Я пытаюсь изменить созданную пару ключей в формате xml на формат PEM. Вот мой код

CspParameters cspParams = new CspParameters();
cspParams.ProviderType = 1;  
cspParams.Flags = CspProviderFlags.UseArchivableKey;
cspParams.KeyNumber = (int)KeyNumber.Exchange;
rsaProvider = new RSACryptoServiceProvider(1024,cspParams);
RSAParameters rsa_params = rsaProvider.ExportParameters(true);
byte[] rsa_export = rsaProvider.ExportCspBlob(true); 

//here I've try to get private key data
string data__ = Convert.ToBase64String(rsa_export);  
FileStream fs = new FileStream(privateKeyFileName, FileMode.CreateNew);

string type = "RSA PRIVATE KEY";
string header = String.Format("-----BEGIN {0}-----\n", type);
string footer = String.Format("\n-----END {0}-----", type);

data__  = header+data__+footer;
byte[] d_ = Encoding.Default.GetBytes(data__); 

//write to file        
fs.Write(d_, 0, d_.Length);
fs.Close();

После его запуска у меня есть закрытый ключ, но когда я тестирую его с помощью ключа, создаю сертификат с помощью команды:

openssl req -new -x509 -key privatekey.pvk -config       
"C:\AppServ\php5\extras\openssl\openssl.cnf" -out myCert.cer -days 365

произошла ошибка

unable to load Private Key
3004:error:0906D064:PEM routines:PEM_read_bio:bad base64 decode:.\crypto\pem\pem_lib.c:756:

Ответы [ 2 ]

0 голосов
/ 09 апреля 2015

Помните, что openssl требователен к форматированию сертификата PEM.

  1. Файл должен содержать: -----BEGIN CERTIFICATE----- на отдельной строке (т.е. она должна заканчиваться символом новой строки).
  2. Каждая строка "тарабарщины" должна быть шириной 64 символа.
  3. Файл должен заканчиваться на: -----END CERTIFICATE----- а также завершается новой строкой.
  4. Не сохраняйте текст сертификата в Word. Должно быть в ASCII.
  5. Не смешивайте окончания строк в стиле DOS и UNIX.

Таким образом, в вашем случае, похоже, вы не заключаете строку в "gibberish" в 64 символа, и в вашем теге END отсутствует символ новой строки.

Для тех, кто не пишет свои собственные пары ключей, вот несколько шагов, которые вы можете предпринять, чтобы нормализовать файлы сертификатов в Linux:

  1. Запустите его через dos2unix: # dos2unix cert.pem
  2. Запустите его через сгиб: # fold -w 64 cert.pem

Если вы работаете в Windows, попробуйте загрузить Cygwin , и вы сможете получить эти инструменты преобразования.

0 голосов
/ 17 августа 2012

Посмотрите на это сообщение в блоге: http://pstaev.blogspot.com.es/2010/08/convert-rsa-public-key-from-xml-to-pem.html

...