Операция openssl
командной строки verify
считывает только один сертификат, первый, из файла, заданного в качестве операнда, или из каждого файла, если задано более одного. Это отличается от файлов, указанных с параметрами -CAfile -trusted -untrusted
, которые могут (и обычно содержат) несколько сертификатов.
Ваш файл client/org1_client_crt.pem
предположительно содержит сертификат клиента и сертификат 'org CA' в указанном порядке. Используется только сертификат клиента, сертификат 'org CA' игнорируется, и в результате у вас нет действительной цепочки для проверки.
Если вы хотите использовать командную строку для имитации/проверки проверки, которую будет выполнять получатель (для клиентского сертификата, сервера), укажите конечный сертификат в качестве операнда и все другие переданные (цепные) сертификаты с -untrusted
, а привязки ) плюс любые «известные» промежуточные звенья в хранилище доверенных сертификатов, явные или заданные по умолчанию.
Нет операции openssl connect
; Я предполагаю, что вы имеете в виду openssl s_client
с параметрами, включая -connect
, поскольку это единственное место, где имеет смысл использовать цепочку сертификатов клиента. Параметр -cert
для s_client
аналогичным образом использует только первый сертификат в файле. В командной строке нет возможности указать цепочку клиентов, за исключением самой последней версии, 1.1.0, и даже там она не задокументирована, поэтому вам нужно внимательно прочитать справочное сообщение или код, хотя API/библиотека давно поддерживает это для кода, который вы пишете сами.
Через 1.0.2, если вы хотите отправить сертификат клиента с полной цепочкой на сервер (как вы должны в соответствии с RFC), предполагая, что сервер запрашивает аутентификацию клиента, которая не является обычной и не используется по умолчанию для nginx (среди прочего), у вас есть использовать хитрость: предоставить все сертификаты, необходимые для клиентской цепочки в магазине доверенных сертификатов, в дополнение к якорям, необходимым для проверки сервера, либо используя -CAfile
, либо /или -CApath
явно, или используя (при необходимости изменяя) хранилище доверенных сертификатов по умолчанию, если только ваша openssl
не является более старой версией, отличной от RedHat, где хранилище доверенных сертификатов по умолчанию не работало только в s_client s_server s_time
.
То же самое относится и к сертификату/цепочке сервера в s_server
, за исключением того, что он используется почти всегда, а не очень редко.
person
dave_thompson_085
schedule
05.06.2017