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.

[参考译文] TM4C129EKCPDT:在进行硬件加密的 HTTPS 后出现错误(-103)

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1276772/tm4c129ekcpdt-encountering-error--103-during-https-post-with-hardware-encryption

器件型号:TM4C129EKCPDT

您好!

我想跟进的是 E2E 主题 https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1236786/tm4c129ekcpdt-https-post-giving-a-error-400 ,它是由我的一位同事发起的。

目前、在软件加密成功执行的情况下、我在使用硬件加密时遇到错误(-103)。 我正在尝试发布到 webhook.site:443. 请帮助我解决此问题。

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

    您好!

     我不确定是什么导致了103错误。 我在线搜索并找到以下描述。  

    https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/103

    HTTP  103 Early Hints  服务器在准备响应时可能会发送信息响应、并提供有关服务器期望最终响应链接的资源的提示。 这允许浏览器  在服务器准备并发送最终响应之前就开始预加载资源。

    早期提示响应主要与 Link 标头一起使用、标头指示要加载的资源。 它还可能包含一个 Content-Security-Policy 在处理早期提示时强制执行的标头。

    不知道您的 wolfSSL 库是否采用硬件 AES 硬件加速器。  

    如果已经构建了 wolfSSL 库、那么应该看到${WOLFSSL_DIR}\tirtos\packages\ti\net\wolfssl\lib\wolfssl_tm4c_hw.aem4f 库、该库是为使用硬件加速器而构建的。 在链接器命令文件中、需要指定此 wolfssl_tm4c_hw.aem4f  库的路径、而不是 wolfssl.aem4f 库的路径。  

    如果你已经做了所有提到的,仍然面临同样的问题,那么我真的不知道什么是错的。  我在这方面没有专业知识。 您可能需要联系 wolfSSL 供应商获取支持。 我还建议你查看 AES/DES 模块寄存器、查看它们是否已被启用以及这些模块是否被激活并进行一些操作。 您可以在寄存器浏览器窗口中检查它们。 您还可以采用正常方式调试代码、方法是使用断点和单步执行代码以找出导致103生成的原因。   

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

    尊敬的 Charles:

    我已经链接了"wolfssl_tm4c_hw.aem4f"库、但它显示错误(-103)。 使用'wolfssl.aem4f'库、我可以使用软件加密成功连接到服务器。

    我有疑问:我在哪里需要启用 AES 硬件加速器?

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

    您好!

    我有疑问:是否有任何地方需要启用 AES 硬件加速器?

     这就是为什么在我的上次答复中、我建议你查看 AES/DES 硬件加速器寄存器并查看它们是否已被启用和初始化以执行任何操作的原因。 这将是调试过程的一部分。  

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

    尊敬的 Charles:

    你好。

    很抱歉回复延迟。 我向 wolfSSL 小组询问情况,但状态保持不变。 我怀疑硬件加速器可能没有配置或启用。

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

    您好!

     您能观察 AES 和 DES 的寄存器是否已启用和初始化。  

      

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

    尊敬的 Charles:

    它显示"无法读取。

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

    您好、Sony、

     很显然, wolfSSL 库出于某种原因没有启用 AES/DES。 我建议您返回并检查如何使用硬件加速器支持构建 wolfSSL 库。  

     只是要确保、请转至"Memory Browser"窗口中的0x44036000。 您是否看到任何寄存器初始化? 下面是运行一个简单 TivaWare AES 示例时的示例屏幕截图。  

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

    尊敬的 Charles:

    查看您提到的位置时、未发生初始化。

    我为 wolfSSL 库配置的设置如下:

      

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

    您好!

     不知道 在构建 HTTPS 项目时是否已预定义 WOLFSSL_TIRTOS 和相应的 MCU 器件型号。  

    我也想给你一个提示。 我将从明天开始度假一周。 我的答复可能会有延误。  

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

    您好!

    这些设置由 wolfSSL 支持建议、并在预定义部分中提供。

    但在定义这些参数后、为什么不启用硬件加速器?

    是否需要单独启用它?

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

    您好!

     你的屏幕截图看起来很好,但我不知道什么是错的;-103错误消息。  由于我不是安全层的专家,我建议您单步执行 TLS_PARAMS_INIT()和 TLS_CREATE ()函数,并比较使用软件加密与硬件加密。 您知道差异可能在哪里吗? 我能想到的另一件事是设置一个观察点、以查找对 AES 和 DES 模块的任何读取和写入操作。 这将告诉我们 WolfSSL 库是否使用过硬件加速器。 AES 模块从0x44036000开始、DES 模块从0x44038000开始。 如果 WolfSSL 库或 HTTPS 应用需要使用 AES/DES、它必须已尝试写入这些模块寄存器以便初始化该模块。  

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

    您好!

    我还想注意的一点是、在逐行调试时、我已确定错误发生在 httpcli.c 中的某个函数内。
    /*
    *=========== sprsend====
    *构建要发送的 HTTP 请求行
    */
    static int sprsend(ht Cli_Handle CLI, const char * fmt,..)
    {
    char sendbuf[send_BUFLEN];
    内部长度= 0;
    Int ret;
    int sendbuflen = sizeof (sendbuf);
    va_list ap;

    如果(!getCliState (CLI、INPROGRES_FLAG){
    va_start (ap、fmT);
    len = xvsnprintf (sendbuf、sendbuflen、fmt、ap);
    va_end (ap);

    #ifdef NET_SLP
    否则{
    memcpy (sendbuf、cli->buf、cli->buflen);
    len = cli->buflen;

    #endif

    if (len > sendbuflen){
    返回(HTTPCli_ESENDBUFSMALL);

    REt = ssk_send (&(cli->sock)、sendbuf、len、0);
    如果(ret < 0){
    cli->sockerr = ret;

    返回(HTTPCli_ESENDFAIL);

    #ifdef NET_SLP
    如果(ret < len){
    cli->buflen = len - ret;
    如果(cli->buflen > HTTPCli_BUF_LEN){
    返回(HTTPCli_EINTERNALBUFALL);

    memcpy (cli->buf、((uint8_t *) sendbuf + ret)、cli->buflen);
    返回(HTTPCli_EINPROGRESS);

    CLI->buflen = 0;

    #endif

    返回(RET);

    API "ssk_send (&(cli->ssock)、sendbuf、len、0)"将返回值(-308)、这将导致返回值(-103)。