Присоединение файлов .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:
- Получите ваш новый сертификат
CodeSign.spc
от GoDaddy. -
Экспортируйте закрытый ключ в формате PEM из устаревшего PFX:
openssl.exe pkcs12 -in CodeSign.pfx -nocerts -out CodeSign.pem
-
Преобразуйте закрытый ключ в формате PEM в формат PVK:
pvk.exe -in CodeSign.pem -topvk -strong -out CodeSign.pvk
-
Объедините PVK и SPC в PFX:
pvk2pfx.exe -pvk CodeSign.pvk -pi <passphrase> -spc CodeSign.spc -pfx CodeSign.pfx -po <passphrase> -f
-
Импортируйте полученный файл PFX в хранилище сертификатов Windows. Не забудьте сделать его экспортируемым.
- Экспортируйте его из хранилища сертификатов в двоичный формат CER как
CodeSign.cer
. - При желании удалите сертификат из хранилища сертификатов 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.
-
Экспортируйте закрытый ключ в формате PEM из устаревшего PFX:
openssl pkcs12 -in CodeSign.pfx -nocerts -out CodeSign.pem
-
Создать PFX
openssl pkcs7 -in CodeSign.spc -inform der -print_certs | openssl pkcs12 -export -inkey CodeSign.pem -out CodeSign.pfx