curl не может скачать файл
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 29.07.21 14:20
Оценка: :)
Периодически качаю CureIt! с drweb.com из-под Windows 7. Firefox и Chrome скачивают всегда и без проблем. curl периодически ведет себя странно. Вот сейчас так:

7.62.0:

curl: (35) schannel: next InitializeSecurityContext failed: Unknown error (0x80092013) — The revocation function was unable to check revocation because the revocation server was offline.


7.78.0 (последний):

curl: (60) SSL certificate problem: unable to get local issuer certificate
More details here: https://curl.se/docs/sslcerts.html

curl failed to verify the legitimacy of the server and therefore could not establish a secure connection to it. To learn more about this situation and how to fix it, please visit the web page mentioned above.


Чего ему надо, почему он не может сделать так же, как и браузеры?
curl server certificate revocation
Re: curl не может скачать файл
От: wildwind Россия  
Дата: 29.07.21 15:28
Оценка: 14 (1)
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Чего ему надо, почему он не может сделать так же, как и браузеры?


По ссылке есть объяснение. Если вкратце, то твоя сборка curl использует для SSL функции ОС и соответственно сертификаты в системном хранилище. И ошибка эта оттуда.

Firefox их не использует, у него все свое. Chrome вроде как использует, но хз в чем разница.
Re[2]: curl не может скачать файл
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 29.07.21 17:38
Оценка:
Здравствуйте, wildwind, Вы писали:

W>По ссылке есть объяснение.


Я начал там читать, но с виду оно выглядит, как обычное разъяснение чайникам о том, что такое SSL/TSL, сертификат, доверие и прочее. Забил пару слов в поиск, но неудачно, поэтому и не добрался до нужного места. Спасибо!

Подсунул curl пакет сертификатов от Mozilla, дело пошло.
Re: curl не может скачать файл
От: watchmaker  
Дата: 29.07.21 20:22
Оценка: 23 (2)
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>curl: (60) SSL certificate problem: unable to get local issuer certificate

ЕМ>Чего ему надо, почему он не может сделать так же, как и браузеры?

Кстати, помимо озвученной причины с разными корневыми сертификатами, в браузерах ещё есть особая и сложная работа с Authority Information Access (AIA), которой нет в curl.

Сертификат сайта может иметь валидный путь до корневого. Но сервер может быть плохо сконфигурирован и не присылать всю длинную цепочку сертификатов. И при этом замечательно открываться в браузерах, так как информации из AIA достаточно чтобы проверить подлинность.
А браузеры либо самостоятельно запрашивают промежуточные сертификаты по ссылкам из AIA (chromium), либо используют кеш сертификатов из других цепочек и строят путь через него (firefox).

А вот curl, как отдельная утилита, не имеет кеша промежуточных сертификатов, и отказывается ходить по ссылкам из AIA за промежуточными сертификатами (так как это дополнительный и сложный запрос в сеть, который аналогично может временно зафейлится, или потребовать другого запроса сертификатов уже для своего подтверждения, и так далее).

И получается такая же ситуация: сайт в браузерах у всех открывается, а SSL проверку в curl не проходит. Конечно, формально тут проблема у сайта (нарушают требования присылать полную цепочку), но на практике от этого не легче :)
Re[2]: curl не может скачать файл
От: Слава  
Дата: 29.07.21 23:53
Оценка:
Здравствуйте, watchmaker, Вы писали:

W>И получается такая же ситуация: сайт в браузерах у всех открывается, а SSL проверку в curl не проходит. Конечно, формально тут проблема у сайта (нарушают требования присылать полную цепочку), но на практике от этого не легче


Я иногда жалею, что в айти нет своего аналога Энергонадзора. Чтобы вот таким сайтам выкатывали штраф по 100 долларов в день на уровне хостера.
Re: curl не может скачать файл
От: Mr.Delphist  
Дата: 30.07.21 11:13
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Периодически качаю CureIt! с drweb.com из-под Windows 7. Firefox и Chrome скачивают всегда и без проблем. curl периодически ведет себя странно. Вот сейчас так:


ЕМ>7.62.0:

ЕМ>

ЕМ>curl: (35) schannel: next InitializeSecurityContext failed: Unknown error (0x80092013) — The revocation function was unable to check revocation because the revocation server was offline.


Т.е. дефолтный CRL-сервер сейчас не может ответить (занят, перезагружается и т.п.), поэтому приложение должно иметь несколько адресов куда стучаться. У курла, очевидно, этого в дефолтном поведении не предусмотрено.

ЕМ>Чего ему надо, почему он не может сделать так же, как и браузеры?


Собственно, это и отличает простой код, работающий по happy path, и код промышленный — со всеми retry policies, fallbacks etc.
Re[2]: curl не может скачать файл
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 30.07.21 11:15
Оценка:
Здравствуйте, Mr.Delphist, Вы писали:

MD>Т.е. дефолтный CRL-сервер сейчас не может ответить (занят, перезагружается и т.п.)


Неделю?
Re[3]: curl не может скачать файл
От: Mr.Delphist  
Дата: 30.07.21 13:05
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Здравствуйте, Mr.Delphist, Вы писали:


MD>>Т.е. дефолтный CRL-сервер сейчас не может ответить (занят, перезагружается и т.п.)


ЕМ>Неделю?


Почему бы и нет? Либо какой-то maintenance, либо старый сервак вообще декоммисовали, запросы обламываются и пересылаются нормальными клиентами на fallback-адрес (как с DNS — если primary-сервак дал ошибку, есть secondary, ну а если и он помер — всегда можно сходить на волшебный 8.8.8.8)
Re: curl не может скачать файл
От: VladCore  
Дата: 31.07.21 12:57
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Периодически качаю CureIt! с drweb.com из-под Windows 7. Firefox и Chrome скачивают всегда и без проблем. curl периодически ведет себя странно. Вот сейчас так:


ЕМ>7.62.0:

ЕМ>

ЕМ>curl: (35) schannel: next InitializeSecurityContext failed: Unknown error (0x80092013) — The revocation function was unable to check revocation because the revocation server was offline.


ЕМ>7.78.0 (последний):

ЕМ>

ЕМ>curl: (60) SSL certificate problem: unable to get local issuer certificate
ЕМ>More details here: https://curl.se/docs/sslcerts.html

ЕМ>curl failed to verify the legitimacy of the server and therefore could not establish a secure connection to it. To learn more about this situation and how to fix it, please visit the web page mentioned above.


ЕМ>Чего ему надо, почему он не может сделать так же, как и браузеры?


Что в ошибках написано понимаеш примерно?

у curl есть опция --insecure для игнора валидности серверных сертификатов.

что бы curl как браузеры работали надо ему подсовывать свежие корневые сертификаты или отключать проверку сертификатов как я выше написал.

сами сертификаты которые понимает curl лежат здесь https://curl.haxx.se/ca/cacert.pem. Переменная окружэния нахывается CURL_CA_BUNDLE. В винде не проверял, только в линуксе. В винде если работает/неработает дай знать
Re[2]: curl не может скачать файл
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 31.07.21 15:48
Оценка:
Здравствуйте, VladCore, Вы писали:

VC>В винде если работает/неработает дай знать


Я ж еще позавчера написал, что работает.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.