使用Mosquitto客户端测试VerneMQ代理TLS

问题描述 投票:0回答:1

背景

  • 我设置并配置了VerneMQ Broker。 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:

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 我从服务器本地主机执行此命令,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 Subscription

[当我尝试使用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 反复。我在做什么错?

docker ssl docker-compose mosquitto mqtt-vernemq
1个回答
0
投票

mosquitto_sub手册页:

加密的连接

mosquitto_sub支持TLS加密连接。强烈建议您使用加密连接进行更多操作比最基本的设置。

要使用x509证书时启用TLS连接,--cafile或--capath必须作为选项提供。

要使用mosquitto_sub命令,您必须提供带有受信任CA证书的文件或包含受信任CA证书集合的目录

© www.soinside.com 2019 - 2024. All rights reserved.