Summary: | curl: (60) SSL certificate problem: unable to get local issuer certificate | ||
---|---|---|---|
Product: | Sisyphus | Reporter: | Vitaly Lipatov <lav> |
Component: | curl | Assignee: | Anton Farygin <rider> |
Status: | CLOSED WONTFIX | QA Contact: | qa-sisyphus |
Severity: | normal | ||
Priority: | P5 | CC: | glebfm, ldv, rider |
Version: | unstable | ||
Hardware: | x86_64 | ||
OS: | Linux | ||
Bug Depends on: | |||
Bug Blocks: | 42306 |
Description
Vitaly Lipatov
2022-04-05 20:32:25 MSK
https://www.gogetssl.com/news/27.html IMHO curl тут не при чём и просто делает свою работу. Сертификаты-то никто не отзывал, тут дело в плохо сконфигурированном сервере. curl --trace out.log https://мойассистент.рф рассказывает гораздо больше. В общем я не совсем понимаю чем бы тут мог помочь curl ? Глеб наверное подробнее расскажет в чём проблема, мне кажется что всё из-за того, что сервер отдаёт в сертификате информацию только о последнем удостоверяющем центре в дереве SSL, а у нас его нет, но есть тот, который выдал сертификат ему (корневой). Браузеры видимо или содержат большую базу, или умеют ходить в сеть за ней. $ wget https://мойассистент.рф --2022-04-05 20:52:07-- https://xn--80akicokc0aablc.xn--p1ai/ Распознаётся xn--80akicokc0aablc.xn--p1ai (xn--80akicokc0aablc.xn--p1ai)… 62.105.131.170 Подключение к xn--80akicokc0aablc.xn--p1ai (xn--80akicokc0aablc.xn--p1ai)|62.105.131.170|:443... соединение установлено. ОШИБКА: невозможно проверить сертификат xn--80akicokc0aablc.xn--p1ai, выпущенный «CN=Sectigo RSA Domain Validation Secure Server CA,O=Sectigo Limited,L=Salford,ST=Greater Manchester,C=GB»: Невозможно локально проверить подлинность запрашивающего. Для небезопасного подключения к xn--80akicokc0aablc.xn--p1ai используйте параметр «--no-check-certificate» Дело в том, что приличные SSL-сервера помимо своего сертификата присылают ещё и цепочку, которая ведёт к тем root-овым сертификатам, которые обычно используются в клиентском софте. Например: $ openssl s_client -connect altlinux.org:443 CONNECTED(00000003) depth=2 C = US, O = Internet Security Research Group, CN = ISRG Root X1 verify return:1 depth=1 C = US, O = Let's Encrypt, CN = R3 verify return:1 depth=0 CN = www.altlinux.org verify return:1 --- Certificate chain 0 s:CN = www.altlinux.org i:C = US, O = Let's Encrypt, CN = R3 1 s:C = US, O = Let's Encrypt, CN = R3 i:C = US, O = Internet Security Research Group, CN = ISRG Root X1 2 s:C = US, O = Internet Security Research Group, CN = ISRG Root X1 i:O = Digital Signature Trust Co., CN = DST Root CA X3 --- ... т.е сервер прислал целых 3 сертификата, которые позволили клиенту проверить всю цепочку (поскольку 4-й сертификат нашёлся в ca-bundle). Сервер, о котором идёт речь ведёт себя совершенно иначе: $ openssl s_client -connect xn--80akicokc0aablc.xn--p1ai:443 CONNECTED(00000003) depth=0 CN = *.xn--80akicokc0aablc.xn--p1ai verify error:num=20:unable to get local issuer certificate verify return:1 depth=0 CN = *.xn--80akicokc0aablc.xn--p1ai verify error:num=21:unable to verify the first certificate verify return:1 depth=0 CN = *.xn--80akicokc0aablc.xn--p1ai verify return:1 --- Certificate chain 0 s:CN = *.xn--80akicokc0aablc.xn--p1ai i:C = GB, ST = Greater Manchester, L = Salford, O = Sectigo Limited, CN = Sectigo RSA Domain Validation Secure Server CA --- т.е. присылает всего один сертификат. В отличие от curl браузеры умеют читать из сертификата Authority Information Access (AIA), в котором записано, куда нужно сходить в интернете чтобы получить промежуточные сертификаты. По поводу поддержки AIA в curl см.: https://github.com/curl/curl/blob/master/docs/TODO#L815 https://github.com/curl/curl/issues/2793 Ещё более хорошая ссылка на эту тему: https://curl.se/docs/faq.html#Why_do_I_get_certificate_verify Ну и вот: https://www.ssllabs.com/ssltest/analyze.html?d=xn--80akicokc0aablc.xn--p1ai Глеб, спасибо. Виталий, может быть напишешь администраторам сайта ? (Ответ для Anton Farygin на комментарий #7) > Глеб, спасибо. Глеб, спасибо за подробное разъяснение! > Виталий, может быть напишешь администраторам сайта ? Да, я написал вчера. |