2016-11-22 11 views
0

Я хочу проверить, выпущен ли сертификат судом CA или нет. Я использую следующую команду:Проверьте PEM-сертификат в Bash с кодом ошибки, но введите код OK

openssl verify -verbose -CAfile "/usr/share/jenkins/sub-ca.crt" cert.crt 

cert.crt в этом случае самостоятельно подписанный сертификат, поэтому он не выдан суб-ca.crt. sub-ca.crt - сертификат, выданный нашим root-ca. Когда я запускаю команду, он показывает правильную ошибку: отображается

error 18 at 0 depth lookup:self signed certificate 

Но в этой строке OK и когда я проверить код с $? Я получаю 0 в качестве кода возврата. Почему команда возвращает OK при возникновении ошибки?

ответ

1

В verify команда пытается построить цепочку сертификатов, подтверждает, что цепь завершена, проверяет цель, проверьте настройки доверия, проверяет правильность всей цепи (например, от времени и т.д.) и т.д.

Поскольку verify является диагностическим инструментом, код возврата не означает, что сертификат успешно подтвержден, это означает, что команда успешно завершилась без каких-либо фатальных ошибок. Некоторые классы ошибок рассматриваются как нефатальные, такие как: самозаверяющий сертификат, срок действия сертификата, расширения сертификатов обработки ошибок и т. Д. Негативные ошибки будут отображаться, но не повлияют на окончательный результат «ОК».

+0

Спасибо за ваш ответ! Есть ли способ проверить код ошибки этой команды? Я должен знать, было ли оно выпущено CA или нет, и самозаверяющий сертификат не подходит для этой цели. – user3296316

+0

Я не думаю, что вы можете сделать это из командной строки (по крайней мере, не очищая текст). Для этого вам нужно будет использовать API libcrypto. –

0

Ошибка 18, которая возвращается командой OpenSSL в этом случае, указывает, что это самоподписанный сертификат найден на глубине 0, а сам самозаверяющий сертификат отсутствовал во внутреннем хранилище (или в случае этой команды он не предоставляется вместе с опцией -CAfile).

Как правило, OpenSSL пытается сформировать цепочку сертификатов и ее эмитентов на основе сертификата или цепочки сертификатов, представленных для проверки, и сертификатов, предоставляемых как часть -CAfile или -CAPath.

Ожидается, что самоподписанный сертификат в цепочке (то есть самый верхний сертификат цепочки) также должен быть представлен как часть параметров -CAfile или -CAPath, то есть им доверяет верификатор.

В вопросе, это не тот случай и, следовательно, ошибка.

+0

Я не уверен, что страница, которую вы цитируете, верна, когда она говорит * «Поскольку OpenSSL не может проверить кого-либо из подписчиков [самозаверяющего] сертификата, он не может проверить сертификат .... Как только вы получите кому-то в цепочке подписки доверяют [вы получите подтверждение OK (0)] "*. OpenSSL следует RFC 5280 и RFC 4158. RFC разрешают самоподписанные сертификаты конечных сущностей, поэтому нет причин отклонять доверяемый. Если доверенный ('-CApath' или' -CAfile') отклоняется, то его ошибка в OpenSSL. – jww

+0

@jww, я не совсем понимаю ваш комментарий. Дело здесь в том, что для проверки имеется самозаверяющий сертификат, и этот сертификат также отсутствует в доверенном репозитории, то есть не представленном параметром -CAfile. Таким образом, он терпит неудачу. Дополнительная информация о том, что этот самоподписанный сертификат находится на глубине 0. Я постараюсь перефразировать мой ответ. – Jay

 Смежные вопросы

  • Нет связанных вопросов^_^