Конвертировать из P7B в PEM через OpenSSL


39

В Ubuntu я не могу успешно конвертировать сертификат с использованием openssl.

vagrant@dev:/vagrant/keys$ openssl pkcs7 -print_certs -in a.p7b -out a.cer 
unable to load PKCS7 object <blah blah>:PEM
routines:PEM_read_bio:no start line:pem_lib.c:696:Expecting: PKCS7

Вы видели эту ошибку раньше?


Вы уверены, что файл p7b?
— Zoredache

Был ли файл перемещен между серверами или загружен через FTP? Если это действительно правильный формат, возможно, он поврежден. Попробуйте повторно передать файл на сервер в двоичном режиме (при использовании FTP) или повторно скопировать его из источника.
— Гарретт

Я говорю, что это p7b на основе суффикса файла. Я повторно загрузил его через Firefox, но все равно получил ту же ошибку OpenSSL ...
— Кевин Мередит

1
@Kevin Что file a.p7bтебе дает?
— Nic Young

@NicYoung - я просто получаю сообщение об ошибке выше. Нет вывода.
— Кевин Мередит

Ответы:


55

Попробуй это:

$ openssl pkcs7 -inform der -in a.p7b -out a.cer

Если это не сработает, перейдите на компьютер с Windows и выполните экспорт, следуя этому руководству.


8
Обратите внимание, что у OP был параметр -print_certsв его команде. Это влияет на формат вывода: с его помощью вы получаете формат PEM (начиная с ----- BEGIN CERTIFICATE -----), а без него вы получаете формат PKCS # 7 (----- BEGIN PKCS7-- ---)
— Сильвен

Это работает, только если я отброшу -inform derчасть. Также обратите внимание, что при экспорте ключа из диспетчера сертификатов Windows DER и P7B являются двумя различными вариантами.
— jpaugh

18

Таким образом, чтобы объединить вышеуказанные ответы, команда:
openssl pkcs7 -in cert.p7b -inform DER -print_certs -out cert.pem

Проверено, чтобы работать на Windows, используя OpenSSL-Win64

/ Спасибо Богдану за обнаружение ошибки


8

Я следовал этому руководству, которое инструктирует вас изменить строки верхнего / нижнего колонтитула

-----BEGIN PKCS #7 SIGNED DATA-----
[data]
-----END PKCS #7 SIGNED DATA-----

в

-----BEGIN CERTIFICATE-----
[data]
-----END CERTIFICATE-----

Затем выполните команду openssl pkcs7 -in foo.modified.crt -print_certs -out foo.certs(где foo.modified.crtнаходится файл, в который вы сохранили измененную версию). Это дало мне те же результаты, что и при экспорте сертификата Windows, как предлагалось в других ответах.


5

Насколько я знаю, следующее должно преобразовать сертификат pkcs7 в pem

openssl pkcs7 -in certificate_file.p7b -print_certs -out cert.pem

1
Почему вы имеете в виду, что этот ответ связан с этой темой? Потому что, как вы видите. Это так же, как и выше.
— Мсавара

3

быстрое решение в моем случае (много файлов с отсутствующим верхним / нижним колонтитулом):

base64 -d $FILE | openssl pkcs7 -inform DER -print_certs


1
У меня был сертификат в кодировке base64, и я ничего не знал об этом, а команда base64 -d избавила меня от многих проблем. Это решение должно быть более доступным в результатах поиска. Спасибо!

2

У меня тоже была эта пробема. Я собирался проверить файл p7b, скопированный с хоста Win7.

Я обнаружил, что брелок gnome может импортировать сертификат. Оттуда легко экспортировать в DER

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.