为什么我的Raspberry Pi无法连接到Google Cloud IoT?

时间:2019-12-18 13:27:05

标签: google-cloud-platform google-cloud-firestore google-cloud-functions mqtt google-cloud-iot

我已将我的rsa_private.pem添加到项目的certs目录中,并在IOT Core控制台中将相应的rsa_cert.pem公钥添加到了我的设备中。

我还从wget https://pki.google.com/roots.pem目录中运行了certs

我不知道的是,现在生成的roots.pem文件有多个-

----BEGIN CERTIFICATE-----
// RS256_X509 encoded cert here
-----END CERTIFICATE-----

具有各种Operating CA:Comodo GroupGoDaddyDigiCertEntrust DatacardGlobalSignGoogle Trust Services LLC就是我最初生成root.pem时的原始内容。

我尝试在my-registry下的控制台中将root.pem添加到CA CERTIFICATES中,但是出现错误消息Certificate value is too big `

运行node gcloud.js时,如果我将connecting...包含在close中并传递给了{ protocolId: 'MQIsdp'还是我得到connectionArgs

gcloud.js

mqtt.connect()

1 个答案:

答案 0 :(得分:0)

因此,首先,仅需注意roots.pem。那里有多个证书,因为roots.pem在Google轮换授权证书时覆盖自身。因此,它包括一堆以使roots.pem有效期更长,仅此而已。如果您可以确定哪个是活动证书(它可能每三个或四个月更改一次?),您实际上可以删除所有其他证书,而只保留一个活动证书。当我在一个只有200k空间的严重受限的MC上工作时,我不得不这样做。 roots.pem太大,占用了我在设备上的大部分存储。这里有更多信息:https://cloud.google.com/iot/docs/how-tos/mqtt-bridge#using_a_long-term_mqtt_domain有关我们设置的长期域名,以允许针对长期域名使用较小的根证书。

并且您不想/不需要将roots.pem添加到注册表级别的证书中,因为只有在您想要使用自己的证书颁发机构来针对正在注册的新设备进行验证时才需要这样做。这有点令人困惑,但是与设备注册后的授权没有任何关系,这是关于防止有人入侵您的项目并注册他们自己的设备。

关于代码为何无法正常工作的原因:您的JWT无效,因为到期标签为:exp: parseInt(Date.now() / 1000) + 86400 * 60, // 1 day,比JWT的有效期限长。 86400秒* 60是1,440小时... JWT超过24小时的时间将被拒绝。因此,这是错误的错误消息。我的意思是,从技术上讲这是正确的,因为密码是JWT,并且那是无效的,所以它是无效的pw ...,但可能会更好。我将带回团队,但尝试将86400 * 60更改为86400,它应该可以工作。

下面的每个注释:这也是设备名称。由于它是动态生成的,因此缺少一个字符(用短划线代替下划线)。

旧答案: 至于其余的,我看不到任何明显的东西,但是如果您删除异步/等待包装器并同步运行,会发生什么呢?同样,只需验证您的SSL密钥已使用相同的协议(RSA,带有或不带有X509包装器)进行了创建和注册。在注册一种方式之前我遇到了问题,而实际上在另一种方式上注册了密钥。