Почему проверка openssl завершается с ошибкой с файлом цепочки сертификатов, а с параметром untrusted — успешно?

Я работаю с цепочкой сертификатов с 3 сертификатами:

  • ca.crt : корневой сертификат ЦС
  • промежуточный.crt : промежуточный сертификат ЦС (подписанный ca.crt)
  • cert.crt: окончательный сертификат

Сначала я пытаюсь проверить с помощью: openssl verify -CAfile ca.crt -untrusted intermediate.crt cert.crt

Я получаю в результате cert.crt: OK

Так что все в порядке.

Но если я создам цепочку сертификатов с cat cert.crt intermediate.crt > cert.chain

И затем я проверяю с openssl verify -CAfile ca.crt cert.chain

Результат error 20 at 0 depth lookup:unable to get local issuer certificate

И файл cert.chain также отклоняется сервером по той же причине.

Я не понимаю, где проблема.


person Robert Masse    schedule 08.12.2020    source источник
comment
Это не вопрос или проблема программирования, а обман stackoverflow.com/questions/44375300 и stackoverflow.com/questions/29436967 (оба помечены как оффтоп) и выполнить кроссдуп не менее security.stackexchange.com/questions/223884 security.stackexchange.com/questions/163577 security.stackexchange.com/questions/203451 unix .stackexchange.com/questions/354195 . openssl verify ... file читает только ОДИН сертификат из файла, НЕ ЦЕПОЧКУ. ...   -  person dave_thompson_085    schedule 08.12.2020
comment
... Я не знаю, что вы подразумеваете под сервером, который «отклоняет [обработку]» файла; серверы обычно не проверяют свои собственные сертификаты и должны принимать действительную цепочку, отправленную клиентом (независимо от того, из файла или нет), если только вы не сделали что-то не так, что может быть связано с программированием в зависимости от того, что вы на самом деле сделали. .   -  person dave_thompson_085    schedule 08.12.2020


Ответы (3)


Сначала я пытаюсь проверить с помощью: openssl verify -CAfile ca.crt -untrusted intermediate.crt cert.crt

Это возьмет первый сертификат из cert.crt и попытается построить цепочку доверия, используя данные ненадежные сертификаты ЦС в intermediate.crt до некоторого корневого сертификата ЦС в ca.crt.

И затем я проверяю с openssl verify -CAfile ca.crt cert.chain

Это также удалит первый сертификат из cert.chain. Он будет игнорировать оставшиеся сертификаты в этом файле. Затем он попытается построить цепочку доверия к какому-либо корневому сертификату ЦС в ca.crt без использования каких-либо промежуточных сертификатов ЦС, поскольку они не предоставлены. Таким образом, он потерпит неудачу.

И файл cert.chain также отклоняется сервером по той же причине.

Неизвестно, что именно здесь происходит. Если он отклонен сервером, вы, вероятно, говорите о проверке сертификата клиента сервером. Возможно, клиентское приложение просто отправляет на сервер не всю цепочку, а только первый сертификат из файла. Однако об этом клиентском приложении ничего не известно, так что это только предположение.

person Steffen Ullrich    schedule 08.12.2020

Здравствуйте, у вас ошибка, связанная только с тем, что ваша цепочка построена неправильно. Обычно ваша проверка с ненадежным не будет работать, поэтому вы путаете. Правильная последовательность ниже. Я приглашаю вас восстановить и воссоздать вашу цепочку.

openssl verify -CAfile ca.crt -untrusted cert.crt intermediate

Это начнется в конце (корневой › промежуточный › сертификат)

Итак, ваша цепочка должна быть построена следующим образом:

cat intermediate.crt cert.crt > chain.crt

Тогда это сработает.

person Youssou Ndiaye    schedule 09.12.2020
comment
Привет. Спасибо за ваш вклад, но нет, правильный путь — это cat cert.crt Intermediate.crt › chain.crt - person Robert Masse; 10.12.2020

Спасибо всем. Да, правильный способ проверить цепочку — использовать параметр untrusted в openssl verify для указания промежуточного сертификата.

Подключение к серверу было предпринято с помощью openssl s_client и указания цепочки сертификатов в параметре cert, но это не удалось. Используя последнюю версию openssl (1.1.0 или новее), теперь можно добавить параметр cert_chain, чтобы указать используемый промежуточный сертификат.

person Robert Masse    schedule 10.12.2020