Dec 01, 2014 10:54
Надысь наступил я, как обычно, на грабли. Питоновый скриптик не смог соединиться с SOAP-сервером по https:
...
File "/usr/lib64/python2.4/urllib2.py", line 1006, in do_open
raise URLError(err)
urllib2.URLError:
Пошёл проверять wget'ом, curl'ом, потом вообще вручную openssl'ем - везде одна и та же фигня:
error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure
Вскрытие показало, что сервер не поддерживает SSLv2 и v3. Если вручную указать wegt --secure-protocol=TLSv1 или openssl -tls1, тогда работает. Проблема в том, что в питоне оно вызывается не напрямую, а где-то глубоко внутри SOAP'а, и возможности явно подписать туда протокол нету. Найденные в интернетах хаки не работают, поскольку там ещё и питон староватый - 2.4, у него весь ssl в бинарном модуле, и на ходу подхачить в нём параметры нельзя.
Вопрос: неужели openssl'ный клиент не умеет автоматически выбирать протокол, совместимый с сервером?! Если умеет, то почему не делает? А если действительно не умеет, можно ли ему подсунуть протокол через какую-нибудь переменную окружения или конфигурационный файл?
openssl