Skip to content

Secure websockets where a security object has not been provided fails with an opaque error #5038

@jacobtomlinson

Description

@jacobtomlinson

What happened:

$ 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 <module>
    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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions