簡體   English   中英

將 Paho 用於 MQTT TLS 時出現錯誤 [SSL] PEM lib (_ssl.c:4022)

[英]Error [SSL] PEM lib (_ssl.c:4022) when using Paho for MQTT TLS

我正在嘗試使用 Paho 庫連接我的 MQTT 代理。 但現在我堅持這個錯誤。 我的代碼如下:

import os
import paho.mqtt.publish as publish
import paho.mqtt.client as mqtt
import ssl
from configparser import ConfigParser
.....
    try:
        publishInfo = {
            "parking": "test"
        }
        config = ConfigParser()
        config.read('config.ini')
        ipAddressMQTT = config['MQTT']['ipaddress']
        port = config['MQTT']['port']
        auth = {
            'username': config['MQTT']['username'],
            'password': config['MQTT']['password']
        }
        tls = {
            'ca_certs': config['MQTT']['cakeypath'],
            'certfile': config['MQTT']['certKeyPath'],
            'keyfile': config['MQTT']['clientkeypath'],
            'tls_version': ssl.PROTOCOL_TLSv1
        }
        
        publish.single(topic='parkingStatus', payload=publishInfo, retain=True, hostname=ipAddressMQTT, port=port, keepalive=60, auth=auth, tls=tls, protocol=mqtt.MQTTv311, transport='tcp')
    except Exception as e:
        self.showMessage(QMessageBox.Critical, "Error...", "Error "+str(e), "Error ")

我的 config.ini 文件看起來像:

[MQTT]
ipaddress = 172.18.0.3
port = 8883
username = parking
password = public
cakeypath = /home/atn/Documents/IUK/Abschlussarbeit/emqx_mqtt_cert/ca.pem
clientkeypath = /home/atn/Documents/IUK/Abschlussarbeit/emqx_mqtt_cert/parkingspot.pem
certkeypath = /home/atn/Documents/IUK/Abschlussarbeit/emqx_mqtt_cert/parkingspot.csr

[Geofence]
ipaddress = 172.18.0.4
port = 9851

證書是使用以下命令生成的:

openssl genrsa -out parkingspot.key 2048
openssl req -new -key parkingspot.key -out parkingspot.csr -subj "/C=DE/ST=NRW/L=Dortmund/O=EMQX/CN=client"
openssl x509 -req -days 3650 -in parkingspot.csr -CA ca.pem -CAkey ca.key -CAcreateserial -out parkingspot.pem

嘗試了幾個小時后,我決定問你們。 請幫我一把。

在您的配置文件中,您有:

certkeypath = /home/atn/Documents/IUK/Abschlussarbeit/emqx_mqtt_cert/parkingspot.csr

csr文件通常是證書簽名請求(您發送給 CA 要求頒發證書的請求)。 我希望這里使用的文件具有.key擴展名(這確實假設您在創建證書時使用了標准擴展名)。

更多信息可以在這個問題的答案中找到。

我會根據字段名稱(充其量是令人困惑的)猜測值應該是

cakeypath = /.../ca.pem
clientkeypath = /.../parkingspot.key
certkeypath = /.../parkingspot.pem

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM