我正在构建一个mqtt服务器。我在服务器上使用带有TLS的mosquitto作为经纪人。
我遇到了这个问题:
我通过generate-CA.sh
ca.crt
,服务器证书,服务器密钥,客户端证书,客户端密钥
我可以连接代理并通过MQTT.fx发布和订阅msg,但是当我尝试使用mosquitto_sub连接代理时,它在客户端PC(ubuntu)上同时出现Error:A TLS error occurred
,同时,服务器打印
New connection from xx.xx.xx.xx on port 8883.
Openssl Error: error:14094416:SSL routines:SSL3_READ_BYTES:sslv3 alert certificate unknown
Openssl Error: error:140940E5:SSL routines:SSL3_READ_BYTES:ssl handshake failure
我使用的命令是:
mosquitto_sub -p 8883 -i test -t mqtt -h 150.xx.xx.xx --cafile ca.crt --cert xx.crt --key xx.key
其中,150.xx.xx.xx
是我的经纪人的IP。
当我使用上面的命令选项--insecure
时,问题就消失了。
所以我认为这是导致这个问题的服务器主机名。
在mosquitto_sub命令中,选项-h
指定主机名,但我需要使用此参数指向我的代理的IP地址,那么我如何指定服务器的主机名?
答案 0 :(得分:0)
旧问题,但这也许可以帮助某人:
如果--insecure
选项可以使用,则说明您存在证书问题。您在签署证书时设置了什么主机名? openssl s_client -showcerts -connect 150.xx.xx.xx:8883
说什么?
相关:尽管使用 public IP地址(请参阅Is it possible to have SSL certificate for IP address, not domain name?)的服务器应该可以使用SSL证书,但我建议不要并仅使用DNS,即使这意味着server.localdomain
和/或在必要时编辑/etc/hosts
文件也是如此。