У меня есть файл сертификата .crt.
при этом openssl x509 -in bundle.crt -text -noout
отображается только корневой сертификат.
как я вижу все другие сертификаты?
http://comments.gmane.org/gmane.comp.encryption.openssl.user/43587 предлагает следующую строку:
openssl crl2pkcs7 -nocrl -certfile CHAINED.pem | openssl pkcs7 -print_certs -text -noout
Это действительно сработало для меня, но я не понимаю деталей, поэтому не могу сказать, есть ли какие-то предостережения.
/etc/ssl/certs/ca-certificates.crt
и получилunable to load PKCS7 object
Java
keytool
делает свое дело:Аннотация: Двойной клик Windows не работает. Windows считывает только первый сертификат в хранилище ключей и автоматически расширяет цепочку доверия из встроенного хранилища сертификатов.
Результаты:
.crt
файле не отображаются.crt
файле. Это может привести к неправильным выводам.источник
После этого FAQ я привел меня к этому Perl-скрипту , который очень убедительно подсказывает мне, что у
openssl
него нет встроенной поддержки для обработки n- го сертификата в пакете, и что вместо этого мы должны использовать какой-то инструмент для нарезки входных данных перед подачей каждого сертификат кopenssl
. Этот скрипт на Perl, свободно адаптированный из скрипта Ника Берча, указанного выше, похоже, выполняет свою работу:источник
Oneliner, который отображает сводку по каждому сертификату в файле.
(аналогичный коммандос упоминается в другом ответе, но это дает более короткий вывод без опции --text).
пример:
источник
Это может быть не красиво и не элегантно, но для меня это было быстро и сработало, используя bash на linux и отформатированные в PEM блоки в пакете ca-cert.
Вы можете поместить все это в одну строку и настроить параметры openssl в соответствии с вашими предпочтениями. Мне бы очень хотелось, чтобы для этого было более элегантное решение, но в этом случае я думаю, что нахождение более элегантного решения заняло бы больше времени, чем взломать неэлегатное.
источник
Поскольку нет решения на основе awk:
Первая команда разбивает пакет на сертификаты путем поиска строк BEGIN и END. Вторая команда проходит по извлеченным сертификатам и показывает их.
источник
В bash обычно требуется только одна (длинная) строка кода :-)
источник
Небольшое изменение поста MadHatter, позволяющее копировать / вставлять прямо в CLI. Я также включил хэш MD5, который полезен при проверке правильности сертификатов. Возвращенная строка stdin - это хэш md5 сертификата (ов).
Если вы хотите увидеть хороший краткий вывод, используйте эту версию. Полезно, если вы только проверяете, что включили все свои сертификаты, но на самом деле не проверяете использование / и т.д. сертификатов.
На тот случай, если ваша версия openssl не поддерживает все эти флаги, вы можете использовать egrep. То же самое, что и первый, но просто труба в egrep.
Чтобы проверить MD5-хэш закрытого ключа, вы можете сделать следующее.
Ссылка: SSL Shopper - Сертификат соответствия ключей
источник
Вот решение на основе awk, которое не использует промежуточные файлы.
Он работает путем чтения блоков PEM из stdin и объединения каждого блока в одну строку, кодированную base64. Затем строки читаются, декодируются и передаются в openssl в качестве кодированных сертификатов DER.
источник
cat bundle.crt | awk -v cmd="openssl x509 -subject -noout" '/-----BEGIN/ { c = $0; next } c { c = c "\n" $0 } /-----END/ { print c|cmd; close(cmd); c = 0 }'
.Я хотел бы добавить здесь идиоматическую командную строку Perl:
Если есть текст, то немного более надежный твик:
Просто измените значение n во втором операторе, чтобы получить n-й сертификат.
источник
Метод Windows
Один из способов увидеть всю цепочку - это (конечно, в Windows) дважды щелкнуть crt, а затем посмотреть на вкладку «Certification Path». Он покажет всю цепочку, даже если есть только Intermediate или Root Cert. Смотрите скриншот ниже для деталей. Если вы не используете Windows, я прошу прощения за отсутствие знаний о вариантах Unix / Linux.
Примечание: это может привести к ложным результатам, если промежуточный сертификат находится в вашем локальном хранилище ключей, Windows добавит его автоматически и не покажет только то, что было в комплекте.
Linux (метод Ubuntu)
Я упустил из виду вашу первоначальную команду, и у вас есть одна вещь не к месту. Ваша команда должна выглядеть так:
Источник: http://manpages.ubuntu.com/manpages/hardy/man1/x509.1ssl.html
источник
openssl
вызов дал синтаксическую ошибку, но он перечислил только первый сертификат в комплекте. Во-вторых, два вызова функционально идентичны. В-третьих, и, вероятно, самое главное, ваш не работает, по крайней мере для меня; в нем также указан только первый сертификат в комплекте.