2010-11-04 16 views
7

Mam problem z odszyfrowaniem certyfikatu X.509 usg.Odszyfruj z certyfikatem PrivateKey X.509

wygenerować mój certyfikat z MakeCert z tej opcji:

makecert -r -pe -n "CN=MyCertificate" -ss CA -sr CurrentUser -a sha1 -sky signature -cy authority -sv CA.pvk CA.cer 

A PrivateKey była "mojehasło".

Mój problem polega na tym, że chcę odszyfrować wiadomość zaszyfrowaną przy użyciu poprzedniego certyfikatu w języku C#.

Znalazłem tę klasę http://blog.shutupandcode.net/?p=660, ale w metodzie X509Decrypt, zawsze PrivateKey ma wartość NULL.

 
public static byte[] X509Decrypt(byte[] data, string certificateFile, string password) 
{ 
    // load the certificate and decrypt the specified data 
    using (var ss = new System.Security.SecureString()) 
    { 
     foreach (var keyChar in password.ToCharArray()) 
      ss.AppendChar(keyChar); 

     // load the password protected certificate file 
     X509Certificate2 cert = new X509Certificate2(certificateFile, ss); 

     using (RSACryptoServiceProvider rsa = (RSACryptoServiceProvider)cert.PrivateKey) 
     { 
      return rsa.Decrypt(data, true); 
     }  
    } 
} 

Próbowałem przechodzącą plik certyfikatu (cer)

 
X509DecryptString(token, @"c:\CA.cer", "mypassword"); 

i przechodzącej plik PVK (.pvk)

 
X509DecryptString(token, @"c:\CA.pvk", "mypassword"); 

Ale zawsze dobrze mieć, że nieruchomość PrivateKey jest null.

Czy ktoś może mi pomóc w odszyfrowaniu wiadomości przy użyciu pliku PVK?

Dzięki,

Jose

Odpowiedz

12

samo świadectwo zawiera tylko klucz publiczny (+ niektóre dane), ale nie klucz prywatny. (Jest bardzo mało prawdopodobne, aby klucz prywatny RSA był "mypassword" .Hasło, które chroni twój klucz prywatny może być "mypassword", ale sam klucz prywatny (dokładniej prywatny wykładnik, w RSA) będzie raczej długim numerem.)

W rezultacie (ponieważ CA.cer zawiera tylko certyfikat), X509DecryptString(token, @"c:\CA.cer", "mypassword") prawie na pewno nie zadziała.

X509DecryptString(token, @"c:\CA.pvk", "mypassword"); może działać w zasadzie, ale tworzony jest z niego obiekt X509Certificate2 i nadal potrzebuje certyfikatu i klucza prywatnego. Powinieneś być w stanie załadować to z kontenera PKCS # 12 (.p12/.pfx).

Aby utworzyć opakowanie, można użyć pvk2pfx:

pvk2pfx -spc CA.cer -pvk CA.pvk -pfx CA.pfx 

(Jeśli nie określisz -pfx CA.pfx, będzie uruchomić interaktywny interfejs, w którym to przypadku należy zaznaczyć pole wyboru, aby wyeksportować prywatny klucz.)

Następnie spróbuj odszyfrować za pomocą tego pliku pfx/p12.

+0

Myliłem się. "Mypassword" nie był kluczem prywatnym. Dzięki za komentarz był pomocny. Dzięki nowemu plikowi pfx mogę odszyfrować wiadomość. – jomarmen

0

Myślę, że powinieneś używać "-sky exchange" do wygenerowania pary kluczy publicznych/prywatnych.

Powiązane problemy