由于证书,尝试将 Python 客户端连接到 AWS IoT 时出错
Error trying to connect a Python client to AWS IoT becuase of the certificates
您好,我是这个 AWS 世界的新手,我想做的是将 python 客户端连接到 AWS IoT 服务并发布消息,我正在使用 SDK python及其示例,但是我在认证过程中遇到问题,我已经创建了东西、策略和认证,并且下载了文件,但是在 python 程序中我不知道我是否在写路径以正确的方式添加到此文件,
首先,我尝试写下每个文件的完整路径,但什么也没写,然后我尝试只写“certificados\thefile”,什么也没写。
弹出的错误说错误是我不知道如何编写的路径。
感谢您抽出宝贵的时间,如果这个问题太基础了,我就直接跳进去了。
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: MIT-0
import time as t
import json
import AWSIoTPythonSDK.MQTTLib as AWSIoTPyMQTT
# Define ENDPOINT, CLIENT_ID, PATH_TO_CERT, PATH_TO_KEY, PATH_TO_ROOT, MESSAGE, TOPIC, and RANGE
ENDPOINT = "MYENDPOINT"
CLIENT_ID = "testDevice"
PATH_TO_CERT = "certificados/5a7e19a0269abe740ac8b38a1bfdab115d14074eb212167a3ba359c0d237a8c3-certificate.pem.crt"
PATH_TO_KEY = "certificados/5a7e19a0269abe740ac8b38a1bfdab115d14074eb212167a3ba359c0d237a8c3-private.pem.key"
PATH_TO_ROOT = "certificados/AmazonRootCA1.pem"
MESSAGE = "Hello World"
TOPIC = "Prueba/A"
RANGE = 20
myAWSIoTMQTTClient = AWSIoTPyMQTT.AWSIoTMQTTClient(CLIENT_ID)
myAWSIoTMQTTClient.configureEndpoint(ENDPOINT, 8883)
myAWSIoTMQTTClient.configureCredentials(PATH_TO_ROOT, PATH_TO_KEY, PATH_TO_CERT)
myAWSIoTMQTTClient.connect()
print('Begin Publish')
for i in range (RANGE):
data = "{} [{}]".format(MESSAGE, i+1)
message = {"message" : data}
myAWSIoTMQTTClient.publish(TOPIC, json.dumps(message), 1)
print("Published: '" + json.dumps(message) + "' to the topic: " + "'test/testing'")
t.sleep(0.1)
print('Publish End')
myAWSIoTMQTTClient.disconnect()
我已经在我的桌面上创建了一个目录来存储这些文件,它的名字是“certificados”,我从那里走的路径但是它不起作用。
OSError: certificados/AmazonRootCA1.pem: No such file or directory
我也在使用 VS 代码 运行 这个应用程序。
错误很明显,它无法在您提供的路径中找到 CA 证书文件。您提供的路径将相对于文件的执行位置进行解释,这很可能相对于 python 文件本身。如果那不是桌面,那么您需要提供完全限定的路径:
所以假设 Linux,将路径更改为:
PATH_TO_CERT = "/home/user/Desktop/certificados/5a7e19a0269abe740ac8b38a1bfdab115d14074eb212167a3ba359c0d237a8c3-certificate.pem.crt"
PATH_TO_KEY = "/home/user/Desktop/certificados/5a7e19a0269abe740ac8b38a1bfdab115d14074eb212167a3ba359c0d237a8c3-private.pem.key"
PATH_TO_ROOT = "/home/user/Desktop/certificados/AmazonRootCA1.pem"
您好,我是这个 AWS 世界的新手,我想做的是将 python 客户端连接到 AWS IoT 服务并发布消息,我正在使用 SDK python及其示例,但是我在认证过程中遇到问题,我已经创建了东西、策略和认证,并且下载了文件,但是在 python 程序中我不知道我是否在写路径以正确的方式添加到此文件,
首先,我尝试写下每个文件的完整路径,但什么也没写,然后我尝试只写“certificados\thefile”,什么也没写。 弹出的错误说错误是我不知道如何编写的路径。 感谢您抽出宝贵的时间,如果这个问题太基础了,我就直接跳进去了。
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: MIT-0
import time as t
import json
import AWSIoTPythonSDK.MQTTLib as AWSIoTPyMQTT
# Define ENDPOINT, CLIENT_ID, PATH_TO_CERT, PATH_TO_KEY, PATH_TO_ROOT, MESSAGE, TOPIC, and RANGE
ENDPOINT = "MYENDPOINT"
CLIENT_ID = "testDevice"
PATH_TO_CERT = "certificados/5a7e19a0269abe740ac8b38a1bfdab115d14074eb212167a3ba359c0d237a8c3-certificate.pem.crt"
PATH_TO_KEY = "certificados/5a7e19a0269abe740ac8b38a1bfdab115d14074eb212167a3ba359c0d237a8c3-private.pem.key"
PATH_TO_ROOT = "certificados/AmazonRootCA1.pem"
MESSAGE = "Hello World"
TOPIC = "Prueba/A"
RANGE = 20
myAWSIoTMQTTClient = AWSIoTPyMQTT.AWSIoTMQTTClient(CLIENT_ID)
myAWSIoTMQTTClient.configureEndpoint(ENDPOINT, 8883)
myAWSIoTMQTTClient.configureCredentials(PATH_TO_ROOT, PATH_TO_KEY, PATH_TO_CERT)
myAWSIoTMQTTClient.connect()
print('Begin Publish')
for i in range (RANGE):
data = "{} [{}]".format(MESSAGE, i+1)
message = {"message" : data}
myAWSIoTMQTTClient.publish(TOPIC, json.dumps(message), 1)
print("Published: '" + json.dumps(message) + "' to the topic: " + "'test/testing'")
t.sleep(0.1)
print('Publish End')
myAWSIoTMQTTClient.disconnect()
我已经在我的桌面上创建了一个目录来存储这些文件,它的名字是“certificados”,我从那里走的路径但是它不起作用。
OSError: certificados/AmazonRootCA1.pem: No such file or directory
我也在使用 VS 代码 运行 这个应用程序。
错误很明显,它无法在您提供的路径中找到 CA 证书文件。您提供的路径将相对于文件的执行位置进行解释,这很可能相对于 python 文件本身。如果那不是桌面,那么您需要提供完全限定的路径:
所以假设 Linux,将路径更改为:
PATH_TO_CERT = "/home/user/Desktop/certificados/5a7e19a0269abe740ac8b38a1bfdab115d14074eb212167a3ba359c0d237a8c3-certificate.pem.crt"
PATH_TO_KEY = "/home/user/Desktop/certificados/5a7e19a0269abe740ac8b38a1bfdab115d14074eb212167a3ba359c0d237a8c3-private.pem.key"
PATH_TO_ROOT = "/home/user/Desktop/certificados/AmazonRootCA1.pem"