diff --git a/setup.py b/setup.py index 9e5d70927f..b5e4d44e4d 100644 --- a/setup.py +++ b/setup.py @@ -66,7 +66,6 @@ setup(name=PACKAGE, 'MySQL': ['MySQL-python'], 'WebDAV': ['PyWebDAV >= 0.9.8'], 'unoconv': ['unoconv'], - 'SSL': ['pyOpenSSL'], 'graphviz': ['pydot'], 'timezone': ['pytz'], 'simplejson': ['simplejson'], diff --git a/trytond/protocols/jsonrpc.py b/trytond/protocols/jsonrpc.py index ca2bff4a80..512361566c 100644 --- a/trytond/protocols/jsonrpc.py +++ b/trytond/protocols/jsonrpc.py @@ -255,10 +255,8 @@ class SimpleJSONRPCRequestHandler(GZipRequestHandlerMixin, class SecureJSONRPCRequestHandler(SimpleJSONRPCRequestHandler): def setup(self): - self.server.handlers.add(self) - self.connection = SSLSocket(self.request) - self.rfile = socket._fileobject(self.request, "rb", self.rbufsize) - self.wfile = socket._fileobject(self.request, "wb", self.wbufsize) + self.request = SSLSocket(self.request) + SimpleJSONRPCRequestHandler.setup(self) class SimpleJSONRPCServer(SocketServer.TCPServer, @@ -343,8 +341,8 @@ class SecureThreadedJSONRPCServer(SimpleThreadedJSONRPCServer): def __init__(self, server_address, HandlerClass, logRequests=1): SimpleThreadedJSONRPCServer.__init__(self, server_address, HandlerClass, logRequests) - self.socket = SSLSocket(socket.socket(self.address_family, - self.socket_type)) + self.socket = socket.socket(self.address_family, + self.socket_type) self.server_bind() self.server_activate() diff --git a/trytond/protocols/sslsocket.py b/trytond/protocols/sslsocket.py index 5700447e18..c3dcbdbe5c 100644 --- a/trytond/protocols/sslsocket.py +++ b/trytond/protocols/sslsocket.py @@ -3,22 +3,11 @@ from trytond.config import CONFIG -class SSLSocket(object): - - def __init__(self, socket): - if not hasattr(socket, 'sock_shutdown'): - from OpenSSL import SSL - ctx = SSL.Context(SSL.SSLv23_METHOD) - ctx.use_privatekey_file(CONFIG['privatekey']) - ctx.use_certificate_file(CONFIG['certificate']) - self.socket = SSL.Connection(ctx, socket) - else: - self.socket = socket - - def shutdown(self, how): - return self.socket.sock_shutdown(how) - - def __getattr__(self, name): - if name == 'shutdown': - return self.shutdown - return getattr(self.socket, name) +def SSLSocket(socket): + # Let the import error raise only when used + import ssl + return ssl.wrap_socket(socket, + server_side=True, + certfile=CONFIG['certificate'], + keyfile=CONFIG['privatekey'], + ssl_version=ssl.PROTOCOL_SSLv23) diff --git a/trytond/protocols/webdav.py b/trytond/protocols/webdav.py index 2f4d0f6332..d379ceb3b4 100644 --- a/trytond/protocols/webdav.py +++ b/trytond/protocols/webdav.py @@ -88,8 +88,7 @@ class SecureThreadedHTTPServer(BaseThreadedHTTPServer): def __init__(self, server_address, HandlerClass): BaseThreadedHTTPServer.__init__(self, server_address, HandlerClass) - self.socket = SSLSocket(socket.socket(self.address_family, - self.socket_type)) + self.socket = socket.socket(self.address_family, self.socket_type) self.server_bind() self.server_activate() @@ -593,6 +592,5 @@ class WebDAVAuthRequestHandler(WebDAVServer.DAVRequestHandler): class SecureWebDAVAuthRequestHandler(WebDAVAuthRequestHandler): def setup(self): - self.connection = SSLSocket(self.request) - self.rfile = socket._fileobject(self.request, "rb", self.rbufsize) - self.wfile = socket._fileobject(self.request, "wb", self.wbufsize) + self.request = SSLSocket(self.request) + WebDAVAuthRequestHandler.setup(self) diff --git a/trytond/protocols/xmlrpc.py b/trytond/protocols/xmlrpc.py index c6d26dac53..b4ba3b2e5b 100644 --- a/trytond/protocols/xmlrpc.py +++ b/trytond/protocols/xmlrpc.py @@ -179,9 +179,8 @@ class SimpleXMLRPCRequestHandler(GZipRequestHandlerMixin, class SecureXMLRPCRequestHandler(SimpleXMLRPCRequestHandler): def setup(self): - self.connection = SSLSocket(self.request) - self.rfile = socket._fileobject(self.request, "rb", self.rbufsize) - self.wfile = socket._fileobject(self.request, "wb", self.wbufsize) + self.request = SSLSocket(self.request) + SimpleXMLRPCRequestHandler.setup(self) class SimpleThreadedXMLRPCServer(SocketServer.ThreadingMixIn, @@ -228,8 +227,7 @@ class SecureThreadedXMLRPCServer(SimpleThreadedXMLRPCServer): def __init__(self, server_address, HandlerClass, logRequests=1): SimpleThreadedXMLRPCServer.__init__(self, server_address, HandlerClass, logRequests) - self.socket = SSLSocket(socket.socket(self.address_family, - self.socket_type)) + self.socket = socket.socket(self.address_family, self.socket_type) self.server_bind() self.server_activate()