TL; DR Я пытаюсь получить URI, который принимает только SSLv3. Если я попытаюсь получить к нему доступ с помощью запросов curl или Python (которые используют модуль ssl), это не сработает (разные ошибки).
Некоторое более длинное объяснение
Вот этот API, у которого есть этот URI: https://api.mercadolibre.com/sites/MLA/search?q=ipod
Если я попытаюсь получить доступ к этому URI в браузере, он будет работать нормально (Chrome и FF).
Если я попытаюсь скрутить его: curl -Iv https://api.mercadolibre.com/sites/MLA/search?q=ipod
это не работает. Возвращенная ошибка:
curl: (35) Unknown SSL protocol error in connection to api.mercadolibre.com:443
Принуждение curl к использованию SSLv3 отлично работает:
curl --sslv3 -Iv https://api.mercadolibre.com/sites/MLA/search?q=ipod
openssl s_client -connect api.mercadolibre.com:443
отвечает:
CONNECTED(00000003)
write:errno=104
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 0 bytes and written 305 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
---
Как такое может быть, что браузер подключает Ok, а curl и Python - нет? Как мне это исправить? Это вообще моя проблема (или владелец API)?
Информация о моей системе
На тот момент, когда был задан этот вопрос, данный сайт поддерживал только небольшой набор очень слабых наборов шифров и очень слабая совместимость с современными пользовательскими агентами. Таким образом, для большинства браузеров или даже роботов было невозможно установить соединение, не говоря уже о безопасном.
С тех пор сайт был (в основном) исправлен; хотя у него все еще есть слабые наборы шифров и другие проблемы, он должен, по крайней мере, быть функциональным.