Bu yanıt, değişiklik yapıldığından, bu nedenle yalnızca python'un eski sürümleri için geçerli olduğundan önce gelir.
Eğer protokol sürümünü belirtmek isterseniz, maymun yama gerekiyordu biri bu iki: yama httplib.HTTPSConnection.connect
: 1
import httplib
import socket
import ssl
def connect_patched(self):
"Connect to a host on a given (SSL) port."
sock = socket.create_connection((self.host, self.port),
self.timeout, self.source_address)
if self._tunnel_host:
self.sock = sock
self._tunnel()
self.sock = ssl.wrap_socket(sock, self.key_file, self.cert_file,
ssl_version=ssl.PROTOCOL_SSLv3)
httplib.HTTPSConnection.connect = connect_patched
Tüm bağlantılar HTTPSConnection
ile yapılmıştır.
Yöntem 2: ssl.wrap_socket
yama:
import ssl
wrap_socket_orig = ssl.wrap_socket
def wrap_socket_patched(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 wrap_socket_orig(sock, keyfile, certfile, server_side,
cert_reqs, ssl_version, ca_certs,
do_handshake_on_connect,
suppress_ragged_eofs, ciphers)
ssl.wrap_socket = wrap_socket_patched
Bu, wrap_socket
kullandığı tüm kod için varsayılan protokol sürümünü değiştirir dolayısıyla da diğer kütüphaneleri etkiler.
düzenleme:
Yöntem 3: httplib aslında ssl
sadece wrap_socket
erişir, çünkü ayrıca sadece bir sınıf wrap_socket
sağlayan httplib.ssl
yerini alabilir.functools.partial
kullanmak, çok şık bunu yazmak kolaylaştırır:
import httplib
import ssl
from functools import partial
class fake_ssl:
wrap_socket = partial(ssl.wrap_socket, ssl_version=ssl.PROTOCOL_SSLv3)
httplib.ssl = fake_ssl
ben yöntemi 3 denenmiş ve artık atma "SSL rutinleri: SSL3_GET_RECORD: Yanlış sürüm numarası" ama "openssl s_client -Donanımı ev sahibi tarafından sunucu protokolü kontrol edin: port grep Protokolü "iade ediyor" Protokol: SSLv3 "! Diğer yöntemler ve lyk deneyeceğim .. – Peter
şimdi 3 yöntem hata denedi (tüm yöntemler için) "SSL rutinleri: SSL3_GET_RECORD: yanlış sürüm numarası" – Peter
Yukarıdaki yöntemlerden hangisi olursa olsun, sonuç aynı olmalıdır. kullanın. Farklı protokol kurallarını denediniz mi? Aldığınız hatayı nasıl üreteceğinizden emin değilim. Bir SSLv3 sunucusuna bir TLSv1 istemcisi kullanarak bağlanırken sadece aynı hatayı alıyorum ... – mata