A verificação de certificados MQTT falha

1

Estou tentando desesperadamente fazer com que meus clientes MQTT se conectem ao meu broker MQTT, que é configurado com um certificado de uma CA (Letsencrypt).

Para conseguir o certificado de CA, usei o comando letsencrypt python ( link )

./letsencrypt-auto certonly -d www.myserver.com

Isso me deu:

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

Esses arquivos também estão sendo usados para a criptografia SSL no meu site (apache2), que parece funcionar bem no meu arquivo 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

E quando estou no meu servidor, vejo o ícone SSL e ele funciona.

Agora, quando eu coloco esses arquivos dentro do meu /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

E eu pude iniciar o broker, v1.4.8 bem:

[ ok ] mosquitto is running.

e do log:

1457462631: mosquitto version 1.4.8 (build date Sun, 14 Feb 2016 15:06:55 +0000) starting

No entanto, quando tento assinar o tópico de teste, testo usando este comando do cliente:

mosquitto_sub version 1.4.8 running on libmosquitto 1.4.8.

Comando de execução:

root@titan:~# mosquitto_pub -h www.myserver.com -p 8883 -t test --cafile /etc/letsencrypt/live/www.myserver.com/fullchain.pem

Ele menciona na minha linha de comando:

Unable to connect (A TLS error occurred.).

Um olhar mais curioso dentro do arquivo mosquitto.log me revela:

1463562141: Socket error on client <unknown>, disconnecting.
1463562154: New connection from X.X.X.X on port 8889.

O que me dá pouca informação surpreendente. Um script python que eu uso em um site me fornece um pouco mais de informações;

Script em 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)

E isso me retorna:

ssl.SSLError: [Errno 1] _ssl.c:504: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

Eu estou perdido aqui. Isto não faz nenhum sentido para mim! Qualquer ajuda é apreciada!

    
por user5740843 18.05.2016 / 11:11

2 respostas

2
ssl.SSLError: [Errno 1] _ssl.c:504: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

Isso sugere que o nome do host com o qual você está se conectando não corresponde ao nome do host no certificado.

Com mosquitto_pub tente usar a opção --insecure .

Como alternativa, você não tem a cadeia correta de certificados de CA e, portanto, o certificado do servidor não pode ser verificado pelo cliente.

    
por 18.05.2016 / 17:49
0

Consegui concluir isso usando o Java. Além disso, tente usar o aplicativo MQTTBox no MacBook para ver se você consegue se conectar.

Verifique esta configuração do MQTTBox:

    
por 13.05.2017 / 14:13