перетворити .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

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

Як я можу конвертувати цей ключ у формат .pfx?

Відповіді:


20

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

PKCS №12 є універсальнішим контейнером - він призначений для зберігання як приватного ключа, так і публічних сертифікатних частин разом, щоб їх можна було переміщувати. Він може захищатися паролем, щоб забезпечити деякий захист ключів.

PFX був попередником ПККС №12.

Ви не можете (як вказує Анітак) конвертувати з PKCS # 7 в PKCS №12 без додаткових даних (частина приватного ключа), оскільки PKCS # 7 не має всіх даних.

Марк Саттон зазначив, чому ви не можете експортувати як PFX - у відповідного сертифікату його приватний ключ позначений як неекспортируемый. Постачальник криптографічних послуг (CSP) не дозволить перемістити цей ключ, це навмисно. Єдиний * спосіб отримати пару сертифікатів cert \ key - це, якщо оригінальний сертифікат був виданий із встановленим прапором для експорту. Можливо також, що немає приватного ключа, пов'язаного з cert, але я припускаю, що це не так.

Існує гарне резюме різних типів PKCS в Вікіпедії .

  • Принаймні єдиний законний спосіб. Залежно від обладнання CSP \ Crypto Hardware, можливо, існують механізми, особливо для програмного забезпечення, що стосується лише CSP, але це сфера для дослідження вразливості безпеки лише, що стосується мене, а не системного адміністратора.

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

Якщо вимкнено опцію pfx, це означає, що приватний ключ неможливо експортувати з локального магазину. Це відбувається тому, що його немає (тому що ключі не були створені у вікні, яке ви використовували), або тому, що при створенні ключів приватний ключ не позначався як експортний, а шаблон сертифіката Windows не був налаштований для дозволу експорту.

Я припускаю, що ви використовуєте орган сертифікації Microsoft для видачі ваших сертифікатів. Це правильно?

Якщо так, то: -

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

Створіть файл INF наступним чином

[Версія]
Signature = "$ Windows NT $

[NewRequest]
Subject =" тощо "
KeySpec = 1
експортований = 1
MachineKeySet = TRUE
ProviderName =" CSPName "
ProviderType = 1

[RequestAttributes] CertificateTemplate =

ПРИМІТКА експортованого = 1
Потім в командному рядку скористайтеся командами, що минають

certreq -новий infile.inf reqfile.req // де infile.inf - файл вище, а reqfile - файл запиту виводу

certreq -submit -config \ reqfile.req // Подає запит cert до CA

Після завершення цього ви будете бути в змозі експортувати cert як pfx

Альтернативно, перейдіть на сторінку http://www.blacktipconsulting.com/Site/Products.html, де я помістив свій безкоштовний інструмент командного рядка, який робить все це для вас і експортує cert як 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


Вам може не знадобитися -informаргумент.
palswim

1

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

У файлі PKCS # 12 повинні бути обидві половинки - звідси для цього потрібен -inkeyваріант.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.