Как связать открытый ключ ECDSA с его закрытым ключом - PullRequest
0 голосов
/ 20 мая 2019

Я создал CSR ECDSA с использованием certreq, теперь я хочу импортировать сертификат в локальное хранилище и связать его с закрытым ключом. Я могу импортировать открытые ключи RSA и связать их без проблем, а также импортировать сертификаты ECDSA, но у них нет личного ключа ...

Я рассмотрел все виды методов и свойств в каждом классе, который я мог видеть - ни один из них, кажется, не имеет простого способа "установить" закрытый ключ, когда он ECDsa - Один многообещающий метод - это "ECDsaCertificateExtensions.CopyWithPrivateKey "метод - но это выглядит как отсутствие определения, и я бы не стал заставлять людей использовать это для загрузки других версий .net и т. д. (я использую Windows 10)

certificate.PrivateKey = foundCSR.PrivateKey;

Отлично работает для установки закрытых ключей RSA, когда я нашел CSR в системе. Попытка, если это ключ ECDsa, выдает ошибку «Поддерживаются только асимметричные ключи, которые реализуют алгоритм ICspAsymmetricAlgorithm»

Попытка вставить этот ключ в большой двоичный объект RSACryptoProvider не годится, потому что он не основан на RSA (я предполагаю) - метод GetECDsaPrivateKey получает только этот ключ - существует ли эквивалент SetECDsaPrivateKey?

(я также был бы открыт для использования других способов получить функциональность certreq -accept - это в основном цель, импортировать сертификат, связать его с закрытым ключом, удалить csr)

1 Ответ

0 голосов
/ 20 мая 2019

CopyWithPrivateKey - единственный встроенный способ. Он поставляется с .NET Framework 4.7.2, который встроен в Windows 10 1803 +.

Основной альтернативой для сохранения низких зависимостей является P / Invoke CertGetCertificateContextProperty CertSetCertificateContextProperty ) для копирования свойства CERT_KEY_PROV_INFO_PROP_ID. Это менее безопасно, чем использование CopyWithPrivateKey, потому что он не проверяет, совпадают ли ключи или что целевой сертификат уже не имеет свойства, которое перезаписывается. Это также не работает для эфемерных ключей.

Второй альтернативой является копирование метода из .NET Core и его предварительных условий .

Лично я бы просто взял 4.7.2 в качестве зависимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...