Присоединение файлов .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.

Ответы

Ответ 1

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

Ответ 2

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

Ответ 3

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

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

Ответ 4

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

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

Ответ 5

Вы можете создавать 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