Jest to przejaw niezgodności między najnowszymi wersjami OpenSSL a niektórymi serwerami WWW. Apple stara się jak najlepiej wyeliminować OpenSSL na OS X, więc stosują tylko łaty bezpieczeństwa (OpenSSL było trudne do obsługi w ramach systemu operacyjnego, nie wspominając o "drobnych" aktualizacjach wprowadzających takie problemy), podczas gdy Debian używa nowszy OpenSSL 1.0.1.
@ Sugestia Briana Redbearda, by sprawdzić z linią poleceń openssl
jest dobra - zawiesiła się na wwws.mint.com
, gdy tylko spróbowałem.
na ServerFault ostatecznie dostarczył odpowiedź. Łączony tam test SSLLab identyfikuje numer long handshake intolerance jako problem, który wpływa na OpenSSL 1.0.1 i późniejsze, i łączy się z OpenSSL bug z potencjalnymi obejściami.
Albo używając -no_tls1_2
, jako jeden z deweloperów OpenSSL zaleca albo zmniejszenie szyfr listę z -cipher
argumentu powoduje OpenSSL 1.0.1 z powodzeniem uścisk dłoni z wwws.mint.com
(jak również inny serwer Starałem się skontaktować).
Dla moich celów - skrypt, który nie będzie dystrybuowany - I monkeypatched ssl.wrap_socket
następująco:
import ssl
old_wrap_socket = ssl.wrap_socket
def wrap_socket(sock, keyfile=None, certfile=None,
server_side=False, cert_reqs=ssl.CERT_NONE,
ssl_version=ssl.PROTOCOL_SSLv3, ca_certs=None,
do_handshake_on_connect=True,
suppress_ragged_eofs=True, ciphers=None):
return old_wrap_socket(sock, keyfile, certfile,
server_side, cert_reqs, ssl_version,
ca_certs, do_handshake_on_connect,
suppress_ragged_eofs, ciphers)
ssl.wrap_socket = wrap_socket
import mechanize
Domyślna wartość ssl_version
jest ssl.PROTOCOL_SSLv23
; zmieniając go na PROTOCOL_SSLv3
pomyślnie łączy.
Można ochronić tę poprawkę za pomocą testu, takiego jak ssl.OPENSSL_VERSION_INFO[:3] >= (1, 0, 1)
.
Powinno to zostać zgłoszone jako błąd Debiana OpenSSL, jeśli jeszcze go nie było.
Myślę, że nie ma to związku z samą mechanizacją, ma znaczenie dla python stdlib - patrz [ten problem] (http://bugs.python.org/issue1251). – alecxe
@alecxe wielkie dzięki, że wydaje się mieć zastosowanie. Jednakże, zgodnie z tym wątkiem, ten problem powinien zostać załatany ... co oczywiście nie jest. Jakiś pomysł, co mogę zrobić, żeby sprawy zadziałały? Ponadto, jeśli ten błąd był przyczyną problemu, czy nie byłby to problem również w OSX, ponieważ oba są zarówno Pythonem 2.7.3? – rickcnagy
Cóż, trudno powiedzieć. Kod działa dla mnie na Ubuntu 12.04 przy użyciu Pythona 2.7.3. – alecxe