Есть ли способ получить функциональность командной строки certreq -accept с помощью C #? - PullRequest
1 голос
/ 19 мая 2019

Я создаю приложение Windows Form, которое импортирует сертификаты в локальное хранилище. Я хочу иметь возможность соединить его с существующим закрытым ключом, когда это возможно.

Я знаю, что этовозможно, потому что я могу вручную использовать команду certreq -accept для сертификата, и она просто отлично справляется.

X509Certificate2 certificate = new X509Certificate2(fileName);
X509Store certStore = new X509Store(StoreName.My, StoreLocation.LocalMachine);
certStore.Open(OpenFlags.ReadWrite);
certStore.Add(certificate);
certStore.Close();

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

(Примечание: получение функциональности certutil -repairstore также было бы неплохо)

1 Ответ

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

Поток certreq -accept составляет:

  • Откройте магазин запросов (например, new X509Store("Request", StoreLocation.LocalMachine))
  • Найти самозаверяющий сертификат, который использовал тот же открытый ключ, что и подписанный сертификат (сертификат был создан certreq)
  • Скопируйте закрытый ключ в новый сертификат (например, var withKey = newCert.CopyWithPrivateKey(requestCert.GetRSAPrivateKey());)
  • Добавление сертификата withKey в My store (CurrentUser или LocalMachine, в зависимости от того, какой сертификат совпадает с ключом и самозаверяющим сертификатом)
  • Удалить requestCert из магазина запросов.

Все они разрешимы в C #. Для "того же открытого ключа" проще всего сравнить свойства Oid, EncodedKeyValue и EncodedParameters для newCert.PublicKey и requestCert.PublicKey.

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