Tl;DR --当使用 Google 提供的根 CA 证书来支持其 长期支持(LTS)域 MQTT 服务器时,CC3235拒绝确认"GTS LTSR"证书已签名链,即使单独的测试工具能够成功连接也是如此。
因此、我们有一个项目、在该项目中、我们使用其 MQTT 端点连接到 Google GCP IoT。 如果我们连接到他们的常规端点(mqtt.googleapis.com:8883)并使用 GlobalSign Root CA 证书、我们可以成功连接。 以下是连接到此端点时的 OpenSSL 证书转储。
e2e.ti.com/.../GCP-IOT-Root-CA-mqtt.googleapis.com-2021_2D00_11_2D00_01.txt
下面是 GlobalSign 根证书、用于标记 "GTS Root R1"证书:
e2e.ti.com/.../GlobalSign-Root-CA.pem.txt
Google 还提供了 LTS (长期支持)域、旨在专门满足"最小"(读取:嵌入式)物联网系统的需求、因为它们承诺不更改 TLS 证书、或者更具体地说、更改其 TLS 证书的根 CA。 您可以 在此处阅读有关 LTS 域的更多信息。 它们提供"主要"和"备份"根 CA 证书、这意味着当您连接到 MQTT TLS 端点时、服务器证书 将由这两个证书中的一个进行签名。 以下是连接到 LTS 端点(MQTT.200.ltspis.goog:8883)时的 OpenSSL 转储:
e2e.ti.com/.../GCP-IOT-Root-CA-mqtt.2030.ltsapis.goog-2021_2D00_11_2D00_01.txt
奇怪的是,这种转储抱怨说它"无法获取本地颁发者证书",显然意味着它无法检索和转储根 CA 证书。 但是、如果您提取"GTS LTX"中间证书(该转储中的最后一个证书)并将其打开、您将看到确实有"GTS LTSR"根证书对其进行了签名。

如果我双击打开 GTS LTSR 证书并保存、它具有与"gtsltsr.crt"证书相同的"指纹"、可以直接从 Google 下载。 下面是 PEM 形式的证书:
e2e.ti.com/.../gtsltsr.pem.txt
不过这里有个问题... 无论我尝试指定哪个根 CA 证书(或其他证书)、我都无法获取 SimpleLink 以连接到 LTS MQTT 端点。 我 应该能够指定上面的 GTS LTSR 证书、但该证书不起作用。 我已经能够通过基于 PC 的独立测试工具(MQTTTX)确认我可以使用根 CA 证书、从我们的协处理器窃取 JWT、并成功连接到 LTS 域:

但是、当我尝试在我们的应用程序中使用相同的根 CA 证书时、我会收到以下消息(在 aws_secure_sockets.c 中生成):
[SimpleLinkSockEventHandler ERROR]: Root CA in file system did not sign the chain.
当套接字事件处理程序获得 sl_SSL_notification_wrong_root_CA 时、将显示此消息。 尝试任何其他证书(备份根 CA、GTS LTSX 中间证书等)也会失败。
我知道 SimpleLink 可能对要使用的根 CA 证书非常挑剔;在我为 AWS IoT 开发的另一个应用中、我知道我需要使用"Starfield"根 CA 证书、因为该证书用于对 AWS 根 CA 证书进行交叉签名。 但没有其他证书交叉签署 GTS LTSR 证书、而 SimpleLink 只是拒绝接受该证书。
正如我说过的、如果我对该域使用标准域(mqtt.googleapis.com)和根 CA 证书(GlobalSign)、我们的目标工作正常。 但是、我想使用 LTS 域帮助该器件"面向未来"、我无法说服 CC3235连接到该器件。
您能否提供一些输入、说明我为何无法连接到 Google GCP IoT LTS MQTT 端点? 您应该已经拥有了在您的末端执行某些测试所需的所有信息和根证书 谢谢。
戴维·R.