Как импортировать закрытый ключ из X509Certificate2 в CngKey в NET 4.5.1 - PullRequest
0 голосов
/ 16 января 2019

В используемой мной версии .NET (4.5.1) нет метода GetCngPrivateKey () в X509Certificate2.Ничего из того, что я нашел, не работает.

Используемая мной версия .NET, к сожалению, не подлежит обсуждению.

Я пытаюсь снять что-то вроде этого:

X509Certificate2 cert = new X509Certificate2(@"alice.p12", "password", X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.Exportable);
CngKey ck = CngKey.Import(cert.PrivateKey) // Fake line - not possible this way
using (var alice = new ECDiffieHellmanCng(ck))
{
    // ...
}

Опять же, для меня нет доступных методов, таких как GetCngPrivateKey (), HasCngKey (), GetRSAPrivateKey () и т. Д.

* ОБНОВЛЕНИЕ * Все эти попытки импорта не удаютсяза исключением:

RSACryptoServiceProvider rsa = cert.PrivateKey as RSACryptoServiceProvider;
var cspBlob = rsa.ExportCspBlob(true);
CngKey a = CngKey.Import(cspBlob, CngKeyBlobFormat.EccPrivateBlob);
CngKey a = CngKey.Import(cspBlob, CngKeyBlobFormat.GenericPrivateBlob);
cspBlob = rsa.ExportCspBlob(false);
CngKey a = CngKey.Import(cspBlob, CngKeyBlobFormat.EccPrivateBlob);
CngKey a = CngKey.Import(cspBlob, CngKeyBlobFormat.GenericPrivateBlob);
...