Создайте сертификат x509 с помощью инструмента openssl/makecert
Я создаю сертификат x509, используя makecert со следующими параметрами:
makecert -r -pe -n "CN = Client" -ss MyApp
Я хочу использовать этот сертификат для шифрования и дешифрования данных с помощью алгоритма RSA. Я смотрю на сгенерированный сертификат в хранилище сертификатов Windows, и все выглядит нормально (у него есть закрытый ключ, открытый ключ - это ключ RSA с 1024 битами и т. Д.)
Теперь я использую этот код C# для шифрования данных:
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);
}
При выполнении метода Encrypt я получаю CryptographicException с сообщением "Плохой ключ".
Я думаю, что код в порядке. Возможно, я не создаю сертификат должным образом. Любые комментарии? Спасибо
---------------- РЕДАКТИРОВАТЬ --------------
Если кто-то знает, как создать сертификат с помощью OpenSsl, это также правильный ответ для меня.
2 ответа
Чтобы ключ был использован для шифрования, вы должны использовать -sky
-опция По умолчанию "makecert" использует спецификацию ключа AT_SIGNATURE, которая не будет работать с шифрованием / дешифрованием. Вместо этого используйте спецификацию AT_KEYEXCHANGE, введя следующую команду:
makecert -r -pe -n "CN=Client" -ss MyApp -sky Exchange
(Не забудьте удалить предыдущий ключ или использовать другое имя контейнера).
This was another page I stumbled across when I was trying to find examples of makcert usage with x509 certificates and rsa using c#, and unfortunately it only provided part of the solution. Я собрал все эти элементы в записи блога, которая может заинтересовать людей, и ее можно найти здесь: http://nick-howard.blogspot.com/2011/05/makecert-x509-certificates-and-rsa.html