|
51 | 51 |
|
52 | 52 | def patch(thread=True): |
53 | 53 | eventlet.monkey_patch(thread=thread) |
54 | | - if thread: |
55 | | - # Monkey patch the original current_thread to use the up-to-date _active |
56 | | - # global variable. See https://bugs.launchpad.net/bugs/1863021 and |
57 | | - # https://github.com/eventlet/eventlet/issues/592 |
58 | | - import __original_module_threading as orig_threading # noqa |
59 | | - import threading # noqa |
60 | | - orig_threading.current_thread.__globals__['_active'] = threading._active |
61 | 54 |
|
62 | 55 | def spawn(*args, **kwargs): |
63 | 56 | raise_error = kwargs.pop('raise_error', False) |
@@ -137,24 +130,20 @@ def __init__(self, listen_info, handle=None, backlog=None, |
137 | 130 |
|
138 | 131 | if ssl_args: |
139 | 132 | ssl_args.setdefault('server_side', True) |
140 | | - if 'ssl_ctx' in ssl_args: |
141 | | - ctx = ssl_args.pop('ssl_ctx') |
142 | | - ctx.load_cert_chain(ssl_args.pop('certfile'), |
143 | | - ssl_args.pop('keyfile')) |
144 | | - if 'cert_reqs' in ssl_args: |
145 | | - ctx.verify_mode = ssl_args.pop('cert_reqs') |
146 | | - if 'ca_certs' in ssl_args: |
147 | | - ctx.load_verify_locations(ssl_args.pop('ca_certs')) |
148 | | - |
149 | | - def wrap_and_handle_ctx(sock, addr): |
150 | | - handle(ctx.wrap_socket(sock, **ssl_args), addr) |
151 | | - |
152 | | - self.handle = wrap_and_handle_ctx |
153 | | - else: |
154 | | - def wrap_and_handle_ssl(sock, addr): |
155 | | - handle(ssl.wrap_socket(sock, **ssl_args), addr) |
156 | | - |
157 | | - self.handle = wrap_and_handle_ssl |
| 133 | + if 'ssl_ctx' not in ssl_args: |
| 134 | + raise RuntimeError("no SSLContext ssl_ctx in ssl_args") |
| 135 | + ctx = ssl_args.pop('ssl_ctx') |
| 136 | + ctx.load_cert_chain(ssl_args.pop('certfile'), |
| 137 | + ssl_args.pop('keyfile')) |
| 138 | + if 'cert_reqs' in ssl_args: |
| 139 | + ctx.verify_mode = ssl_args.pop('cert_reqs') |
| 140 | + if 'ca_certs' in ssl_args: |
| 141 | + ctx.load_verify_locations(ssl_args.pop('ca_certs')) |
| 142 | + |
| 143 | + def wrap_and_handle_ctx(sock, addr): |
| 144 | + handle(ctx.wrap_socket(sock, **ssl_args), addr) |
| 145 | + |
| 146 | + self.handle = wrap_and_handle_ctx |
158 | 147 | else: |
159 | 148 | self.handle = handle |
160 | 149 |
|
@@ -182,7 +171,14 @@ def connect(self): |
182 | 171 | return None |
183 | 172 |
|
184 | 173 | if self.ssl_args: |
185 | | - client = ssl.wrap_socket(client, **self.ssl_args) |
| 174 | + ctx = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT) |
| 175 | + ctx.load_cert_chain(self.ssl_args.pop('certfile'), |
| 176 | + self.ssl_args.pop('keyfile')) |
| 177 | + if 'cert_reqs' in self.ssl_args: |
| 178 | + ctx.verify_mode = self.ssl_args.pop('cert_reqs') |
| 179 | + if 'ca_certs' in self.ssl_args: |
| 180 | + ctx.load_verify_location(self.ssl_args.pop('ca_certs')) |
| 181 | + client = ctx.wrap_socket(client, **self.ssl_args) |
186 | 182 |
|
187 | 183 | return client |
188 | 184 |
|
|
0 commit comments