背景
- 我设置并配置了 VerneMQ 代理。Broker 在 docker 容器中,我使用docker-compose.yml启动它。这是我的 docker-compose 文件的外观:
version: '3.3'
services:
db:
image: erlio/docker-vernemq
container_name: vernemq1
network_mode: docker_mysql_default
restart: always
environment:
DOCKER_VERNEMQ_ALLOW_ANONYMOUS: 'off'
DOCKER_VERNEMQ_PLUGINS.vmq_diversity: 'on'
DOCKER_VERNEMQ_PLUGINS.vmq_passwd: 'off'
DOCKER_VERNEMQ_PLUGINS.vmq_acl: 'off'
DOCKER_VERNEMQ_VMQ_DIVERSITY.auth_mysql.enabled: 'on'
DOCKER_VERNEMQ_VMQ_DIVERSITY.mysql.host: 'docker_mysql'
DOCKER_VERNEMQ_VMQ_DIVERSITY.mysql.port: '3306'
DOCKER_VERNEMQ_VMQ_DIVERSITY.mysql.user: 'vernemq'
DOCKER_VERNEMQ_VMQ_DIVERSITY.mysql.password: 'vernemq'
DOCKER_VERNEMQ_VMQ_DIVERSITY.mysql.database: 'vernemq_db'
DOCKER_VERNEMQ_VMQ_DIVERSITY.mysql.password_hash_method: 'md5'
DOCKER_VERNEMQ_LISTENER__SSL__CAFILE: '/vernemq/etc/ssl/chain.pem'
DOCKER_VERNEMQ_LISTENER__SSL__CERTFILE: '/vernemq/etc/ssl/cert.pem'
DOCKER_VERNEMQ_LISTENER__SSL__KEYFILE: '/vernemq/etc/ssl/privkey.pem'
DOCKER_VERNEMQ_LISTENER__SSL__DEFAULT: '0.0.0.0:8081'
DOCKER_VERNEMQ_LISTENER__SSL__DEFAULT__USE_IDENTITY_AS_USERNAME: 'off'
DOCKER_VERNEMQ_LISTENER__SSL__DEFAULT__REQUIRE_CERTIFICATE: 'off'
ports:
# <Port exposed> : <Port running inside container>
- '1883:1883'
- '8081:8081'
expose:
# Opens port 1883 on the container
- '1883'
- '8081'
# Where our data will be persisted
volumes:
- /var/lib/
- /home/ubuntu/etc/ssl:/vernemq/etc/ssl
# Name our volume
volumes:
my-db:
- 我正在使用 MySQL 数据库进行身份验证
- 我正在尝试根据提供的文档(https://docs.vernemq.com/configuration/listeners#sample-ssl-config)使用 TLS 证书
- 当我不尝试接受 SSL 连接时(这意味着,当我从docker-compose.yml中删除以下行时),此设置功能齐全:
DOCKER_VERNEMQ_LISTENER__SSL__CAFILE: '/vernemq/etc/ssl/chain.pem'
DOCKER_VERNEMQ_LISTENER__SSL__CERTFILE: '/vernemq/etc/ssl/cert.pem'
DOCKER_VERNEMQ_LISTENER__SSL__KEYFILE: '/vernemq/etc/ssl/privkey.pem'
DOCKER_VERNEMQ_LISTENER__SSL__DEFAULT: '0.0.0.0:8081'
DOCKER_VERNEMQ_LISTENER__SSL__DEFAULT__USE_IDENTITY_AS_USERNAME: 'off'
DOCKER_VERNEMQ_LISTENER__SSL__DEFAULT__REQUIRE_CERTIFICATE: 'off'
- 我使用openssl客户端测试/验证了 TLS 连接:
openssl s_client -connect 172.18.0.4:8081 -key privkey.pem -cert cert.pem
我从服务器 localhost 执行此操作,172.18.0.4 是 vernemq docker 容器的 IP 地址,8081 是预期的 SSL 默认端口(侦听器),并且提供了密钥/证书,这是结果(我想这意味着 TLS 监听器工作):
问题
如何使用 mosquitto 客户端或任何其他 mqtt 客户端对此进行测试?我想在发布和订阅时使用基于 TLS 的连接。
当我不使用 TLS 时,这就是我执行mosquitto_sub(订阅客户端)的方式:
mosquitto_sub -h <ip_address> -p 1883 -t topic -d -u user -P password -i client-id
这是响应: VerneMQ 订阅
当我尝试使用 TLS 时,我添加了 --key 和 --cert 选项以使用私钥和证书:
mosquitto_sub -h <ip_address> -p 1883 -t topic -d -u user -P password -i client-id --key privkey.pem --cert cert.pem
我只是
Client user sending CONNECT
反复得到。我究竟做错了什么?