Объединение выпущенных GoDaddy файлов.spc и.key в полный сертификат.pfx / .cer

У меня есть сертификат подписи кода, выданный GoDaddy в .spc файл. Кроме того, у меня есть закрытый ключ в .key файл. Подписание кода было выпущено около 13 месяцев назад, затем истек срок его действия и было возобновлено с помощью GoDaddy. Во время процесса обновления не был запрошен секретный ключ и только новый .spc файл был проблем.

Теперь я сталкиваюсь с проблемой объединения исходного файла закрытого ключа с сертификатом проблем для формирования .pfx (или же .cer?) файл подходит для установки в хранилище сертификатов Windows.

Команда, которую я пытаюсь это:

openssl.exe pkcs12 -inkey my.key -in my.spc -out my.pfx -export

Тем не менее, я получаю сообщение об ошибке "Нет сертификата соответствует личному ключу".

Я следовал за этим ответом на SO, чтобы проверить .key Файл является действительным закрытым ключом. Тем не менее, когда я пытаюсь проверить, что .spc действительный сертификат, я просто получаю

unable to load certificate 
5436:error:0906D06C:PEM routines:PEM_read_bio:no start line:.\crypto\pem\pem_lib.c:650:Expecting: TRUSTED CERTIFICATE

Какой правильный способ производства .pfx файл из моих входов? Я использую OpenSSL 0.9.8k.

5 ответов

Решение

В конце концов мне удалось выяснить процедуру, которая работает. Вот шаги для генерации нового сертификата подписи кода PFX и CER из файлов SPC и KEY:

  1. Получить свой новый CodeSign.spc сертификат от GoDaddy.
  2. Экспортируйте закрытый ключ в формате PEM из устаревшего PFX:

    openssl.exe pkcs12 -in CodeSign.pfx -nocerts -out CodeSign.pem
    
  3. Преобразуйте закрытый ключ в формате PEM в формат PVK:

    pvk.exe -in CodeSign.pem -topvk -strong -out CodeSign.pvk
    
  4. Объедините PVK и SPC в PFX:

    pvk2pfx.exe -pvk CodeSign.pvk -pi <passphrase> -spc CodeSign.spc -pfx CodeSign.pfx -po <passphrase> -f
    
  5. Импортируйте полученный файл PFX в хранилище сертификатов Windows. Не забудьте сделать его экспортируемым.

  6. Экспортируйте его из хранилища сертификатов в двоичный формат CER как CodeSign.cer,
  7. При желании удалите сертификат из хранилища сертификатов Windows.

Если вы периодически обновляете свой сертификат, вы можете сохранить файл PVK и пропустить шаги (2) и (3).

ОБНОВЛЕНИЕ: Если у вас есть сертификат в CRT вместо формата SPC, сделайте следующее, чтобы преобразовать его в SPC:

openssl crl2pkcs7 -nocrl -certfile CodeSign.crt -outform DER -out CodeSign.spc

Источники:

Инструменты, которые вам понадобятся:

  • OpenSSL
  • pvk.exe - см. Ссылку для скачивания внизу этой страницы
  • pvk2pfx.exe - часть Microsoft SDK, устанавливается вместе с Visual Studio 2010

У меня была похожая проблема, и я потратил как минимум несколько часов на поиски решения. GoDaddy предоставил мне файлы.spc и.pem, и я не смог создать файл.pfx, если он использовал OpenSSL. Наконец, я импортировал файл.spc на свой локальный компьютер, используя MMC. После того, как сертификат был импортирован на мою локальную машину, я заметил, что он принес цепной файл GoDaddy вместе с самим файлом сертификата Code Sign. MMC View

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

Вы можете создавать PFX только с openssl.

  1. Экспортируйте закрытый ключ в формате PEM из устаревшего PFX:

    openssl pkcs12 -in CodeSign.pfx -nocerts -out CodeSign.pem
  2. Создать PFX

    openssl pkcs7 -in CodeSign.spc -inform der -print_certs | openssl pkcs12 -export -inkey CodeSign.pem -out CodeSign.pfx

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

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

Получить закрытый ключ:

openssl pkcs12 -in certs-and-key.p12 -out privateKey.key

Получить сертификат:

Осторожно: это может дать вам сертификат CA

openssl pkcs12 -in certs-and-key.p12 -out certificate.crt -nokeys

Лучше: используйте эту команду для печати только сертификата клиента

openssl pkcs12 -in MacCossLabUW.p12 -clcerts

Затем скопируйте вывод между:

-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----

Сохраните его в файл с именем certificate.crt

Теперь убедитесь, что закрытый ключ и сертификат соответствуют командам:

openssl rsa -noout -modulus -in privateKey.key | openssl md5
openssl x509 -noout -modulus -in certificate.crt | openssl md5

Затем создайте новый CSR:

openssl x509 -x509toreq -in certificate.crt -out CSR.csr -signkey privateKey.key

Используйте CSR для повторного ввода сертификата.

Загрузите файл сертификата публикации программного обеспечения GoDaddy (.spc).

Убедитесь, что сгенерированный сертификат соответствует закрытому ключу запроса:

openssl pkcs7 -inform DER -in certificate.spc -print_certs

Затем скопируйте выходные данные для вашего сертификата (Примечание: выходные данные также будут содержать сертификаты CA):

-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----

Сохранить в файл с именем certificate-new.crt

И запустите команду:

openssl x509 -noout -modulus -in certificate-new.crt | openssl md5

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

Чтобы завершить процесс, выполните шаги, описанные в ответе с помощью pvk2pfx.

Я также нашел схематическое представление в этом посте весьма полезным:

PVK2PFX Ошибка 0x80070490 - Не удается найти сертификаты, которые соответствуют ключу

Для тех, кто все еще ищет ответ о том, как это сделать, я просто потратил день на выяснение этого, и мне пришлось сделать несколько вещей, перечисленных в этом посте. Если вы используете git-bash в Windows, мне пришлось добавить winptyдо начала всех вызовов с использованием openssl, иначе он застрял бы в пустоте. Псевдоэтапы были следующими:

  1. Создайте закрытый ключ и CSR с помощью openssl
openssl req -newkey rsa:2048 -keyout private.key -out my.csr
  1. Сгенерируйте PVK, используя закрытый ключ с openssl
openssl rsa -in private.key -outform PVK -pvk-strong -out codesign.pvk
  1. Используйте CSR при создании сертификата кодового знака на Godaddy
  2. Загрузите Zip из Godaddy и извлеките файл SPC (как указано OP)
  3. Используйте pvk2pfx, чтобы объединить PVK и файл SPC в сертификат подписи кода. Он был включен в тот же SDK (и каталог), что и сам signtool:
pvk2pfx.exe -pvk codesign.pvk -spc SPC_FILEPATH_HERE -pfx codesign.pfx -pi PVK_PASSWORD -po PFX_PASSWORD

Если вы сгенерировали запрос сертификата из IIS (я сделал это на IIS на Windows 2012 Server), выполните следующие действия на сервере / ПК, на котором вы сгенерировали запрос - Откройте IIS - Нажмите на узел верхнего уровня (узел сервера) - Откройте сервер Настройки сертификатов. Нажмите "Завершить запрос сертификата" в разделе "Действия справа". Импортируйте файл spc на сервер.

Отсюда вы можете экспортировать в файл PFX

Другие вопросы по тегам