背景
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 s_client -connect 172.18.0.4:8081 -key privkey.pem -cert cert.pem
I是从服务器本地主机执行这一连接,172.18.0.4是vernemq容器的IP地址,8081是预期的SSL默认端口(侦听器),并提供了key/cert,这就是结果(我认为这意味着TLS侦听器工作):
问题
我如何使用蚊子客户端或任何其他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
。我做错了什么?
发布于 2020-06-16 00:22:42
您需要做的一些事情给您的证书目录授予正确的权限,您需要确保将权限设置给运行verneMQ的用户--在我的例子中--它的"vernemq“现在的下一步是设置对证书文件夹的权限。
chown -R vernemq:vernemq /etc/letsencrypt/live
所有配置文件都应采用.pem格式。
listener.ssl.cafile = /etc/letsencrypt/live/mqtts.domain.com/chain.pem
listener.ssl.certfile = /etc/letsencrypt/live/mqtts.domain.com/cert.pem
listener.ssl.keyfile = /etc/letsencrypt/live/mqtts.domain.com/privkey.pem
客户端必须使用Fullchain.pem连接到服务器,如果您没有由中间服务器颁发的域证书“让我们加密权限X3”,则该中介由“DST根CA X3”交叉签名(来自IdenTrust)。IdenTrust被大多数OSes和应用程序广泛信任,我们将“DST X3”作为根CA。如果您不是在太旧的操作系统上,那么您可以从您的本地机器上使用这个。
cat /etc/ssl/certs/DST_Root_CA_X3.pem /etc/letsencrypt/live/$domain/chain.pem > ca.pem
发布于 2019-12-31 07:25:54
来自mosquitto_sub
男人页面:
加密连接 mosquitto_sub支持TLS加密连接。强烈建议您使用加密连接进行任何比最基本的设置更多的操作。 若要在使用x509证书时启用TLS连接,必须提供其中一个--cafile或-capath作为选项。
-卡帕思 定义包含受信任的PEM编码CA证书的目录的路径。用于启用SSL通信。 为了使证书文件正确工作,证书文件必须以".crt“作为文件的结尾,并且每次添加/删除证书时都必须运行"openssl”。
若要使用mosquitto_sub
命令,必须提供带有受信任CA证书的文件或包含可信CA证书集合的目录。
https://stackoverflow.com/questions/59542764
复制相似问题