我已经在debian 8上使用过mosquitto + websockets一段时间了,效果很好。现在我想将系统移至预生产阶段,因此我需要开始加密这些通信。
我已尝试按照此博客文章(http://embeddedprog.blogspot.pt/2014/05/tlsssl-communication-via-mqtt.html)中的步骤以及J-P Mens(https://github.com/owntracks/tools)的证书生成脚本手动生成证书
我的" mosquitto.conf"看起来像这样:
allow_anonymous false
allow_duplicate_messages false
autosave_interval 1800
persistence true
persistence_file mosquitto.db
persistence_location /tmp/
connection_messages true
log_timestamp true
#log_dest syslog
#log_type error
#log_type warning
#log_type notice
#log_type information
log_type all
log_type debug
listener 8880
protocol mqtt
listener 8881
protocol websockets
bind_address hi-server
cafile /home/hi/cert/ca.crt
certfile /home/hi/cert/hi.com.crt
keyfile /home/hi/cert/hi.com.key
tls_version tlsv1
#require_certificate false
#
# __ __ ____ ___ _
# | \/ |_ _/ ___| / _ \| |
# | |\/| | | | \___ \| | | | |
# | | | | |_| |___) | |_| | |___
# |_| |_|\__, |____/ \__\_\_____|
# |___/
#
#
#auth_plugin /home/jpm/mosquitto-auth-plug/auth-plug.so
auth_plugin /etc/mosquitto/auth-plug.so
[auth_opt stuff...]
这是mosquitto冗长的输出:
1448802719: mosquitto version 1.4.2 (build date 2015-11-27 23:40:02+0000) starting
1448802719: Config loaded from /etc/mosquitto/mosquitto.conf.
1448802719: |-- *** auth-plug: startup
1448802719: |-- ** Configured order: mysql
1448802719: |-- }}}} MYSQL
1448802719: Opening ipv4 listen socket on port 8880.
1448802719: Opening ipv6 listen socket on port 8880.
1448802719: Opening websockets listen socket on port 8881.
1448802719: New connection from ****** on port 8880.
1448802719: |-- mosquitto_auth_unpwd_check(******)
1448802719: |-- ** checking backend mysql
1448802719: |-- getuser(******) AUTHENTICATED=1 by mysql
1448802719: New client connected from ****** as ****** (c1, k15, u'******').
1448802719: Sending CONNACK to ****** (0, 0)
每当我尝试连接HiveMQ Websockets客户端时,都会超时......
有人可以告诉我如何实现这一目标吗?非常感谢帮助!
谢谢, 佩德罗。
更新:通过导入CA证书设置连接
我已经设法使用Paho MQTT客户端连接到蚊子javascript!我对 mosquitto.conf 进行了一些小改动:
listener 8880
protocol mqtt
listener 8881
protocol websockets
cafile /home/hi/cert/ca.crt
certfile /home/hi/cert/hi.com.crt
keyfile /home/hi/cert/hi.com.key
tls_version tlsv1
#require_certificate false
我现在遇到的问题是,如果我导入 hi.com.crt 文件并手动设置为"始终信任"我只能连接。在钥匙串(OS X)上。由于证书是自签名的并且不受iOS信任,因此我无法使用我的iPhone登录...
默认的mosquitto TLS行为是否不需要来自客户端的证书?
答案 0 :(得分:0)
从评论中听起来像hi-server解析为127.0.0.1/localhost。这意味着配置中的行
bind_address hi-server
告诉mosquitto只监听localhost上的websocket连接而不是任何公共接口。
注释掉这一行并再试一次