我一直拼命地试图让我的MQTT客户端连接到我的MQTT代理,该代理使用来自CA(Letsencrypt)的证书进行设置。
为了能够获得CA证书,我使用了letsencrypt python命令( https://pypi.python.org/pypi/letsencrypt/0.4.1 )
./letsencrypt-auto certonly -d www.myserver.com
这给了我:
lrwxrwxrwx 1 root root 41 Mar 6 23:50 cert.pem lrwxrwxrwx 1 root root 42 Mar 6 23:50 chain.pem lrwxrwxrwx 1 root root 46 Mar 6 23:50 fullchain.pem lrwxrwxrwx 1 root root 44 Mar 6 23:50 privkey.pem
这些文件我也用于我的网站上的SSLencryption(apache2),这似乎在我的conf文件中工作得很好:
SSLCertificateFile /etc/letsencrypt/live/www.server.com/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/www.server.com/privkey.pem Include /etc/letsencrypt/options-ssl-apache.conf
而当我的networking服务器,我看到的SSL图标,它的工作原理。
现在,当我把这些文件放在我的/etc/mosquitto/mosquitto.conf中时:
cafile /etc/letsencrypt/live/www.myserver.com/fullchain.pem certfile /etc/letsencrypt/live/www.myserver.com/cert.pem keyfile /etc/letsencrypt/live/www.myserver.com/privkey.pem
我能够开始经纪人,1.4.8罚款:
[ ok ] mosquitto is running.
并从日志:
1457462631: mosquitto version 1.4.8 (build date Sun, 14 Feb 2016 15:06:55 +0000) starting
但是,当我尝试订阅testing主题时,从客户端使用以下命令进行testing:
mosquitto_sub version 1.4.8 running on libmosquitto 1.4.8.
运行命令:
root@titan:~# mosquitto_pub -h www.myserver.com -p 8883 -t test --cafile /etc/letsencrypt/live/www.myserver.com/fullchain.pem
它在我的命令行中提到:
Unable to connect (A TLS error occurred.).
对mosquitto.log文件里面一个更好奇的样子,告诉我:
1463562141: Socket error on client <unknown>, disconnecting. 1463562154: New connection from XXXX on port 8889.
这让我惊讶的小信息。 我从网站上使用的python脚本给了我更多的信息。
Python脚本:
import os, subprocess, socket, sys, time, struct import * import paho.mqtt.client as mqtt dir = "/etc/letsencrypt/live/www.server.com/" def on_connect(mqttc, obj, flags, rc): if rc != 0: exit(rc) else: mqttc.disconnect() def on_disconnect(mqttc, obj, rc): obj = rc run = -1 mqttc = mqtt.Client("08-ssl-connect-crt-auth", run) mqttc.tls_set(dir + "fullchain.pem", dir + "cert.pem", dir + "privkey.pem") mqttc.on_connect = on_connect mqttc.on_disconnect = on_disconnect mqttc.connect("www.server.com", 8889) while run == -1: mqttc.loop() exit(run)
这回报我:
ssl.SSLError: [Errno 1] _ssl.c:504: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
我在这里不知所措 这对我来说没有意义! 任何帮助表示赞赏!
ssl.SSLError: [Errno 1] _ssl.c:504: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
这表明您连接的主机名与证书中的主机名不匹配。
随着mosquitto_pub尝试使用--insecure选项。
或者,您没有获得正确的CA证书链,因此服务器证书无法由客户端validation。
我能够使用Java完成这个。 也尝试在MacBook上使用MQTTBox应用程序来查看是否可以连接。
检查这个MQTTBoxconfiguration: