Извлечь закрытый ключ из сертификата ECDSa - PullRequest
0 голосов
/ 14 марта 2019

Я создал самозаверяющий сертификат 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);

Так что, думаю, у меня две проблемы:

  1. Я не могу правильно извлечь закрытый ключ.
  2. Я прочитал, что закрытый ключ должен быть определен как D. Очевидно, это не так (размер не подходит).Что такое D в этом контексте?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...