преобразовать ключ .p7b в файл .pfx

10

У меня есть сертификат SSL в формате .p7b, который мне нужно преобразовать в .pfx. Если я попробую это через управление сертификатами Windows, опция для эксперта как .pfx отключена.

Пытаясь с openssl, я нашел следующие две команды для выполнения преобразования:

openssl pkcs7 -print_certs -in certificate.p7b -out certificate.cer
openssl pkcs12 -export -in certificate.cer -inkey privateKey.key -out certificate.pfx -certfile CACert.cer

но я не уверен, какой ключ использовать для второй команды или на какой сертификат ссылается CACert.cer.

Как я могу преобразовать этот ключ в формат .pfx?

DrStalker
источник

Ответы:

20

PKCS # 7 не включает частную (ключевую) часть пары сертификат / секретный ключ, он обычно используется для распространения сертификата (например, в качестве ответа на запрос сертификата PKCS # 10, как средство для распространения сертификатов S / MIME используется для шифрования сообщений или проверки подписанных сообщений и т. д.). Важно помнить, что это только для сертификатов, которые по определению являются общедоступными.

PKCS # 12 является более универсальным контейнером - он предназначен для хранения как закрытого ключа, так и частей открытого сертификата, чтобы их можно было перемещать. Он имеет возможность быть защищенным паролем, чтобы обеспечить некоторую защиту ключей.

PFX был предшественником PKCS # 12.

Вы не можете (как указывает Anitak) конвертировать из PKCS # 7 в PKCS # 12 без дополнительных данных (часть с закрытым ключом), потому что PKCS # 7 не имеет всех данных.

Марк Саттон указал, почему вы не можете экспортировать как PFX - у данного сертификата закрытый ключ помечен как неэкспортируемый. Поставщик криптографических услуг (CSP) не позволяет перемещать этот ключ, это сделано намеренно. Единственный * способ получить экспортируемую пару сертификат / ключ - это если исходный сертификат был выдан с установленным флагом экспорта. Также возможно, что нет никакого закрытого ключа, связанного с сертификатом, но я предполагаю, что это не тот случай.

В Википедии есть хорошее резюме различных типов PKCS .

  • Единственный законный способ, по крайней мере. В зависимости от CSP \ Crypto Hardware могут существовать механизмы, особенно для программного обеспечения только CSP, но это область исследований уязвимостей безопасности, насколько мне известно, а не системного администратора.
Helvick
источник
Спасибо. Похоже, что покупка нового сертификата может быть дешевле, чем его восстановление, в зависимости от того, сколько времени нам потребуется для этого у третьей стороны.
DrStalker
12

Я прохожу это каждые 2 года (когда возобновляю сертификат подписи кода), и каждый раз это больно.

Основная информация заключается в том, что вы можете просто переименовать файлы .p7b в .spc (как указано здесь: http://support.microsoft.com/kb/269395 ).

Затем вы можете использовать инструмент pvk2pfx.exe, чтобы конвертировать ваш PVK + SPC в PFX.

pvk2pfx.exe -pvk input.pvk -pi <existing_input.pvk_password> -spc input.spc -pfx output.pfx -po <new_output.pfx_password>

(Вы можете пропустить шаг переименования p7b и использовать его напрямую; я не пробовал ...)

Джон Харт
источник
это гораздо полезнее, чем принятый ответ. Я поражен состоянием бессмыслицы подписи кода. Я съеживаюсь при мысли о необходимости повторять это снова и снова, когда истекает срок действия сертификатов.
Тим
3

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

Я предполагаю, что вы используете центр сертификации Microsoft для выдачи ваших сертификатов. Это правильно?

Если так, то:

1. Убедитесь, что шаблон сертификата позволяет экспортировать закрытые ключи.
2. Как вы генерируете свой запрос сертификата, вы можете использовать следующую технику

Создайте INF-файл следующим образом

[Version]
Signature = "$ Windows NT $

[NewRequest]
Subject =" etc "
KeySpec = 1
Exportable = 1
MachineKeySet = TRUE
ProviderName =" CSPName "
ProviderType = 1

[RequestAttributes] CertificateTemplate =

NOTE Экспортируемый = 1
Затем используйте команды fllowing в командной строке

Certreq -new infile.inf reqfile.req // где infile.inf находится файл выше , и reqfile является файлом запрос вывода

Certreq -submit -config \ reqfile.req // Направляет запрос сертификата на CA

После завершения этого процесса вы будете быть в состоянии экспортировать сертификат как pfx. В

качестве альтернативы перейдите на страницу http://www.blacktipconsulting.com/Site/Products.html, где я разместил бесплатный инструмент командной строки, который делает все это для вас, и экспортирует сертификат как pfx после завершения.

Марк Саттон
источник
2

Как указал Хелвик, PKCS10 отвечает PKCS7 и не содержит закрытого ключа. Таким образом, при создании CSR вы должны были сгенерировать файл privatekey.key. Вы можете использовать следующие команды. (Я знаю, что это вопрос четырехлетнего возраста, но я не мог сделать это, следя за обсуждением на странице).

openssl pkcs7 -inform DER -in PK7BDownloadedArchive.p7b -text -print_certs -out intermediateCert.pem

openssl pkcs12 -export -in intermediateCert.pem -inkey privateKey.key -out FinalPKCS12Cert.p12

Удачи!

С уважением, JE

java_enthu
источник
Вам может не понадобиться -informаргумент.
Palswim
1

Я могу ошибаться, но я думаю, что ваш файл PCKCS # 7 содержит только открытую половину вашего сертификата.

Файл PKCS # 12 должен иметь обе половины - следовательно, поэтому ему нужна -inkeyопция.

Альнитак
источник