Объединение файлов .spc и .key, выпущенных GoDaddy, в полный сертификат .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.


person Ondrej Tucny    schedule 13.01.2011    source источник
comment
Вы используете IE8? Сценарий подписи кода Godaddy не работает с IE8. использовать firefox   -  person Nick    schedule 13.01.2011
comment
Нет. Я использую Chrome 9 и FireFox 9. Тем не менее, я не вижу связи между IE8 и моей проблемой.   -  person Ondrej Tucny    schedule 13.01.2011


Ответы (6)


В конце концов мне удалось придумать процедуру, которая работает. Вот шаги для создания нового сертификата подписи кода 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
person Ondrej Tucny    schedule 24.03.2011
comment
Этот ответ не включает информацию о том, как работать с файлом .key, как указано в исходном вопросе. В приведенном выше процессе вам не нужно было использовать файл .key? - person Ryan Griffith; 10.01.2014
comment
Нет, как упоминалось в моем ответе, мне пришлось использовать файл pfx для экспорта закрытого ключа в формат PEM. С тех пор я не использовал key файл; всегда выполняйте вышеуказанные шаги каждый год при обновлении нашего сертификата подписи кода. - person Ondrej Tucny; 10.01.2014
comment
Понятно - это предполагает, что для начала существует исходный pfx (с истекшим сроком действия), верно? В моем случае у меня нет PFX - это то, к чему я пытаюсь добраться. Я в основном взял ваши инструкции на pvk.exe -in CodeSign.pem -topvk -strong -out CodeSign.pvk, но в моем случае CodeSign.pem был CodeSign.key (который, насколько я понимаю, представляет собой закрытый ключ в формате PEM, который также можно легко назвать CodeSign.pem). Спасибо за вашу помощь! - person Ryan Griffith; 10.01.2014
comment
Да, у меня был оригинальный (просроченный) PFX. У меня есть практика хранить все такие важные файлы в репозитории Subversion, чтобы мы не потеряли их (включая историю). Все зашифрованные закрытые ключи также обеспечивают безопасность. С другой стороны, мы избегаем импорта полных публичных / частных пар в хранилище сертификатов Windows с экспортируемыми закрытыми ключами, поэтому очень важно хранить PFX отдельно. - person Ondrej Tucny; 10.01.2014
comment
У меня не получилось, получаю следующее: ERROR: Cannot find certificates that match the key. (Error Code = 0x80070490). - person BrainSlugs83; 11.07.2014
comment
Смог выполнить инструкции с новым файлом ключа (используя метод @Ryan для замены файла .key на .pem), но сертификат на самом деле не работает для создания сборок строгого имени, в котором говорится, что не удалось извлечь открытый ключ из пары ключей - набор ключей не существует (старый файл .pfx работал нормально). - person BrainSlugs83; 11.07.2014
comment
Вы указали правильное имя набора ключей? Вы запускали cmd от имени администратора? - person Ondrej Tucny; 11.07.2014
comment
Ответ Ондрея Тукни сработал для меня с одной модификацией: мне нужно было добавить параметр -nodes на первый шаг (openssl.exe). Чтобы преобразовать в P12, используйте Firefox: Инструменты, Параметры, Дополнительно, Сертификаты, Просмотр сертификатов, Импорт PFX, Резервное копирование в P12. - person Pierre; 11.06.2015
comment
Фантастика! Pvk.exe больше не доступен на сайте drh-consultancy, но вы можете найти его зеркало по адресу tech-pro.net/export-to-pvk-spc.html - person Stefan Wanitzek; 23.01.2019
comment
@StefanWanitzek Спасибо, что указали на это. Обновился в ответе. - person Ondrej Tucny; 25.01.2019
comment
Зеркало pvk.exe было заблокировано на работе как содержащее вредоносное ПО. Я смог использовать ответ Никиты Краснова и избежать необходимости в каком-либо дополнительном программном обеспечении, кроме OpenSSL. - person Robert Kaucher; 29.01.2019

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

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

person milan21984    schedule 01.10.2018
comment
СПАСИБО! Это решило и мою проблему после нескольких часов поиска. Ты спасатель. - person Christopher Nuccio; 15.01.2019

Вы можете создать 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
person Nikita Krasnov    schedule 18.09.2018
comment
Я продолжал пробовать эти шаги через командную строку WSL, и это не сработало (второй шаг не удался, жалобы на закрытый ключ). В конце концов я понял, что вы ДОЛЖНЫ предоставить парольную фразу PEM для первого шага. Это дополнение к любому паролю импорта, который у вас мог быть в исходном файле PFX. - person Paul Mrozowski; 21.01.2020

Текущий ответ оказался для меня чрезвычайно полезным на последних этапах перехода от файла сертификата с истекшим сроком действия (.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 - не удается найти сертификаты, соответствующие ключу < / а>

person brendanx    schedule 02.03.2012

Для тех, кто все еще ищет ответ о том, как это сделать, я просто потратил день на выяснение этого, и мне пришлось сделать несколько вещей, перечисленных в этом посте. Если вы используете 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
person Gloppy    schedule 10.11.2020

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

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

person user5366156    schedule 23.09.2015
comment
Речь идет о сертификате подписи кода. Ваш ответ, к сожалению, неуместен. - person Ondrej Tucny; 23.09.2015