几天前,我买了一台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()`