Импорт сертификата .cer из cmd

#certificate #certutil #certreq

#сертификат #certutil #certreq

Вопрос:

При импорте .cer сертификата с помощью certutil утилиты не удается сопоставить его с его закрытым ключом, хотя запрос на подпись сертификата был создан на том же компьютере.

Я использую certreq для генерации .csr файла, используемого для получения этого сертификата, и в .inf у меня есть Exportable = True флаг. Выполнение импорта вручную с помощью мастера mmc работает, но не при выполнении следующей команды из консоли администратора.

certutil -addstore -f "My" "website_aps_production.cer"

Более того, после импорта сертификата с помощью certutil, заглянув в mmc, я заметил, что понятное имя сбрасывается (отображается как None).

Я уже пробовал механизм repairstore после импорта сертификата из cmd, но это не помогло.

certutil -repairstore my >cert_thumbprint<

Обновить

Я попытался импортировать сертификат с помощью certreq -accept -machine website_aps_production.cer , но это выдает ошибку: не удалось создать цепочку сертификатов для доверенного корневого центра. 0x800b010a и в консоли появляется дополнительное предупреждение Сертификат, выданный центром сертификации, не может быть установлен. Обратитесь к своему администратору.

Ответ №1:

В качестве обходного пути мне удалось автоматизировать процесс импорта сертификата с помощью PowerShell.

 Set-Location -Path cert:LocalMachineMy

Import-Certificate -Filepath "C:website_aps_production.cer"
  

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

Однако более удобным решением является создание всего с использованием OpenSSL и вообще отказ от использования хранилища сертификатов. Таким образом, privatekey экспортируется независимо от сертификата.

 openssl req -nodes -newkey rsa:2048 -keyout pvkey.key -out csr.csr -subj "/C=test/ST=test/L=test/O=test/OU=test/CN=test" -config "C:openssl.cnf"