我正在开发一种内存受限的IoT设备,并希望通过MQTT将其连接到Google IoT Core。必须信任以允许服务器TLS证书验证的所需根证书列表非常长。我正在寻找一个适用于有限资源物联网设备的小型列表,但不会突然停止工作。有没有办法安全地减少所需的证书列表?
从设备安全建议部分下的在线文档(https://cloud.google.com/iot/docs/concepts/device-security)中可以看出:
'与mqtt.googleapis.com:8883(或:443)通信时使用TLS 1.2,并使用根证书颁发机构验证服务器证书是否有效。请阅读此安全说明,了解详细的TLS要求和未来的兼容性。
从安全说明(https://security.googleblog.com/2015/09/disabling-sslv3-and-rc4.html)它说:
“至少https://pki.google.com/roots.pem的证书必须值得信赖。”
我可以清楚地看到文档声明需要完整列表,但这对于内存受限的IoT设备似乎不可接受。例如,AWS只需要一个证书 - 具体取决于所选的TLS密码。请参阅服务器身份验证(https://docs.aws.amazon.com/iot/latest/developerguide/managing-device-certs.html)下的AWS文档
任何有关理解可以减少根证书列表的方法的帮助 - 例如基于ECC的验证与基于RSA的验证的终止 - 将会有所帮助。
感谢Github上一位乐于助人的Google工程师,他在Google提供的iot-device-sdk-embedded-c项目中回答了问题Clarify how trusted_RootCA_certs were chosen,解决方案是使用long-term support (LTS) domain。
从文档中,可以使用特殊域“mqtt.2030.ltsapis.goog”代替“mqtt.googleapis.com”,只需要两个根CA证书,而不需要使用小ECC 256公钥而不是整个根。 pem包(128KB)。
这些根CA证书将在2030年之前得到修复。
所需的根CA是:
请注意long-term support (LTS) domain文档中嵌入式设备的其他要求和功能。