Конвертировать из 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

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

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

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

Йоаким
источник