【问题标题】:TLS error occured while trying to connect MQTT client over Secure TLS尝试通过安全 TLS 连接 MQTT 客户端时发生 TLS 错误
【发布时间】:2017-02-07 03:22:36
【问题描述】:

实际上,我想使用 Arduino IDE 使用 ESP8266 通过 TLS 实现 MQTT SECURE Client,并想检查是否首先在 CMD 线上工作。但它似乎不适用于 CMD 行本身。

如果是错误或缺少任何配置,请告诉我。我需要尽快修复它。

我关注了https://mosquitto.org/man/mosquitto-tls-7.html 网页 生成证书颁发机构证书和密钥。

openssl req -new -x509 -days 1095 -extensions v3_ca -keyout ca.key -out ca.crt

生成客户端密钥。

openssl genrsa -des3 -out client.key 2048

生成证书签名请求以发送给 CA。

openssl req -out client.csr -key client.key -new

将 CSR 发送给 CA,或使用您的 CA 密钥对其进行签名:

openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt -days 1095

//local.conf 文件

bind_address 127.0.0.1

port 8883

tls_version tlsv1

cafile C:\OpenSSL-Win64\bin\ca.crt

certfile C:\OpenSSL-Win64\bin\client.crt

keyfile C:\OpenSSL-Win64\bin\client.key

require_certificate true

//一个CMD窗口

mosquitto_sub -h 127.0.0.1 -p 8883 -q 1 -t sensor/temp --cafile C:/OpenSSL-Win64/bin/ca.crt

//第二个CMD窗口

mosquitto -c local.conf -v

我收到以下错误:

错误:发生 TLS 错误 &

C:\Program Files (x86)\mosquitto>mosquitto -c mosquitto_m2mqtt.conf -v
1486436916: mosquitto version 1.4.10 (build date 24/08/2016 21:03:24.73) starting

1486436916: Config loaded from mosquitto_m2mqtt.conf.

1486436916: Opening ipv6 listen socket on port 8883.

1486436916: Opening ipv4 listen socket on port 8883.

Enter PEM pass phrase:

1486436943: New connection from 127.0.0.1 on port 8883.

1486436943: OpenSSL Error: error:1409442E:SSL routines:ssl3_read_bytes:tlsv1 alert protocol version

1486436943: OpenSSL Error: error:140940E5:SSL routines:ssl3_read_bytes:ssl handshake failure

1486436943: Socket error on client <unknown>, disconnecting.

【问题讨论】:

  • 您正在使用客户端证书/密钥来识别 local.conf 中的服务器,而不是您链接到的文档中描述的服务器证书/密钥。
  • 我不明白。您的意思是在侦听传入客户端时,我们使用的 local.conf 文件应该具有与 ESP8266 代码中使用的客户端证书/密钥文件不同的服务器证书/密钥文件?从通用 ca.crt 文件创建的客户端和服务器证书/密钥文件??
  • 但是我得到了同样的“证书验证失败”错误,即使现在我正在监听从现有 ca.crt 和 ca.key 生成的 server.crt 和 server.key 文件。
  • @JyotiRajSharma 你能解决这个问题吗?

标签: mqtt publish-subscribe


【解决方案1】:

require_certificate true 标志意味着代理将拒绝不提供自己的证书作为身份证明的客户。

删除此选项,您的客户端应该会连接。如果要进行相互身份验证,则还必须生成客户端证书并配置客户端以将其与连接一起发送

【讨论】:

  • 请参阅nofurtherquestions.wordpress.com/2016/03/14/…,了解如何使用客户端证书进行操作。
  • 从 ESP8266,如果我删除“require_certificate true”标志,我可以连接到代理。但是,如果我启用它,它会给出“routines:ssl3_get_client_certificate:certificate verify failed”。请帮助修复它,我生成了正确的“certificates.h”,其中包含客户端证书和密钥(使用您提供的链接)。我尝试使用 MQTT.fx 1.0 CLIENT 并观察到确切的问题(即只要 require_certificate 为假,它就可以工作)。我还有一个问题-“我们是否也必须添加 espClient.loadCertificate(ca) 吗??”。我觉得这条线也是
  • 提出一个新问题来处理 ESP8266 错误,包括您在 ESP8266 上使用的 src 代码。如果需要,您可以包含指向此问题的链接以获取上下文
  • 我觉得这不是因为 ESP8266,因为当我尝试使用带有 ca.crt、client.bin.crt 和 client.bin.key 的 MQTT.fx 1.0 CLIENT 并观察到确切的问题(即只要 require_certificate 为假就可以工作)。在我看来,这很可能是因为 MQTT 方面。即使这样,我也应该提出一个单独的问题吗??
猜你喜欢
  • 1970-01-01
  • 2022-01-02
  • 2021-09-22
  • 2020-11-07
  • 2020-03-20
  • 2017-02-22
  • 2012-09-12
  • 2021-08-30
  • 2020-06-13
相关资源
最近更新 更多