Как я могу добавить закрытый ключ в X509Certificate2 после того, как я уже добавил открытый ключ?

Мои шаги:

  1. Создать X509Certificate2 с открытым ключом:

    X509Certificate2 clientCertificate = new X509Certificate2("public key certificate blob as byte[]");
    
  2. Как мне загрузить большой двоичный объект закрытого ключа в clientCertificate?


person Megi Ben Nun    schedule 08.12.2011    source источник
comment
Какие у вас капли? Откуда они взялись?   -  person Dmitriy Konovalov    schedule 08.12.2011
comment
Имеет ли это значение? Мой открытый ключ - это строка в формате Base64. Я конвертирую эту строку в байтовый массив. Закрытый ключ - это асимметричный ключ открытого ключа. Закрытый ключ имеет тот же формат, что и открытый ключ (Base64), и я хотел бы добавить его в свой X509Certificate.   -  person Megi Ben Nun    schedule 08.12.2011


Ответы (3)


Похоже, вы не можете импортировать закрытый ключ RSA с помощью только инструментов .NET Framework.

Ознакомьтесь с этой веткой Как читать закрытый ключ PEM RSA из .NET.

person Dmitriy Konovalov    schedule 08.12.2011
comment
Не работает ... Думаю, ключ не в RSACryptoServiceProvider. Мне нужно общее решение этой проблемы. Моя проблема в том, что я работаю с конфигурацией WLAN, когда мой пользователь настраивает профиль беспроводной сети, он дает мне открытый ключ в одном файле и закрытый ключ в другом. - person Megi Ben Nun; 08.12.2011
comment
BTW - Сертификат является сертификатом RSA. но когда я выполняю следующую строку - csp.ImportCspBlob (privateKeyBlob); , у меня исключение ... :( - person Megi Ben Nun; 08.12.2011
comment
Вы можете опубликовать это? И какой формат файла используется в качестве контейнера закрытого ключа? - person Dmitriy Konovalov; 08.12.2011
comment
Я не могу опубликовать закрытый ключ :(. - person Megi Ben Nun; 08.12.2011
comment
О нет! Я имею в виду текст исключения! Вы написали: но когда я выполняю следующую строку - csp.ImportCspBlob (privateKeyBlob); , я получаю исключение ... :(. Вы можете опубликовать подробности исключения? - person Dmitriy Konovalov; 08.12.2011
comment
{System.Security.Cryptography.CryptographicException: недопустимая версия поставщика. в System.Security.Cryptography.CryptographicException.ThrowCryptogaphicException (Int32 hr) в System.Security.Cryptography.Utils._ImportCspBlob (Byte [] keyBlob, SafeProvHandle hProv, CspProviderFlags.flags. CspAlgorithmType keyType, Byte [] keyBlob, Boolean publicOnly, CspParameters & parameters, Boolean randomKeyContainer, SafeProvHandle & safeProvHandle, SafeKeyHandle & safeKeyHandle) .... - person Megi Ben Nun; 08.12.2011

На всякий случай кто-то вроде меня и выше смотрит этот старый пост при поиске того, как сгенерировать X509Certificate2 из pem fil / закрытого ключа:

Фреймворк .Net 5.0 имеет очень упрощенный подход к этому:

var certPem = File.ReadAllText("cert.pem");
var eccPem = File.ReadAllText("ecc.pem");
var cert = X509Certificate2.CreateFromPem(certPem, eccPem);

(источник: https://www.scottbrady91.com/C-Sharp/PEM-Loading-in-dotnet-core-and-dotnet)

person WeekendHacker    schedule 06.04.2021

См. Также: Как импортировать PKCS # 8 RSA privateKey (созданный OpenSSL) на C #

Он включает ссылку на исходный код Mono, который может читать файлы PKCS # 8 / PEM и возвращать из них экземпляр RSA.

person poupou    schedule 08.12.2011