This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CC3200-LAUNCHXL:cc3200

Guru**** 666790 points
Other Parts Discussed in Thread: CC3200, UNIFLASH
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/881308/cc3200-launchxl-cc3200

器件型号:CC3200-LAUNCHXL
主题中讨论的其他器件:CC3200UNIFLASH

tirtos: tirtos_cc32xx_2_16_01_14

主板:cc3200MODLAUNCHXL

影子示例

我已连接到 WiFi 并尝试使用影子示例连接到 AWS

我使用 certs 示例代码制作了 certs、并刷写到器件运行时

我无法连接到 AWS。 目前面临两个问题

  1. NTP 时间:从 NTP 获得正确的时间 ,但当我调用 time(NULL)时,它返回-1
  2. AWS TLS 连接返回-155 (sl_ESEC_ASH_SIG_CONFIRST_E)始终。 这是因为时间同步问题还是根 CA 认证错误?????

请参阅以下日志

WiFi 已连接

1002CC3200已连接到 AP 并获取 IP 地址。 IP 地址:10.107.4.56

NTP 进入当前时间:1969年12月31日星期三23:59:59

正在刷新 CA 证书文件...

正在刷新客户端证书文件...

正在刷新客户端密钥文件...完成。

AWS IoT SDK 版本2.1.0- mqttInitParams.pHostURL [***** -ats.iot.us-east-1.amazonaws.com]

IoT_TLS_INIT:[]

IoT_TLS_INIT:0

connectParams.pClientID [ABCDEF]...

正在连接...

AWS IoT MQTT_SET_CLIENT_STstate

_aws_IoT_MQTT_INTERNAL_CONNECT:1111[0]

连接:connect[-155]

_aws_IoT_MQTT_INTERNAL_CONNECT:[-24]

错误:void runAWSClient (void)

