2010-06-09 12 views
5

Tworzę Certyfikat X509 używając MakeCert z następującymi parametrami:Tworzenie certyfikatu X509 z narzędziem OpenSSL/MakeCert

MakeCert -r -pe -n "CN = Client" -p MojaApl

Chcę użyć tego certyfikatu do szyfrowania i odszyfrowywania danych za pomocą algorytmu RSA. Szukam wygenerowanego certyfikatu w magazynie certyfikatów systemu Windows i wszystko wydaje się ok (ma klucz prywatny, klucz publiczny to klucz RSA z 1024 bitami itd.)

Teraz używam tego kodu C# do szyfrowania danych:

X509Store store = new X509Store("MyApp", StoreLocation.CurrentUser); 
store.Open(OpenFlags.ReadOnly); 
X509Certificate2Collection certs = store.Certificates.Find(X509FindType.FindBySubjectName, "Client", false); 
X509Certificate2 _x509 = certs[0]; 

using (RSACryptoServiceProvider rsa = (RSACryptoServiceProvider)_x509.PublicKey.Key) 
{ 
    byte[] dataToEncrypt = Encoding.UTF8.GetBytes("hello"); 
    _encryptedData = rsa.Encrypt(dataToEncrypt, true); 
} 

Po uruchomieniu metody szyfrowania otrzymuję wyjątek CryptographicException z komunikatem "Zły klucz".

Myślę, że kod jest w porządku. Prawdopodobnie nie tworzę poprawnie certyfikatu. Jakieś komentarze? Dzięki

---------------- EDYCJA --------------
Jeśli ktoś wie, jak utworzyć certyfikat za pomocą OpenSsl, to także ważna odpowiedź dla mnie.

+0

Podczas tworzenia certyfikatu, jaki jest wybrany bit klucza prywatnego/publicznego? Prawdopodobnie musisz podać dłuższe klucze 4048 bitów? – berkay

+0

Nie wiem, o jakiej opcji mówisz. Po prostu użyłem opcji pokazanych powyżej w poleceniu makecert. Jeśli mówisz o sobie nawzajem, przyjmuj wartość domyślną. Ale mój klucz publiczny ma 1024 bity. –

+0

okey, więc nigdy nie używam makecert, wystarczy wyszukać, aby utworzyć 4048 bitów. 1024 bity są zepsute, z tego powodu można uzyskać błąd. – berkay

Odpowiedz

3

Aby umożliwić użycie klucza do szyfrowania, należy użyć numeru -sky-option. Domyślnie amakecert` używa specyfikacji klucza AT_SIGNATURE, która nie będzie działać z szyfrowaniem/odszyfrowywaniem. Zamiast mieć go użyć specyfikacji AT_KEYEXCHANGE wydając następującą komendę:

makecert -r -pe -n "CN=Client" -ss MyApp -sky Exchange 

(Pamiętaj, aby usunąć poprzedni klucz lub użyć innego kontenera-name).

+0

Przeczytałem algorytm RSA, który może być używany zarówno do podpisywania, jak i szyfrowania wiadomości. Nie można mieć w jednym certyfikacie kluczy szyfrujących i szyfrujących? –

+1

AT_KEYEXCHANGE może być używany zarówno do podpisywania, jak i szyfrowania, ale nie na odwrót. –

Powiązane problemy