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.

[参考译文] CC3220MODA:证书有效期 SLNETERR_ESEC_DATE_ERROR

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/1116708/cc3220moda-period-of-certificate-validity-slneterr_esec_date_error

器件型号:CC3220MODA

大家好、

我想使用 TI SDK 函数 HttpClient_connect2和 HttpClient_connect 来检查释放到证书有效期的 HTTP 连接过程的行为。
但我无法找到有关用于比较的时间设置的任何信息。

我假设网络处理器将根据其 RTC 验证证书的时间周期。
该时间(NWP 内部 RTC)通过函数 sl_DeviceSet( sl_DEVICE_General、sl_DEVICE_General_Date_Time、sizeof (SlDateTime_t)、(_u8*)(&st_DateTime )进行设置。

我是对的吗?

此致、非常感谢、
罗马

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

    您好、Roman、

    我想确认 错误代码是否为-461L/*连接,并带有证书日期验证错误*/因为我发现了名为 SL_ERROR_BSD_ESECDATEERROR 的错误,但它应该是相同的。

    正确、要设置 CC3220的日期和时间、我将使用 DeviceSet 函数(秒 3.7)

    有关 CC3220证书和安全性的更多信息、我建议阅读 内置安全功能的第2节

    Simplelink Wifi 证书处理指南

    希望这对您有所帮助、

    Rogelio

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

    RogelioD、您好!

    感谢您的回答和链接。

    我通过设置测试服务器证书的时间窗口之外的控制器时间来分析行为。
    我没有激活可信根证书目录
    我使用函数 HttpClient_connect、该函数继而使用 HttpClient_connect2。


    我将 NWP 时间设置为三个点 ,并连接到服务器:一个点较低,一个在内部,一个点比时间窗口高。 我始终会获得-468 SLNETERR_ESEC_UNKNOWN_ROOT_CA 的相同结果代码。

    因此、我假设 TI 文档 内置安全功能 第2.2.3.7节"验证服务器日期"中的以下句子意味着必须首先验证根 CA。 在此之后、将检查日期和时间。

    Every certificate has an expiration date. When connecting to a server in client mode, the server time validation
    occurs if the root CA was set. If the time validation fails, the sl_connect command returns an error
    SL_ERROR_BSD_ESECDATEERROR, “connected with time and date validation error.” The user can set the
    time and date of the device, and this is used in the certificate time and date validation. The date and time are
    kept in hibernate mode.

    换言之:如果未使用可信根证书目录,则无法验证 HTTP 服务器证书的日期和时间设置。
    这可能是因为证书的数据和时间检查仅在验证证书本身之后完成。
    我是对的吗?

    此致、感谢您阅读本书、
    罗马

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

    您好、Roman、

    由于您尝试使用 TLS 进行连接、因此您需要使用正确的根 CA。 可以在 httpclient.c 中找到以下代码、希望这些代码能让您更好地了解如何验证证书。

        if ((intFlags & ISSECURED) || getCliState(cli, ISSECURED_STATE))
            {
                ret = SlNetSock_startSec(cli->ssock, secAttribs,
                                         SLNETSOCK_SEC_START_SECURITY_SESSION_ONLY |
                                         SLNETSOCK_SEC_BIND_CONTEXT_ONLY);
                /*
                 *  Each of these specific return values indicate that the
                 *  connection was successful, but with a caveat
                 */
                if ((ret >= 0) ||
                    (ret == SLNETERR_ESEC_UNKNOWN_ROOT_CA)      ||
                    (ret == SLNETERR_ESEC_CERTIFICATE_REVOKED)  ||
                    (ret == SLNETERR_ESEC_DATE_ERROR)           ||
                    (ret == SLNETERR_ESEC_SNO_VERIFY))
                {
                    if (secureRetVal)
                    {
                        *secureRetVal = ret;
                    }
                }
                else
                {
                    /* Exit, as the secure connection could not be established */
                    return (ret);
                }
    一旦 SlNetSock_StartSec 返回错误、它将不会建立连接、然后 httpclient_connect2函数将返回错误。 TLDR:如果要测试 证书日期和时间的有效性,则需要为服务器使用正确的根证书。
     
    此致、
    Rogelio
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    RogelioD、您好!

    是的、我知道这个。 如果未指定证书文件,该函数 SlNetSock_startSec将返回 SLNETERR_ESEC_SNO_VERIFY

    给定有效的根 CA 证书文件后,函数将重新运行SLNETERR_ESEC_UNKNOWN_ROOT_CA,而不管 NWP 中的时间设置如何。

    我的问题:在禁用受信任根目录时,我能否检查证书的有效期,或者在将根 CA 与受信任根目录进行比较后,NWP 是否仅检查证书的有效期?

    此致、
    罗马

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

    您好、Roman、

    我只想确认您是否禁用了受信任根证书目录。 您可以使用 NWP 用户指南第7.5.4节中的以下代码执行此操作  

    _u32 dummyVal;
    _i16 status;
    status = sl_SetSockOpt(SockID,SL_SOL_SOCKET, SL_SO_SECURE_DISABLE_CERTIFICATE_STORE,
    
    &dummyVal,sizeof(dummyVal));

    如果已禁用 、则在使用受信任目录之外的证书时不应出现 SLNETERR_ESEC_UNKNOWN_ROOT_CA 错误、但是证书日期仍将被验证、如果不正确、则返回 SLNETERR_ESEC_DATE_ERROR。

    -Rogelio

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

    Rogelio、您好!

    否、我没有禁用受信任的根目录。

    我的解决方案是在文件系统中使用 RootCA 证书和 SDK 函数 HttpClient_connect。 仅当提供 RootCA 证书时、才会出现错误代码 SLNETERR_ESEC_UNKNOWN_ROOT_CA。 此代码映射为零(如此线程开头的列表中所示)。 现在、我不需要更多详细信息。
    但是、现在我知道如果需要、该怎么做。

    非常感谢。

    此致、
    罗马