Почему не удается установить SSL-соединение при использовании промежуточного центра сертификации? - PullRequest
0 голосов
/ 05 мая 2020

Данная цепочка сертификатов stackoverflow.com выглядит следующим образом:

Builtin DST Root CA -> Let's encrypt intermediate CA -> *.stackexchange.com

Можно ли установить TLS-соединение с использованием промежуточного ЦС в качестве доверенного ЦС?

curl https://stackoverflow.com -v --cacert stack_intermediate_ca.pem --capath /dev/null -o /dev/null

curl: (60) SSL certificate problem: unable to get issuer certificate

Это потому, что промежуточный ЦС присутствует в цепочке серверов во время установления связи TLS? Или все сертификаты в цепочке должны быть подписаны либо напрямую, либо транзитивно доверенным органом? ЦС должен быть самоподписанным, чего нельзя сказать о промежуточном ЦС.

1 Ответ

2 голосов
/ 05 мая 2020

Это поведение здесь зависит от версии openssl и curl.

Традиционно openssl требовал проверки всей цепочки, т.е. вплоть до самоподписанного и локально доверенного сертификата root. В openssl 1.0.2 был добавлен флаг X509_V_FLAG_PARTIAL_CHAIN ​​, что позволило завершить проверку цепочки произвольным доверенным сертификатом, независимо от того, является ли он самоподписанным root или нет. Но это поведение по умолчанию отключено.

С curl 7.68.0 этот флаг в curl включен по умолчанию, поэтому с более новыми версиями curl и openssl должна быть возможность иметь сертификат цепочки в --cacert вместо самоподписанного сертификата root. Не имеет значения, отправит ли сервер дополнительные сертификаты цепочки, необходимые для проверки цепочки, поскольку curl / openssl будет просто использовать сертификаты, которые действительно необходимы. Проверено с помощью curl 7.68.0 с openssl 1.1.1 в Ubuntu 20.04.

...