Thanks for working on this. On Sat, 02 Feb 2019 00:39:34 +0900, alex wrote: > > Signed-off-by: alex <atoptsog...@suse.com> > --- > ryu/controller/controller.py | 6 ++---- > ryu/lib/hub.py | 24 +++++++++++++++++++++--- > 2 files changed, 23 insertions(+), 7 deletions(-) > > diff --git a/ryu/controller/controller.py b/ryu/controller/controller.py > index 62135339..f316f0bc 100644 > --- a/ryu/controller/controller.py > +++ b/ryu/controller/controller.py > @@ -172,15 +172,13 @@ class OpenFlowController(object): > keyfile=CONF.ctl_privkey, > certfile=CONF.ctl_cert, > cert_reqs=ssl.CERT_REQUIRED, > - ca_certs=CONF.ca_certs, > - ssl_version=ssl.PROTOCOL_TLSv1) > + ca_certs=CONF.ca_certs)
I think ssl_version should be set here so that any other potential StreamServer user can override. Also, if we add a config option to restrict unsafe TLS versions in future, the logic should be here. > else: > server = StreamServer((CONF.ofp_listen_host, > ofp_ssl_listen_port), > datapath_connection_factory, > keyfile=CONF.ctl_privkey, > - certfile=CONF.ctl_cert, > - ssl_version=ssl.PROTOCOL_TLSv1) > + certfile=CONF.ctl_cert) ditto > else: > server = StreamServer((CONF.ofp_listen_host, > ofp_tcp_listen_port), > diff --git a/ryu/lib/hub.py b/ryu/lib/hub.py > index bd15fc89..18ba6e4a 100644 > --- a/ryu/lib/hub.py > +++ b/ryu/lib/hub.py > @@ -42,6 +42,7 @@ if HUB_TYPE == 'eventlet': > import ssl > import socket > import traceback > + import sys > > getcurrent = eventlet.getcurrent > patch = eventlet.monkey_patch > @@ -127,9 +128,26 @@ if HUB_TYPE == 'eventlet': > > if ssl_args: > def wrap_and_handle(sock, addr): > - ssl_args.setdefault('server_side', True) > - handle(ssl.wrap_socket(sock, **ssl_args), addr) > - > + if sys.version_info < (2,7,9): > + #anything less than python 2.7.9 supports only TLSv1 > or less, thus we choose TLSv1 > + ssl_args.setdefault('server_side', True) > + ssl_args.update(ssl_version = 'PROTOCOL_TLSv1') > + handle(ssl.wrap_socket(sock, **ssl_args), addr) > + else: > + # from 2.7.9 and versions 3.4+ ssl context creation > is supported. Protocol_TLS from 2.7.13 and from 3.5.3 replaced SSLv23. > Functionality is similar. > + if hasattr(ssl, 'PROTOCOL_TLS'): > + p = 'PROTOCOL_TLS' > + else: > + p = 'PROTOCOL_SSLv23' > + > + ctx = ssl.SSLContext(getattr(ssl, p)) > + ctx.load_cert_chain(ssl_args['certfile'], > ssl_args['keyfile']) > + ctx.options |= ssl.OP_NO_SSLv3 | ssl.OP_NO_SSLv2 > #Restrict non-safe versions > + if 'cert_reqs' in ssl_args: > + #if --ca-certs is specified > + ctx.verify_mode = ssl.CERT_REQUIRED > + ctx.load_verify_locations(ssl_args["ca_certs"]) > + handle(ctx.wrap_socket(sock,server_side=True), addr) > > self.handle = wrap_and_handle > else: > self.handle = handle > -- > 2.16.4 > > > > _______________________________________________ > Ryu-devel mailing list > Ryu-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/ryu-devel > _______________________________________________ Ryu-devel mailing list Ryu-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/ryu-devel