Secure websockets where a security object has not been provided fails with an opaque error
- Dominant language
- Python
- Stars
- 1.7k
- Forks
- 778
- Avg merge
- 2h 50m
- Merged PRs (30d)
- 3
Description
**What happened**:
```bash
$ dask-worker wss://localhost:443
distributed.dask_worker - INFO - End worker
Traceback (most recent call last):
File "/Users/jtomlinson/miniconda3/envs/dask/bin/dask-worker", line 33, in
sys.exit(load_entry_point('distributed', 'console_scripts', 'dask-worker')())
File "/Users/jtomlinson/Projects/dask/distributed/distributed/cli/dask_worker.py", line 462, in go
main()
File "/Users/jtomlinson/miniconda3/envs/dask/lib/python3.8/site-packages/click/core.py", line 1137, in __call__
return self.main(*args, **kwargs)
File "/Users/jtomlinson/miniconda3/envs/dask/lib/python3.8/site-packages/click/core.py", line 1062, in main
rv = self.invoke(ctx)
File "/Users/jtomlinson/miniconda3/envs/dask/lib/python3.8/site-packages/click/core.py", line 1404, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/Users/jtomlinson/miniconda3/envs/dask/lib/python3.8/site-packages/click/core.py", line 763, in invoke
return __callback(*args, **kwargs)
File "/Users/jtomlinson/Projects/dask/distributed/distributed/cli/dask_worker.py", line 448, in main
loop.run_sync(run)
File "/Users/jtomlinson/miniconda3/envs/dask/lib/python3.8/site-packages/tornado/ioloop.py", line 530, in run_sync
return future_cell[0].result()
File "/Users/jtomlinson/Projects/dask/distributed/distributed/cli/dask_worker.py", line 442, in run
await asyncio.gather(*nannies)
File "/Users/jtomlinson/miniconda3/envs/dask/lib/python3.8/asyncio/tasks.py", line 695, in _wrap_awaitable
return (yield from awaitable.__await__())
File "/Users/jtomlinson/Projects/dask/distributed/distributed/core.py", line 283, in _
await self.start()
File "/Users/jtomlinson/Projects/dask/distributed/distributed/nanny.py", line 275, in start
await self.listen(
File "/Users/jtomlinson/Projects/dask/distributed/distributed/core.py", line 401, in listen
listener = await listen(
File "/Users/jtomlinson/Projects/dask/distributed/distributed/comm/core.py", line 361, in listen
return backend.get_listener(loc, handle_comm, deserialize, **kwargs)
File "/Users/jtomlinson/Projects/dask/distributed/distributed/comm/tcp.py", line 564, in get_listener
return self._listener_class(loc, handle_comm, deserialize, **connection_args)
File "/Users/jtomlinson/Projects/dask/distributed/distributed/comm/ws.py", line 287, in __init__
self.server_args = self._get_server_args(**connection_args)
File "/Users/jtomlinson/Projects/dask/distributed/distributed/comm/ws.py", line 361, in _get_server_args
ctx = _expect_tls_context(connection_args)
File "/Users/jtomlinson/Projects/dask/distributed/distributed/comm/tcp.py", line 347, in _expect_tls_context
raise TypeError(
TypeError: TLS expects a `ssl_context` argument of type ssl.SSLContext (perhaps check your TLS configuration?) Instead got None
```
**What you expected to happen**:
Secure websockets requires certs to be configured either in your config or via the `--tls-ca-file`/`--tls-cert`/`--tls-key` flags. So an error here makes sense, but it is not very clear what the user needs to do.
It would be great to catch this and provide more useful error message.
cc @marcosmoyano
**Environment**:
- Dask version: 2021.06.2
- Python version: 3.8
- Operating System: macos
- Install method (conda, pip, source): source
Contributor guide
Assessment
This issue has not been assessed yet.