将 MQTT 数据包装在 SSL 证书中,同时将其发送到 MQTT 代理
Posted
技术标签:
【中文标题】将 MQTT 数据包装在 SSL 证书中,同时将其发送到 MQTT 代理【英文标题】:Wrapping MQTT data in SSL certificate while sending it to MQTT broker 【发布时间】:2014-07-08 17:09:56 【问题描述】:我正在使用在 RPI 上运行的 MQTT python 客户端。我不是来自 Web 相关领域的人,但我需要实现 SSL 安全性,同时我将一些数据从我的 python 客户端发送到开源 MQTT 代理。
我在 python 中找到了certain package,用于在打开套接字时封装 SSL 安全性。我是python的新手。所以我想了解它是如何工作的,以及如果我们想实现 SSL 安全性我们需要做什么。This question 解释了很多关于 SSl 以及它是如何发生的。但是如果我需要用 python 来实现它,我将如何在我的 RPI 上本地安装 SSL 证书(我想要一些开源 SSL 证书,因为我现在作为本地项目这样做。)
我使用下面的 python 代码打开一个 SSL 套接字,然后通过 443 端口连接到 www.google.com。
import socket
import ssl
s_ = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s = ssl.wrap_socket(s_, ca_certs='/usr/local/lib/python2.7/dist-packages/requests/cacert.pem',cert_reqs=ssl.CERT_REQUIRED)
s.connect(('www.google.com', 443))
s.write("""GET / HTTP/1.1\r
Host: www.google.com\r\n\r\n""")
d=s.read()
print(d)
s.close()
我在控制台上得到这个输出
HTTP/1.1 302 Found
Cache-Control: private
Content-Type: text/html; charset=UTF-8
Location: https://www.google.co.in/?gfe_rd=cr&ei=PkW8U8SsPOqK8Qfwt4DYAw
Content-Length: 262
Date: Tue, 08 Jul 2014 19:23:42 GMT
Server: GFE/2.0
Alternate-Protocol: 443:quic
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>302 Moved</TITLE></HEAD><BODY>
<H1>302 Moved</H1>
The document has moved
<A HREF="https://www.google.co.in/?gfe_rd=cr&ei=PkW8U8SsPOqK8Qfwt4DYAw">here</A>.
</BODY></HTML>
但我仍然想问或了解(我从可用资源中研究的内容)打开 SSL 套接字的人需要拥有 SSL 证书,我们正在执行将 SSL 证书发送到服务器或这是由 openssl 库完成的。我还想确认 openssl 提供了 openssl 正在使用并发送到服务器的 SSL 证书?
This link 有助于了解 SSL 安全的基础知识。
【问题讨论】:
【参考方案1】:您能否只使用Paho Python client 库来处理问题的MQTT 和SSL 方面?
订阅 test.mosquitto.org 测试服务器上的主题并打印接收到的消息的简单示例,支持 SSL:
import paho.mqtt.client as paho
def on_message(clnt, userdata, msg):
print(msg.topic+" "+str(msg.payload))
mqttc = paho.Client()
mqttc.on_message = on_message
mqttc.tls_set("mosquitto.org.crt") # http://test.mosquitto.org/ssl/mosquitto.org.crt
mqttc.connect("test.mosquitto.org", 8883)
mqttc.subscribe("bbc/#")
mqttc.loop_forever()
【讨论】:
以上是关于将 MQTT 数据包装在 SSL 证书中,同时将其发送到 MQTT 代理的主要内容,如果未能解决你的问题,请参考以下文章