2010-06-11 5 views
1

Я недавно обнаружил OpenSSL.NET, и это довольно милая маленькая обертка.OpenSSL.NET не может экспортировать закрытый ключ с нулевым шифром

Я пытаюсь выполнить следующий код:.

public static void DoSomething(byte[] buf) 
    { 
     OpenSSL.Core.BIO input = new OpenSSL.Core.BIO(buf); 
     OpenSSL.X509.X509Certificate b = OpenSSL.X509.X509Certificate.FromPKCS12(input, "passphrase"); 
     OpenSSL.Core.BIO outs = OpenSSL.Core.BIO.MemoryBuffer(false); 
     b.PrivateKey.WritePrivateKey(outs, OpenSSL.Crypto.Cipher.Null, "passphrase"); 
     outs.SetClose(OpenSSL.Core.BIO.CloseOption.Close); 
     Console.WriteLine(outs.ReadString()); 
    } 

Проблема приходит в «b.PrivateKey.WritePrivateKey (..» линия Я хочу написать секретный ключ без какого-либо шифрования По. в спецификации, если я использую Null шифра типа это должно сделать трюк, но он никогда не работает, независимо от CERT я использую в BUF ​​

Вот исключение:.

ошибка: 0D0A706C: ASN1 процедуры кодирования: PKCS5_pbe2_set: шифр не имеет идентификатора объекта error: 2307D00D: PKCS12 подпрограммы: PKCS8_encrypt: ASN1 lib

Я знаю, что эта часть работает нормально, потому что, если я укажу какой-либо другой тип шифрования, он обязательно будет экспортировать закрытый ключ. У кого-нибудь есть предложения?

ответ

1

Почему вы не можете использовать:

OpenSSL.Core.BIO outs = OpenSSL.Core.BIO.MemoryBuffer(false); 
    outs.Write(b.PrivateKey.ToString()); 
    outs.SetClose(OpenSSL.Core.BIO.CloseOption.Close); 
    Console.WriteLine(outs.ReadString()); 

таким образом, вы можете написать незашифрованные ключи.

Я вижу, изменить что:

OpenSSL.Core.BIO outs = OpenSSL.Core.BIO.MemoryBuffer(false); 
    outs.Write(b.PrivateKey.GetRSA().PrivateKeyAsPEM); 
    outs.SetClose(OpenSSL.Core.BIO.CloseOption.Close); 
    Console.WriteLine(outs.ReadString()); 
+0

PrivateKey.ToString() создает ASCII (читаемый человека) представление ключа. Правда все данные присутствуют, но я ищу, чтобы получить данные RAW/Unencrypted двоичных частных ключей. – Nick

+0

Ваш второй комментарий работает! Указывает на ВАС! – Nick

0

Я не использовать это, но, возможно, это может помочь:

If OpenSSL is being compiled for a development system in which SSL will be debugged at the protocol level, omitting the command -DSSL_FORBID_ENULLis acceptable. -DSSL_FORBID_ENULL causes OpenSSL to omit null ciphers in the SSL cipher suite. Null ciphers permit cleartext (unencrypted information) to traverse the wire. Null ciphers provide no confidentiality and aren't encouraged for use on production systems.