我在具有 WS 配置的 localhost 或本地 docker 上有一个 nats 服务器。 Nats 需要 tls 用于 websocket。我创建了一个证书和密钥。但是,在连接时它会抛出错误 TLS handshake error from 127.0.0.1:61732: remote error: tls: unknown certificate authority
。我该怎么办?
答案 0 :(得分:0)
对于测试环境,你需要像这样创建一个 conf 文件:
# ws.conf
websocket {
# Specify a host and port to listen for websocket connections
#
# listen: "host:port"
# It can also be configured with individual parameters,
# namely host and port.
#
# host: "hostname"
port: 443
# For test environments, you can disable the need for TLS
# by explicitly setting this option to `true`
#
no_tls: true
}
我在这里称其为 ws.conf,但您可以随意命名。请注意,我明确地将 no_tls
设置为 true 并且没有通过任何证书。
之后你需要创建一个Dockerfile,因为nats镜像的入口点是nats可执行文件,我们可以这样做:
FROM nats:alpine
COPY ws.conf ws.conf
CMD [ "-c", "ws.conf" ]
注意在 CMD 中我传递了一些参数,让我解释一下:
-c
是 nats 服务器的 --config
选项的快捷方式ws.conf
是我们创建的配置文件现在您可以构建并运行此映像。或者你可以创建一个 docker-compose 来为你做这件事,就像这样:
version: "3.8"
services:
nats-ws:
dockerfile: Dockerfile
ports:
- 443:443
- 4222:4222
创建 ws.conf 后,以 docker 方式的参数启动 nats。
nats-server -c path/to/ws.conf
就是这样,如果一切正常,您将在 nats 日志/标准输出中看到此消息:
[1] 2021/04/25 18:29:52.854288 [INF] Starting nats-server
[1] 2021/04/25 18:29:52.854402 [INF] Version: 2.2.2
[1] 2021/04/25 18:29:52.854407 [INF] Git: [a5f3aab]
[1] 2021/04/25 18:29:52.854411 [INF] Name: NCXFZRJ6L2PYQM6DND5YRKZA5OMQBQTFGH7ATZULU3US7KBWQDU4RKE3
[1] 2021/04/25 18:29:52.854416 [INF] ID: NCXFZRJ6L2PYQM6DND5YRKZA5OMQBQTFGH7ATZULU3US7KBWQDU4RKE3
[1] 2021/04/25 18:29:52.854421 [INF] Using configuration file: ws.conf
[1] 2021/04/25 18:29:52.858602 [INF] Listening for websocket clients on ws://0.0.0.0:443
[1] 2021/04/25 18:29:52.858643 [WRN] Websocket not configured with TLS. DO NOT USE IN PRODUCTION!
[1] 2021/04/25 18:29:52.859209 [INF] Listening for client connections on 0.0.0.0:4222
[1] 2021/04/25 18:29:52.859696 [INF] Server is ready