L#564错误(-24)连接到******** -ats.iot.us-east-1.amazonaws.com:8883

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    让我们从 AWS 连接中单独调试 NTP 问题。 目前、您可以使用以下 API 设置编译期间的日期+时间、并注释掉 SNTP 调用:

    设置设备时间和日期示例:
    SlDateTime_t DateTime={0};
    DateTime.sl_tm_day =(_u32) 18; //月中某天(DD 格式)范围1-31
    DateTime.sl_TM_mon =(_u32) 2; //日期
    时间范围为1-12的月份(mm 格式)。sl_tm_year =(_u32) 2020; //年(YYYY 格式)
    DateTime.sl_TM_Hour =(_u32) 10; //
    日期时间范围内的小时数。sl_tm_min =(_u32) 44; //
    0到59 DateTime.sl_tm_sec 范围内的分钟=(_u32) 22; //在0-59
    sl_DevSet (sl_device_General_configuration、
    SL_DEVICE_General_configuration_date_time、
    sizeof (slDateTim_t)、
    (_u8 *)(&DateTime)); 

    导致 sl_ESEC_ASH_SIG_CONFIRM_E 错误的最可能原因是您刷写并提供给器件的根 CA 证书不正确。 如果您使用的是 ATS 端点(例如、您的端点地址为*- ATS.IoT。 .amazonaws.com),则要使用的根 CA 证书是 Starfield Class 2认证机构证书。 我有一份以此处预期的 C 数组格式格式格式化的证书副本:

    https://e2e.ti.com/support/wireless-connectivity/wifi/f/968/p/789112/2937041#2937041

    如果您使用 Starfield 认证并绕过 NTP 时间、您是否能够成功连接至 AWS?


    此致、

    Michael

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Michael、

    感谢您的反馈。

    在启动 AWS 任务(连接 wifi 后)之前、我已删除 NTP 功能并设置上述时间

    我使用的是 cc3200板、在使用示例代码进行闪存之前、将 pem 文件转换为 DER 文件

    函数正在使用:

    #define AWS IOT 根 CA 文件名      "/cert/ca.der

    convertPemToDer (csc_root_ca_pem、strlen (csc_root_ca_pem)、&der);

    FlashFile (aws_IOT _root_ca_filename、(unsigned char *) der、dlen);

    在阵列上、我们将删除证书的开头和结尾

    ---- 开始证书-- 和--- 结束证书--

    即使是使用 starfield certs、该时间也会出现相同的错误(-155)

    如果我如上所述添加开始和结束以及\r\n、则会出现错误(-456)

    然后、我刚刚尝试以 PEM 文件的形式进行闪存(不转换为 DER 文件)、

    #define AWS IOT 根 CA 文件名      "/cert/ca.pem

    出现错误-453

    所以、

    所有证书文件(root ca、cert.pem、私钥)的格式是什么? 它是更好还是更好?

    如果您可以共享任何邮件 ID、我也可以共享该代码

    谢谢、

    Shijin Joseph

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Shijin、

    请不要删除--- 开始证书-- 和--- 结束证书-- 从阵列中删除。 您还必须保留换行符。 我在链接帖子中提供的格式应正确、并按原样复制到您的程序中。  

    一旦闪存到 CC3200文件系统中、证书文件必须全部为 DER、因此您为什么在提供的 AWS IoT 示例代码中使用 PEM 到 DER 转换。

    请记住以上信息、然后重试。 如果所有其他操作都失败、您可以尝试转换从 AWS 下载的证书并在 PC 上转换它们、然后再使用 uniflash 将它们刷写。 您可以使用 openssl 将 PEM 格式的认证转换为 DER。 客户机证书和根 CA 应该可以直接转换,特别是因为您可以使用 PC 的证书查看器打开它们以确保正确转换,但是对于私钥,正确转换密钥的 openssl 命令为:

    OpenSSL RSA -in key.pem -outform der -out key.der

    此致、

    Michael

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    e2e.ti.com/.../7065.shadow_5F00_sample.c

    附加的文件。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我已经尝试过 openssl 工具和代码... 添加"\r\n"时、错误变为-456

    附加了该文件。 在中、启用了两个单独的证书(一个带有\r\n 是 starfield 证书)。

    您能不能检查一下、让我知道我做了什么错了

    谢谢

    Shijin Joseph

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Shijin、

    我认为、最好不要通过 PEM 格式的阵列提供认证、而是获取亚马逊提供的客户端认证+密钥和 Starfield 2类认证机构、并将其格式化到您的 PC 上、 通过 Uniflash 将文件刷写到您的 CC3200、然后查看是否可以使 AWS 连接正常工作。 这将消除由于证书数组的格式而可能出现的任何问题。 请使用 openssl 将所有证书和私钥格式化为 DER、看看这是否有用。

    完成此操作后、当您尝试连接到 AWS 时、您会特别获得什么错误代码?

    此致、

    Michael

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我从 AWS 控制台、设备证书和私钥下载了所有4种类型的 RootCA 证书

    使用 openssl 工具将所有 certo 转换为 DER 格式、并使用 uniflash 工具刷写到器件中

    所有四个 RootCA 认证在套接字连接上提供-155 (DER 格式)

    所有四个 RootCA 认证为插座连接提供-453 (以 PEM 格式)

    然后

    1.尝试使用 openssl 命令连接到 AWS (RootCA 为 PEM 格式、所有其他格式均为 DER 格式)

    OpenSSL s_client -connect **** -ats.iot.us-east-1.amazonaws.com:8883 -debug -certform PEM -CAfile RootCA.pem -certform der -cert cert.der -keyform der -key key.der

    连接成功

    如果所有文件都采用 PEM 格式、则也会成功连接

    2.尝试使用 openssl 命令连接到 AWS (所有 都是 DER 格式)

    OpenSSL s_client -connect ***** -ats.iot.us-east-1.amazonaws.com:8883 -debug -certform der -Cafile ca.der -certform der -cert cert.der -keyform der -key key.der
    140455623520704:错误:0B084088:x509证书例程:x509_load_cert_crl_file:找不到证书或 CRL:../crypto/x509/by_file.c:223:

    出现错误,未找到任何 openssl 命令以 DER 格式测试 RootCA 文件

    使用的服务包为:servicepack_1.0.1.13-2.11.0.1.bin

    tirtos:tirtos_cc32xx_2_16_01_14

    还有其他要尝试的吗?

    谢谢、

    Shijin

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Shijin、

    作为证书测试、您可以尝试使用 CC3200 SDK 中的基本 MQTT_CLIENT_tirtos 示例、并通过该示例连接到 AWS IoT。

    我已附加了用于测试的修改后的 main.c。 请导入示例并使用以下副本覆盖 main.c:

    /cfs-file/__key/communityserver-discussions-components-files/968/8156.main.c

    您需要使用端点地址编辑 SERVER_ADDRESS、然后通过 Uniflash 在 SECURITY_FILE_LIST[]中指示的位置提供 DER 格式的证书和密钥。

    可以使用 openssl 命令将下载的密钥转换为 DER:

    OpenSSL RSA -in key.pem -outform der -out key.der

    随附的是 Starfield 2类认证机构证书的 DER 格式副本、您需要:

    /cfs-file/__key/communityserver-discussions-components-files/968/cacert.der

    请告诉我、这是否适合您。

    此致、

    Michael