ValueError:使用umqtt(Microython)连接到AWS IoT Core时密钥无效



几天前,我买了一台Raspberry Pi Pico W,正试图将其连接到AWS Iot Core。然而,我在连接AWS时遇到了问题。

我已经完成了以下步骤:

  • 在Raspberry Pi Pico W上安装了Microython,这很有效!

  • 创建了一个AWS帐户。

  • 注册了";事情"在物联网核心

  • 下载了相应的证书&密钥:(证书:AmazonRootCA1.pem,certificate.pem.crt,密钥:public.pem.key&private.pem.key(

  • 创建了一个策略,该策略允许策略执行所有操作。在AWS,该政策被激活,形式为:

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "*",
"Resource": "*"
}
]
}
  • 将证书附加到策略
  • 将已注册的Thing附加到策略中
  • 将密钥和证书转移到Raspberry Pi Pico W

此后,我使用Thonny编写了以下代码,试图将树莓派与AWS连接起来。

import time
import network
import urequests
SSID = "XXXX"
PASSWORD = "XXXX"
print("start connecting")
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(SSID, PASSWORD)
print("Connected:", wlan.isconnected())
import sys
import machine
import argparse
from umqtt.simple import MQTTClient
clientId = 'client1'
AWS_ENDPOINT = 'XXXXX.amazonaws.com'
PORT = 8883
certfile = '/certificate.pem.crt'
with open(certfile, 'r') as f:
cert = f.read()

keyfile = '/private.pem.key'
with open(keyfile, 'r') as f:
key = f.read()
print("Key and Certificate files Loaded")
SSL_PARAMS = {'key': key, 'cert': cert, 'server_side': False}
client = MQTTClient(clientId, AWS_ENDPOINT, port=PORT, keepalive=10000, ssl=True, ssl_params=SSL_PARAMS)
print("Client created")
client.connect()

程序运行到:

client.connect((

并给我以下错误:

Traceback (most recent call last):
File "<stdin>", line 38, in <module>
File "/lib/umqtt/simple.py", line 61, in connect
ValueError: invalid key

(第38行是client.connect((语句(

private.pem.key的格式为:

-----开始RSA私钥-----[字符块]-----结束RSA私钥-----

我有谁知道我做错了什么?提前感谢您的帮助!!:(

致以亲切的问候,Benjamin

抱歉,聚会迟到了。

如果你还没有做到这一点,你应该尝试转换密钥&使用OpenSSL 将证书文件转换为.DER格式

openssl x509 -in certificate.pem.crt -out certificate.der -outform DER

openssl rsa -in private.pem.key -out private.key.der -outform DER

`certfile = '/certificate.der'`
`with open(certfile, 'r') as f:`
`cert = f.read()`
`keyfile = '/private.pem.der'`
`with open(keyfile, 'r') as f:`
`key = f.read()`

最新更新