Fall back on SSLv3 if TLSv1 fails
This is so dirty :(
This commit is contained in:
parent
757070e7cd
commit
085c784691
1 changed files with 26 additions and 4 deletions
|
|
@ -34,6 +34,8 @@ import re
|
||||||
import tempfile
|
import tempfile
|
||||||
from threading import RLock
|
from threading import RLock
|
||||||
import ssl
|
import ssl
|
||||||
|
import httplib
|
||||||
|
import socket
|
||||||
import hashlib
|
import hashlib
|
||||||
import time
|
import time
|
||||||
import urllib
|
import urllib
|
||||||
|
|
@ -689,9 +691,9 @@ class BaseBrowser(StandardBrowser):
|
||||||
if self._cookie:
|
if self._cookie:
|
||||||
self._cookie.save()
|
self._cookie.save()
|
||||||
|
|
||||||
|
|
||||||
def mywrap_socket(sock, *args, **kwargs):
|
def mywrap_socket(sock, *args, **kwargs):
|
||||||
kwargs['do_handshake_on_connect']=False
|
kwargs['do_handshake_on_connect'] = False
|
||||||
kwargs['ssl_version'] = kwargs.get('ssl_version', ssl.PROTOCOL_TLSv1)
|
|
||||||
sock = ssl.wrap_socketold(sock, *args, **kwargs)
|
sock = ssl.wrap_socketold(sock, *args, **kwargs)
|
||||||
sock.settimeout(StandardBrowser.DEFAULT_TIMEOUT)
|
sock.settimeout(StandardBrowser.DEFAULT_TIMEOUT)
|
||||||
try:
|
try:
|
||||||
|
|
@ -702,5 +704,25 @@ def mywrap_socket(sock, *args, **kwargs):
|
||||||
sock.do_handshake()
|
sock.do_handshake()
|
||||||
return sock
|
return sock
|
||||||
|
|
||||||
ssl.wrap_socketold=ssl.wrap_socket
|
|
||||||
ssl.wrap_socket=mywrap_socket
|
ssl.wrap_socketold = ssl.wrap_socket
|
||||||
|
ssl.wrap_socket = mywrap_socket
|
||||||
|
|
||||||
|
|
||||||
|
class HTTPSConnection2(httplib.HTTPSConnection):
|
||||||
|
def _create_connection(self):
|
||||||
|
sock = socket.create_connection((self.host, self.port), self.timeout)
|
||||||
|
if self._tunnel_host:
|
||||||
|
self._tunnel()
|
||||||
|
return sock
|
||||||
|
|
||||||
|
def connect(self):
|
||||||
|
sock = self._create_connection()
|
||||||
|
try:
|
||||||
|
self.sock = ssl.wrap_socket(sock, self.key_file, self.cert_file, ssl_version=ssl.PROTOCOL_TLSv1)
|
||||||
|
except ssl.SSLError:
|
||||||
|
sock.close()
|
||||||
|
sock = self._create_connection()
|
||||||
|
self.sock = ssl.wrap_socket(sock, self.key_file, self.cert_file, ssl_version=ssl.PROTOCOL_SSLv3)
|
||||||
|
|
||||||
|
httplib.HTTPSConnection = HTTPSConnection2
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue