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

У меня есть выданный 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 ]

32 голосов
/ 24 марта 2011

В конце концов мне удалось выяснить, какая процедура работает.Вот шаги для генерации нового сертификата подписи кода 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
8 голосов
/ 01 октября 2018

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

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

3 голосов
/ 02 марта 2012

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

2 голосов
/ 18 сентября 2018

Вы можете создать 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
0 голосов
/ 23 сентября 2015

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

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

...