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.
Podczas tworzenia certyfikatu, jaki jest wybrany bit klucza prywatnego/publicznego? Prawdopodobnie musisz podać dłuższe klucze 4048 bitów? – berkay
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. –
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