У меня есть сертификат 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?
PKCS # 7 не включает частную (ключевую) часть пары сертификат / закрытый ключ, он обычно используется для распространения сертификатов (например, в качестве ответа на запрос сертификата PKCS # 10, как средство для распространения сертификатов S / MIME. используется для шифрования сообщений или для проверки подписанных сообщений и т. д.). Важно помнить, что это касается только сертификатов, которые по определению являются общедоступными.
PKCS # 12 - более универсальный контейнер - он предназначен для хранения частей закрытого ключа и открытого сертификата вместе, чтобы их можно было перемещать. Он может быть защищен паролем, чтобы обеспечить некоторую защиту ключей.
PFX был предшественником PKCS # 12.
Вы не можете (как указывает Анитак) конвертировать из PKCS # 7 в PKCS # 12 без дополнительных данных (часть закрытого ключа), потому что PKCS # 7 не содержит всех данных.
Марк Саттон указал, почему вы не можете экспортировать как PFX - у данного сертификата закрытый ключ помечен как неэкспортируемый. Поставщик криптографических служб (CSP) не позволит перемещать этот ключ, это сделано намеренно. Единственный * способ получить экспортируемую пару сертификат \ ключ - это если исходный сертификат был выпущен с установленным экспортным флагом. Также возможно, что с сертификатом не связан закрытый ключ, но я предполагаю, что здесь это не так.
Есть хорошее резюме различных Типы PKCS в Википедии.
Я прохожу через это каждые 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 и использовать его напрямую; я не пробовал ...)
С помощью инструмента Windows, если опция pfx отключена, это означает, что закрытый ключ не может быть экспортирован из локального хранилища. Это либо потому, что его там нет (потому что ключи не были сгенерированы в используемом вами ящике), либо потому, что, когда вы сгенерировали ключи, закрытый ключ не был помечен как экспортируемый, а шаблон сертификата Windows не был настроен для разрешения экспорта.
Я предполагаю, что вы используете центр сертификации Microsoft для выдачи сертификатов. Это верно?
Если так, то: -
1. Убедитесь, что шаблон сертификата позволяет экспортировать закрытые ключи.
2. Как вы создаете запрос на сертификат, вы можете использовать следующую технику
СОЗДАЙТЕ файл INF следующим образом
[Версия]
Подпись = "$ Windows NT $
[Новый запрос]
Subject = "и т. Д."
KeySpec = 1
Экспортируемый = 1
MachineKeySet = TRUE
ProviderName = "CSPName"
ProviderType = 1
[RequestAttributes] CertificateTemplate =
ПРИМЕЧАНИЕ Exportable = 1
Затем используйте команды fllowing в командной строке
certreq -new infile.inf reqfile.req // где infile.inf - это файл выше, а reqfile - файл запроса вывода
certreq -submit -config \ reqfile.req // Отправляет запрос сертификата в CA
Как только это будет завершено, вы сможете экспортировать сертификат как pfx
Альтернативно goto http://www.blacktipconsulting.com/Site/Products.html где я разместил свой бесплатный инструмент командной строки, который делает все это за вас и экспортирует сертификат как pfx после завершения
Как указал Хелвик, ответ 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
Я могу ошибаться, но я думаю, что ваш файл PCKCS # 7 включает только общедоступную половину вашего сертификата.
Файл PKCS # 12 должен иметь обе половины - поэтому ему нужен -inkey
вариант.