Как указать промежуточные сертификаты для s_client и s_server?

#openssl #certificate

#openssl #сертификат

Вопрос:

openssl verify есть -untrusted возможность указать цепочку промежуточных сертификатов, которые стоят между

  • сертификат корневого центра сертификации, который указывается с помощью опции -CAfile или -CApath
  • и конечный сертификат, подлежащий проверке, которые указаны в качестве последних аргументов

Кто-нибудь знает, как мы указываем промежуточную цепочку сертификатов для openssl s_client и openssl s_server команд? Страницы руководства ничего не говорят об этом, к сожалению.

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

Ответ №1:

Meta: на самом деле это не вопрос программирования или разработки. Вместо этого он может принадлежать суперпользователю или, возможно, security.SX.

Для OpenSSL версий 1.1.0 (выпущена в 2016-08 годах) и выше вы можете предоставить (точные) промежуточные / цепные сертификаты в файле, используя -cert_chain и / или вы можете указать -build_chain и использовать -chainCAfile и / или -chainCApath , из которых выбираются необходимые сертификаты, аналогично тому, как -CAfile и -CApath традиционно используются. Однако они не документированы в 1.1.0, только 1.1.1 (2018-09); посмотрите эти справочные страницы, если они у вас установлены, или в Интернете для s_client и s_server.

Для более низких версий вам нужен kludge: -CAfile и -CApath , которые номинально предоставляют truststore для проверки сертификата однорангового узла, также используются (неявно) для завершения вашей собственной цепочки (self). Обратите внимание, что некорневые сертификаты CA в truststore используются для построения цепочек как для отправки, так и для проверки (получения), но не в качестве якорей проверки в этих версиях, поэтому их включение никогда не меняет того, какие одноранговые сертификаты фактически принимаются как действительные. (В 1.1.0 и 1.1.1 они по-прежнему не являются якорями по умолчанию, но являются, если вы укажете -partial_chain .)

Комментарии:

1. Очень четкий ответ, спасибо! Звучит так, как будто вы знаете код наизнанку. Не могу дождаться, чтобы попробовать!