Я создал самозаверяющий сертификат ECDSA, используя openssl.Мне нужно получить информацию о секретном ключе и информацию о сертификате в виде байтов base64.Последнее легко.Первый кажется очень сложным.Я знаю, что не могу понять это правильно, потому что секретный ключ имеет длину 256. Я знаю его длину, потому что я его создал, и я проверил его, используя:
openssl ec -in C:\OpenSSLx64\flir\newcerts\ecd.key.pem -text -noout
Все мои попытки даютразная длина байтов.Вот они:
X509Certificate2 certificate = new X509Certificate2(certificateBytes, password, X509KeyStorageFlags.Exportable | X509KeyStorageFlags.EphemeralKeySet);
if (certificate.GetECDsaPrivateKey() is ECDsaCng ecdKeyWrapper)
{
CngKey key = ecdKeyWrapper.Key;
key.SetProperty(pty);
ECParameters parameters = ecdKeyWrapper.ExportParameters(true);
privateKey = parameters.D;
byte[] otherPKey = key.Export(CngKeyBlobFormat.GenericPrivateBlob);
byte[] otherPKey2 = key.Export(CngKeyBlobFormat.EccPrivateBlob);
byte[] otherPKey3 = key.Export(CngKeyBlobFormat.EccFullPrivateBlob);
byte[] otherPKey4 = key.Export(CngKeyBlobFormat.Pkcs8PrivateBlob);
}
Я знаю, что с RSA и DSA я могу использовать bouncyCastle, но здесь это не сработает:
keyPair = DotNetUtilities.GetKeyPair(dsaKeyWrapper);
Так что, думаю, у меня две проблемы:
- Я не могу правильно извлечь закрытый ключ.
- Я прочитал, что закрытый ключ должен быть определен как D. Очевидно, это не так (размер не подходит).Что такое D в этом контексте?