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 POST 出现错误400

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

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

器件型号:TM4C129EKCPDT
Thread 中讨论的其他器件:SYSBIOS

您好!

我尝试在 https://postman-echo.com 上发布 我在 TI 论坛中找到的代码。 我在使用 HTTPCli_sendRequestBody ()成功发布后调用 HTTPCli_getResponseStatus (&CLI)时收到错误400。 有没有人以前对此有过经验? 感谢您的帮助。 下面是我的代码供您参考。

谢谢。

适用于 TivaC 2.16.01.14的 TI-RTOS、

xdctools v 3.32.0.06_core  

WolfSSl 版本: 3.9.10-稳定

/*********** HTTPS 通信代码***** /

HTTPCli_Params 参数;
HTTPCli_Struct CLI;
HTTPCli_Field 字段[3]={
{HTTPStd_field_name_host、HOSTNAME}、
{HTTPStd_field_name_content_type、content_type}、
{ NULL,NULL }
};

//响应字段筛选器
char respFields [2]={
null
};

startntp();

System_printf ("将 HTTPS POST 请求发送至"%s"、HOSTNAME);
system_flush();

TLS_PARAMS_INIT (&tlsParams);
tlsParams.ca =大约;
tlsParams.calen = calen;

TLS = TLS_create (TLS_method_client_TLSv1_2、&tlsParams、NULL);
如果(!TLS){
printError ("httpsTask: TLS create failed"、-1);

HTTPCli_structure (&cli);

HTTPCli_setRequestFields (&CLI、字段);

HTTPCli_setResponseFields (&cli、respFields);

REt = HTTPCli_initSockAddr ((struct sockaddr *)&addr、"">https://postman-echo.com/POST"、0);
如果(ret < 0){
printError("httpsTask:地址解析失败\n", ret);

params.tls = TLS;
HTTPCli_params_init (&params);


REt = HTTPCli_connect (&CLI、(struct sockaddr *)&addr、HTTPCli_TYPE_TLS、&params);
如果(ret < 0){
printError("httpsTask:连接失败\n", ret);


RET = HTTPCli_sendRequest (&CLI、HTTPStd_post、request_URI、true);
如果(ret < 0){
printError("httpsTask: send failed\n", ret);

否则
{
System_printf ("sendRequest successfully\n");


RET = HTTPCli_sendField (&CLI、HTTPStd_field_name_content_length、content_length、false);
RET = HTTPCli_sendField (&CLI、HTTPStd_field_name_content_type、content_type、true);

如果(ret < 0){
printError("httpTask:发送失败\n", ret);

否则{
System_printf ("sendField 成功\n");

REt = HTTPCli_sendRequestBody (&CLI、data、strlen (data));
如果(ret < 0){
printError("httpTask:变量数据无法发送\n", ret);

否则{
System_printf ("已成功发送数据\n");

REt = HTTPCli_getResponseStatus (&CLI);//此处我收到代码为400的错误

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

    您好!

    ret = HTTPCli_getResponseStatus (&CLI);//此处我收到代码400的错误

      请参阅此关于错误400的链接- 响应状态代码指示服务器无法或不会处理请求、因为某种原因被认为是客户端错误

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

     另请查看下面的链接、了解  HTTPCli_getResponseStatus 可能返回的其他代码。  

    https://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/tirtos/2_14_04_31/exports/tirtos_full_2_14_04_31/docs/networkservices/doxygen/html/group__ti__net__http___h_t_t_p_std.html#gaee996bdb2c7693874706d971892e3285

     您的同事已经在 https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1236170/tm4c129encpdt-https-communication-using-wolfssl---https-post 上打开了同一个帖子。 我建议您与他合作、并将您的问题合并到同一个帖子中。 我问他以下问题。 也许您可以在这里回答。

     您能让它处理 GET 请求吗? 我不是 TLS 方面的专家。 我想、首先要知道这是客户端问题、服务器问题还是认证问题。 如果您可以开始工作、则可以消除服务器问题和认证。 但是、如果 GET 不起作用、则需要更多变量来调查出错的原因。  

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

    您好 Charles、

    感谢您的回复。 我也尝试了 https-get。 它会给出相同的误差400。 我怀疑我的 http 配置是否与 postman 服务器不兼容。  下面是我尝试过的 HttpGet。

    是的、我的同事之前就已经就此问题进行了沟通、她已经离开办公室几天了。 我更喜欢在该线程中进行通信、您可以关闭另一个线程。

    谢谢。

    /*********** HTTPS 获取代码***** /

    #define HOSTNAME"">https://postman-echo.com"
    #define request_URI "/get?foo1=bar1&foo2=bar2"//"/post"
    #define content_type "application/json"//"text/plain"
    #define Authorization "基本"
    #define USER_AGENT "HTTPCli (ARM;TI-RTOS)"
    #define NTP_HOSTNAME " pool.ntp.org "
    #define ntp_port "123"
    #define ntp_servers 3
    #define ntp_servers_size (ntp_servers * sizeof (struct sockaddr_in)
    #define HTTPTASKSTACKSIZE 32768

    HTTPCli_Params 参数;
    HTTPCli_Struct CLI;
    HTTPCli_Field 字段[3]={
    {HTTPStd_field_name_host、HOSTNAME}、
    {HTTPStd_field_name_content_type、content_type}、
    { NULL,NULL }
    };

    //响应字段筛选器
    char respFields [2]={
    HTTPStd_field_name_content_length、
    内容长度};

    startntp();

    System_printf ("将 HTTPS POST 请求发送至"%s"、HOSTNAME);
    system_flush();

    TLS_PARAMS_INIT (&tlsParams);
    tlsParams.ca =大约;
    tlsParams.calen = calen;

    TLS = TLS_create (TLS_method_client_TLSv1_2、&tlsParams、NULL);
    如果(!TLS){
    printError ("httpsTask: TLS create failed"、-1);

    //CLI = HTTPCli_create();

    HTTPCli_structure (&cli);

    HTTPCli_setRequestFields (&CLI、字段);

    HTTPCli_setResponseFields (&cli、respFields);

    REt = HTTPCli_initSockAddr ((struct sockaddr *)&addr、"">postman-echo.com/.../get、0);
    如果(ret < 0){
    printError("httpsTask:地址解析失败\n", ret);

    params.tls = TLS;
    HTTPCli_params_init (&params);


    REt = HTTPCli_connect (&CLI、(struct sockaddr *)&addr、HTTPCli_TYPE_TLS、&params);
    如果(ret < 0){
    printError("httpsTask:连接失败\n", ret);


    RET = HTTPCli_sendRequest (&CLI、HTTPStd_get、request_URI、true);
    如果(ret < 0){
    printError("httpsTask: send failed\n", ret);

    否则
    {
    System_printf ("sendRequest successfully\n");

    // ret = HTTPCli_getResponseField (&CLI、data、16、false);
    // if (ret < 0){
    // printError ("https-get failed", ret);
    //}
    //其他
    //{
    // System_printf ("HTTP-GET Successf\n");
    //}

    RET = HTTPCli_getResponseStatus (&CLI);//调用  HTTPCli_getResponseField 后出现错误400

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

    我现在得到了200 OK 的回复。

    REt = HTTPCli_sendRequestBody (&CLI、data、strlen (data));

    RET = HTTPCli_getResponseStatus (&CLI);//提供200个 OK 的响应


    REt = HTTPCli_getResponseField (&CLI、RCVData、sizeof (RCVData)、&moreFlag);//执行该函数时、调用错误处理程序。  

    我不确定是否已正确设置响应滤波器。 下面是我的滤波器。  

    //响应字段筛选器
    char respFields [2]={
    null
    };

    当我读取输入数据时、我可以在接收缓冲区中看到带标签"Data"的回传数据。 接收到的数据约为384字节。 如何编辑滤波器、以便仅从响应中获取数据?

    RET = HTTPCli_readRawResponseBody (&CLI、RCVData、sizeof (RCVData));

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

    您好、Senannas:

    我现在得到了200 OK 的回复。

    REt = HTTPCli_sendRequestBody (&CLI、data、strlen (data));

    RET = HTTPCli_getResponseStatus (&CLI);//提供200个 OK 的响应

    [/报价]

     很高兴您在这里取得了良好的进展。 您能否发布您的完整代码以供发布、以便我也可以尝试一下? 我想知道您的当前响应与您昨天得到的服务器响应是否正常之间的确切差异。  

    我不确定是否已正确设置响应滤波器。 下面是我的滤波器。  

    //响应字段筛选器
    char respFields [2]={
    null
    [/报价]

    似乎是正确的。 您拥有的内容与 TI_RTOS 网络服务用户指南中的 POST 示例所示的内容相同。 请参阅此链接并查找 POST 示例。  https://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/tirtos/2_14_04_31/exports/tirtos_full_2_14_04_31/docs/networkservices/doxygen/html/group__ti__net__http___h_t_t_p_cli.html

    当我读取传入数据时,我可以在接收缓冲区中看到带"数据"标签的回传数据。 接收到的数据约为384字节。 如何编辑过滤器以便从响应中获取数据?
    [/quote]

    在同一用户指南中、查找"HTTP 标头字段"部分。 然而,我真的不认为"身体"是一个过滤器. 不是因为我是这方面的专家、我认为您需要在应用中处理/提取身体。  

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

    尊敬的 Charles:

    以下是我的代码。

    我是否可以使用  HTTPCli_readRawResponseBody 或 HTTPCli_getResponseField 来读取数据? 在我的案例中、只有 HTTPCli_readRawResponseBody 工作。

    /***** HTTPS 帖子***** /

    bool moreFlag = false;
    字符数据[64],RCVData[400];
    Int ret;
    内部长度;
    字符内容长度[3];
    结构 Sockaddr_in 地址;

    TLS_Params tlsParams;
    TLS_Handle TLS;


    //要发送的数据
    //strcpy (data、"{\"val\":10}");
    strcpy (data、"testdata");
    len = strlen (data);
    sprintf (content_length、"%d"、len);

    System_printf ("\n 数据:%s\n"、数据);
    system_printf ("len (int):%d\n"、len);
    system_printf ("content_length:%s\n"、content_length);

    HTTPCli_Params 参数;
    HTTPCli_Struct CLI;
    HTTPCli_Field 字段[3]={
    {HTTPStd_field_name_host、HOSTNAME}、
    {HTTPStd_field_name_content_type、content_type}、
    { NULL,NULL }
    };

    //响应字段筛选器
    char respFields [2]={
    HTTPStd_field_name_content_length、
    null};

    startntp();

    System_printf ("将 HTTPS POST 请求发送至"%s"、HOSTNAME);
    system_flush();

    TLS_PARAMS_INIT (&tlsParams);
    tlsParams.ca =大约;
    tlsParams.calen = calen;

    TLS = TLS_create (TLS_method_client_TLSv1_2、&tlsParams、NULL);
    如果(!TLS){
    printError ("httpsTask: TLS create failed"、-1);

    HTTPCli_structure (&cli);

    HTTPCli_setRequestFields (&CLI、字段);

    HTTPCli_setResponseFields (&cli、respFields);


    RET = HTTPCli_initSockAddr ((struct Sockaddr *)&addr、HOSTNAME、0);
    如果(ret < 0){
    printError("httpsTask:地址解析失败\n", ret);

    params.tls = TLS;
    HTTPCli_params_init (&params);


    REt = HTTPCli_connect (&CLI、(struct sockaddr *)&addr、0、&params);
    如果(ret < 0){
    printError("httpsTask:连接失败\n", ret);


    RET = HTTPCli_sendRequest (&CLI、HTTPStd_post、request_URI、true);
    如果(ret < 0){
    printError("httpsTask: send failed\n", ret);

    否则
    {
    System_printf ("sendRequest successfully\n");

    RET = HTTPCli_sendField (&CLI、HTTPStd_field_name_content_length、content_length、false);
    RET = HTTPCli_sendField (&CLI、HTTPStd_field_name_content_type、content_type、true);

    如果(ret < 0){
    printError("httpTask:发送失败\n", ret);

    否则{
    System_printf ("sendField 成功\n");

    REt = HTTPCli_sendRequestBody (&CLI、data、strlen (data));
    如果(ret < 0){
    printError("httpTask:变量数据无法发送\n", ret);

    否则{
    System_printf ("已成功发送数据\n");

    RET = HTTPCli_getResponseStatus (&CLI);
    //ret = HTTPCli_readRawResponseBody (&CLI、RCVData、sizeof (RCVData));
    RET = HTTPCli_getResponseField (&CLI、RCVData、sizeof (RCVData)、&moreFlag);

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

    尊敬的 Charles:

    如上所述,我们使用 "https://postman-echo.com" 作为 主机名 将数据发布到服务器,但 我在调用此 HTTPCli_getResponseStatus (&CLI)时收到一个错误400

    通过使用" www.postman-echo.com " 作为主机名  、它运行良好。  

    我们需要使用"https://postman-echo.com" 作为 主机名来发布数据、如何解决此问题?

    /***** 定义 /
    #define HOSTNAME"">postman-echo.com  
    #define request_URI "/post"  
    #define content_type "application/json"  
    #define Authorization "基本"
    #define USER_AGENT "HTTPCli (ARM;TI-RTOS)"
    #define NTP_HOSTNAME " pool.ntp.org "
    #define ntp_port "123"
    #define ntp_servers 3
    #define ntp_servers_size (ntp_servers * sizeof (struct sockaddr_in)
    #define HTTPTASKSTACKSIZE 32768

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

    您好、 Senannas:

     您是否还可以显示 HOSTNAME、 Request_URI 和下面所示的#define 的其余部分的#define? 还请提供您为 ca[]插入的证书。  

    #定义 HOSTNAME  

    #define Request_URI  
    #define USER_AGENT "HTTPCli (ARM;TI-RTOS)"
    #define NTP_HOSTNAME " pool.ntp.org "
    #define ntp_port "123"
    #define ntp_servers 3
    #define ntp_servers_size (ntp_servers * sizeof (struct sockaddr_in)
    #define HTTPTASKSTACKSIZE  

    您应该能够通过调用 wolfSSL_Debugging _on()启用 wolfsl 调试。 如果在生成时 wolfsl 库期间启用了调试。 有关详细信息、请参阅此链接。  https://www.wolfssl.com/doxygen/group__Debug.html

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

    您好 Anusree

     看起来我们的消息相互交叉。 也请提供 ca[]。  

     

    通过使用 www.postman-echo.com 作为主机名  可以很好地运行。

    您能否确认 您能够从服务器向 MCU 客户端提供200 OK 的响应? 请详细说明此主机名的作用如何?  

    我们使用 "https://postman-echo.com" 作为 主机名 向服务器发布数据,但 我在调用此 HTTPCli_getResponseStatus (&CLI)时收到400错误消息

    400意味着客户端发送的请求不正确。 有关说明、请参阅下面的链接。  

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

     

    我可以使用  HTTPCli_readRawResponseBody 还是 HTTPCli_getResponseField 来读取数据吗? 在我的案例中,只有 HTTPCli_readRawResponseBody 工作。

    对不起,我真的不是一个狼群专家,也不是 http。 我认为这些 API 应该起作用、但我没有什么见解来解释它为什么不起作用。 这是我的建议。  

     1.您能否使用 HTTPCli_readRawResponseBody 或 HTTPCli_getResponseField 等相同 API 来尝试没有 TLS 的 HTTP POST 示例来读取响应? 如果它们在非 TLS 示例上工作、则证明调用它们没有问题。  

     2.您可以尝试使用 TLS 的 HTTPS GET 示例吗? 你能让它正常工作吗? 如果问题是由 GET 和 POST 之间的差异造成的、还是由于证书或其他原因造成的、这将有助于缩小问题范围?

     3.能否使用 Wireshark 解决问题?

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

    您好,Charles

    实际上我正尝试使用 https 将数据发布到服务器。 但我没有得到适当的响应。 但是、我尝试使用 http 将数据发布到服务器、并从服务器获得200 OK 的响应。

    / 证书 /

     -------- 开始证书-----
    MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADDBoMQswCQYDVQGEwJVUzEL
    MCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMp
    U3RhcmZpZWxIensYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQw
    NjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBoMQswCQYDVQGEWJVUzElMCMGA1UE
    ChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZp
    ZWxkIensYXNzIDIgQ2VydGlmaWNhdGlvbibBBdXRob3JpdHkwegMA0GCSqGSIb3
    DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf
    8MOh2tTYbitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIR1MvnsoFAZMej2YcOadN
    +lq2cwQlZut3f+dZxkqZJRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0
    X9tDkYI22WY8sbi5gv2cOj4QyDvBmVmepsZGT3/cVE8MC5fvj13c7JdBmzDI1aa
    K4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSNF4Azbl5KXZnJHoe0nRrA
    1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAgEDo4HFMIB0G
    A1UdDgQWBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBI2KMIGHgBS/X7fR
    zt0fhvRbVazc1xDCDqmI56FspGowaDELMAkGA1BhMCVVMxJTAjBgNVBAoTHFN0
    YXJmaWVsZCBUZWNobm9sb2dpZXMsIluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBD
    bGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8w
    DQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGsafPzWdqbAYcaT1epoXkJKtv3
    L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLMPUxA2IGvd56D
    eruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl
    xy16paq8U4Zt3VekyvggQQqto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynp
    VSJYACPq4xJDKVtHCN2MQWplBqjlIapBtJuhlbl90TSrE9atvNziPTnNvT51cKEY
    WQPJIrSPnNVeKtelttQKbfi3QBFGmh95DmK/D5fs4C8fF5Q=
    -------- 结束证书-----

    此证书来自此链接 https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/812332/rtos-ek-tm4c129exl-ti-rtos-https-post-sample

     我也尝试使用此 https://www.amazontrust.com/repository/AmazonRootCA1.pem 证书 、但也得到了相同的结果。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    实际上我正尝试使用 https 将数据发布到服务器。 但我没有得到适当的响应。 但我尝试使用 http 向服务器发布数据,并从服务器获得200 OK 响应。

    您好!

     感谢您的澄清。 它是适用于您的 HTTP、但不适用于 HTTPS。 由于您已经成功运行 HTTP、这个问题应该与诸如  HTTPCli_getResponseStatus、HTTPCli_readRawResponseBody 和 HTTPCli_getResponse Field 等 API 的使用无关 。  

     您是否能够使用这些 API 来筛选 HTTP 测试中所需的主体?  

     对于 HTTPS GET、您是否有相同的问题? 如果您可以让 HTTPS 开始工作、则问题与认证无关。 如果 HTTPS GET 也因相同的原因而失败、则很可能是由于认证。  

     您是否有机会打开 WolfSSL 调试。 再看这个链接。  

     如果在构建时已在 wolfsl 库中启用了调试,则应该能够通过调用 wolfSSL_Debugging ()来启用 wolfsl 调试。 有关详细信息、请参阅此链接。  https://www.wolfssl.com/doxygen/group__Debug.html

    因为我真的不是 WolfSSL 的专家,我建议你去 WolfSSL 论坛寻求帮助。 向他们展示您拥有的调试日志、并且希望他们能够提供一些指导。  https://www.wolfssl.com/forums/

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

    尊敬的 Charles:

    我完全处在一个错误的方向。 WolfSSL 库被添加到我的项目,但它从来没有使用过,希望它将被 TIRTOS 内部使用。  

    我已经使用以下函数创建了 WolfSSL 上下文。 并且我已成功验证了 ca 证书。

    CTx = wolfSSL_CTX_NEW (wolfTLSv1_2_client_method ());
    REt = wolfSSL_CTX_LOAD_VERIFY_BUFFER (ctx、ca、strlen (ca)、ssl_filletype_pem);

    如何 将此上下文 ctx 链接到 使用  HTTPCli_building (&CLI)创建的 CLI?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我方向完全错误。 WolfSSL 库被添加到我的项目,但它从来没有使用过,希望它将被 TIRTOS 内部使用。  [/报价]

    您好、Senannas、

     虽然我不是 WolfSSL 专家,但我认为现有的 https get 示例使用 WolfSSL 库。 你为什么认为 TI-RTOS 从未使用 WolfSSL? 当调用  TLS = TLS_create (TLS_method_client_TLSv1_2、&tlsParams、NULL)时、这应该使用底层 WolfSSL 库。  

     如果您看看调用栈、如下所示、您将看到 TLS_create 将带您 wolfSSL_CTX_NEW_Ex。 只需单步执行 TLS_create 即可跟踪调用栈。  

    之前、我要求您启用 WolfSSL 调试功能。 您有机会这么做吗? 让我再重复一下下面的内容。  

     如果在构建时已在 wolfsl 库中启用了调试,则应该能够通过调用 wolfSSL_Debugging ()来启用 wolfsl 调试。 有关详细信息、请参阅此链接。  https://www.wolfssl.com/doxygen/group__Debug.html

    因为我真的不是 WolfSSL 的专家,我建议你去 WolfSSL 论坛寻求帮助。 向他们展示您拥有的调试日志、并且希望他们能够提供一些指导。  https://www.wolfssl.com/forums/

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

    尊敬的 Charles:

    感谢对底层 wolfsl 调用的澄清。 我昨天也发现了。

    我启用了 wolfsl 调试、但它返回一个失败错误。  

    #ifdef DEBUG_WOLFSSL_ON
    RET= wolfSSL_Debugging _on();
    #endif /* DEBUG_WOLFSSL_ON */

    对于以下 HTTPCli_initSockAddr 函数、支持的 URI 格式。

    支持的 URI 格式为:
    *-[http(s]://]host_name[:port_number][/request_Uri]
    *

    以下哪一项使用是正确的?

    REt = HTTPCli_initSockAddr ((struct sockaddr *)&addr、"">https://postman-echo.com/post"、0);

    REt = HTTPCli_initSockAddr ((struct sockaddr *)&addr、"">https://postman-echo.com"、0);

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

    我启用了 wolfsl 调试、但它返回一个失败错误。  

    #ifdef DEBUG_WOLFSSL_ON
    RET= wolfSSL_Debugging _on();
    #endif /* DEBUG_WOLFSSL_ON */

    [/报价]

    是否使用重建 wolfsl 库 以获得调试支持?

    对于以下 HTTPCli_initSockAddr 函数、支持的 URI 格式。

    支持的 URI 格式为:
    *-[http(s]://]host_name[:port_number][/request_Uri]
    *

    以下哪一项使用是正确的?

    REt = HTTPCli_initSockAddr ((struct sockaddr *)&addr、"">https://postman-echo.com/post"、0);

    REt = HTTPCli_initSockAddr ((struct sockaddr *)&addr、"">https://postman-echo.com"、0);

    [/报价]

    我真的不知道。 我看到如下所示、即为 HOSTNAME 指定的443端口号。 当然、这适用于 使用 postman-echo.com 时的主机 ev-root.chain-demos.digicert.com。  

    #define HOSTNAME " ev-root.chain-demos.digicert.com:443"

    #define Request_URI "/"
    #define USER_AGENT "HTTPCli (ARM;TI-RTOS)"
    #define NTP_HOSTNAME " pool.ntp.org "
    #define ntp_port "123"
    #define ntp_servers 3
    #define ntp_servers_size (ntp_servers * sizeof (struct sockaddr_in)
    #define HTTPTASKSTACKSIZE 32768*2

    如果您想试用  ev-root.chain-demos.digicert.com、这里是认证。 但是、我无法让它为自己工作。 很抱歉我对 TLS 缺乏了解。 如果要尝试 ev-root.chain-demos.digicert.com:443、请先从 HTTPS Get 开始。  

    uint8_t ca[] =
    "MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs"
    "MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3"
    "d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j"
    "ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL"
    "MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3"
    "LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug"
    "RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm"
    "+9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW"
    "PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM"
    "xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB"
    "Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3"
    "hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg"
    "EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF"
    "MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA"
    "FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec"
    "nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z"
    "eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF"
    "hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2"
    "Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe"
    "vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep"
    "+OkuE6N36B9K";

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

    尊敬的 Charles:

    重建 wolfsl 后、收到调试日志。 它在某处卡住、重复相同的日志。 我已将日志共享给 Wolfsl 团队。  

    我将尝试" ev-root.chain-demos.digicert.com:443"服务器、让您知道。 谢谢。

    /***** 调试日志***** /

    启动 HTTPS GET 示例
    系统提供商设置为 SysMin。 停止目标以查看 ROV 中的任何 SysMin 内容。
    服务状态:DHCPC:已启用:000
    服务状态: DHCP:已启用:正在运行: 000
    添加的网络:IF-1:192.168.2.31
    服务状态:DHCPPC:已启用:正在运行:017
    (内部):13
    内容长度:13
    当前时间:星期二 Jun 2005:00:51 2023

    将 HTTPS POST 请求发送至'https://postman-echo.com'
    wolfSSL 进入 WOLFSSL_CTX_NEW_EX
    wolfSSL 进入 wolfSSL_Init
    wolfSSL 输入 wolfSSL_CertManagerNew
    wolfSSL 离开 WOLFSSL_CTX_NEW、返回0
    wolfSSL 进入 wolfSSL_CTX_LOAD_VERIFY_BUFFER
    添加 CA
    wolfSSL 进入 GetExploricitVersion
    wolfSSL 进入 GetMyVersion
    wolfSSL 进入 GetSerialNumber
    获取证书标头
    wolfSSL 进入 GetAlgoId
    wolfSSL 进入 GetObjectId()
    获取 Algo ID
    正在获取证书名称
    正在获取证书名称
    获得主题名称
    wolfSSL 进入 GetAlgoId
    wolfSSL 进入 GetObjectId()
    获取密钥
    已解析的过去密钥
    wolfSSL 进入 DecodeCertExtensions
    wolfSSL 进入 GetObjectId()
    wolfSSL 进入 DecodeSubjKeyId
    wolfSSL 进入 GetObjectId()
    wolfSSL 进入 DecodeAuthKeyId
    wolfSSL 进入 GetObjectId()
    wolfSSL 进入 DecodeBasicCaConstraint
    wolfSSL 进入 GetAlgoId
    wolfSSL 进入 GetObjectId()
    解析的新 CA
    释放解析的 CA
    释放程序 CA
    不错的自由人 CA
    wolfSSL 离开 AddCA、返回0
    wolfSSL 进入 SSL_NEW
    wolfSSL 离开 SSL_NEW、返回0
    wolfSSL 进入 SSL_SET_FD
    wolfSSL 离开 SSL_SET_FD、返回1
    wolfSSL 进入 wolfSSL_send()
    wolfSSL 进入 ssl_WRITE()
    握手未完成、正在尝试完成
    wolfSSL 进入 wolfSSL_negotiate
    wolfSSL 进入 SSL_CONNECT()
    增大的输出缓冲器

    缩小输出缓冲器

    连接状态:client_hello_sent
    增大的输入缓冲器

    接收的记录层消息
    wolfSSL 进入 DoHandShakeMsg()
    wolfSSL 进入 DoHandShakeMsgType
    处理服务器 hello
    wolfSSL 进入 VerifyClientSuite
    wolfSSL 离开 DoHandShakeMsgType(),返回0
    wolfSSL 离开 DoHandShakeMsg(),返回0
    增大的输入缓冲器

    接收的记录层消息
    wolfSSL 进入 DoHandShakeMsg()
    wolfSSL 进入 DoHandShakeMsgType
    正在处理证书
    加载对等器件的证书链
    将另一个证书放入链条中
    将另一个证书放入链条中
    将另一个证书放入链条中
    将另一个证书放入链条中
    wolfSSL 进入 GetExploricitVersion
    wolfSSL 进入 GetMyVersion
    wolfSSL 进入 GetSerialNumber
    获取证书标头
    wolfSSL 进入 GetAlgoId
    wolfSSL 进入 GetObjectId()
    获取 Algo ID
    正在获取证书名称
    正在获取证书名称
    获得主题名称
    wolfSSL 进入 GetAlgoId
    wolfSSL 进入 GetObjectId()
    获取密钥
    已解析的过去密钥
    wolfSSL 进入 DecodeCertExtensions
    wolfSSL 进入 GetObjectId()
    wolfSSL 进入 DecodeBasicCaConstraint
    wolfSSL 进入 GetObjectId()
    wolfSSL 进入 DecodeKeyUsage
    wolfSSL 进入 GetObjectId()
    wolfSSL 进入 DecodeSubjKeyId
    wolfSSL 进入 GetObjectId()
    wolfSSL 进入 DecodeAuthKeyId
    wolfSSL 进入 GetObjectId()
    wolfSSL 进入 DecodeAuthInfo
    wolfSSL 进入 GetObjectId()
    wolfSSL 进入 GetObjectId()
    wolfSSL 进入 DecodeCrlDist
    wolfSSL 进入 GetObjectId()
    目前尚不支持证书策略扩展。
    wolfSSL 进入 GetAlgoId
    wolfSSL 进入 GetObjectId()
    即将验证证书签名
    使用 RSA PKCSV15填充的 wolfSSL
    从链中添加 CA
    添加 CA
    wolfSSL 进入 GetExploricitVersion
    wolfSSL 进入 GetMyVersion
    wolfSSL 进入 GetSerialNumber
    获取证书标头
    wolfSSL 进入 GetAlgoId
    wolfSSL 进入 GetObjectId()
    获取 Algo ID
    正在获取证书名称
    正在获取证书名称
    获得主题名称
    wolfSSL 进入 GetAlgoId
    wolfSSL 进入 GetObjectId()
    获取密钥
    已解析的过去密钥
    wolfSSL 进入 DecodeCertExtensions
    wolfSSL 进入 GetObjectId()
    wolfSSL 进入 DecodeBasicCaConstraint
    wolfSSL 进入 GetObjectId()
    wolfSSL 进入 DecodeKeyUsage
    wolfSSL 进入 GetObjectId()
    wolfSSL 进入 DecodeSubjKeyId
    wolfSSL 进入 GetObjectId()
    wolfSSL 进入 DecodeAuthKeyId
    wolfSSL 进入 GetObjectId()
    wolfSSL 进入 DecodeAuthInfo
    wolfSSL 进入 GetObjectId()
    wolfSSL 进入 GetObjectId()
    wolfSSL 进入 DecodeCrlDist
    wolfSSL 进入 GetObjectId()
    目前尚不支持证书策略扩展。
    wolfSSL 进入 GetAlgoId
    wolfSSL 进入 GetObjectId()
    解析的新 CA
    释放解析的 CA
    释放程序 CA
    不错的自由人 CA
    wolfSSL 离开 AddCA、返回0
    wolfSSL 进入 GetExploricitVer

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

    您好,Charles

    启用 wolfsl 日志后、我们得到了调试日志。 wolfsl 返回-308表示套接字错误。

    wolfsl 调试日志:

    将 HTTPS POST 请求发送至'https://postman-echo.com'
    wolfSSL 进入 wolfSSL_Init
    wolfSSL 进入 WOLFSSL_CTX_NEW_EX
    wolfSSL 输入 wolfSSL_CertManagerNew
    wolfSSL 离开 WOLFSSL_CTX_NEW、返回0
    wolfSSL 进入 WOLFSSL_CTX_NEW_EX
    wolfSSL 输入 wolfSSL_CertManagerNew
    wolfSSL 离开 WOLFSSL_CTX_NEW、返回0
    wolfSSL 进入 wolfSSL_CTX_LOAD_VERIFY_BUFFER
    添加 CA
    wolfSSL 进入 GetExploricitVersion
    wolfSSL 进入 GetMyVersion
    wolfSSL 进入 GetSerialNumber
    获取证书标头
    wolfSSL 进入 GetAlgoId
    wolfSSL 进入 GetObjectId()
    获取 Algo ID
    正在获取证书名称
    正在获取证书名称
    获得主题名称
    wolfSSL 进入 GetAlgoId
    wolfSSL 进入 GetObjectId()
    获取密钥
    已解析的过去密钥
    wolfSSL 进入 DecodeCertExtensions
    wolfSSL 进入 GetObjectId()
    wolfSSL 进入 DecodeSubjKeyId
    wolfSSL 进入 GetObjectId()
    wolfSSL 进入 DecodeAuthKeyId
    wolfSSL 进入 GetObjectId()
    wolfSSL 进入 DecodeBasicCaConstraint
    wolfSSL 进入 GetAlgoId
    wolfSSL 进入 GetObjectId()
    解析的新 CA
    释放解析的 CA
    释放程序 CA
    不错的自由人 CA
    wolfSSL 离开 AddCA、返回0
    wolfSSL 进入 SSL_NEW
    wolfSSL 离开 SSL_NEW、返回0
    wolfSSL 进入 SSL_SET_FD
    wolfSSL 离开 SSL_SET_FD、返回1
    wolfSSL 进入 wolfSSL_send()
    wolfSSL 进入 ssl_WRITE()
    握手未完成、正在尝试完成
    wolfSSL 进入 wolfSSL_negotiate
    wolfSSL 进入 SSL_CONNECT()
    增大的输出缓冲器

    缩小输出缓冲器

    连接状态:client_hello_sent
    增大的输入缓冲器

    接收的记录层消息
    wolfSSL 进入 DoHandShakeMsg()
    wolfSSL 进入 DoHandShakeMsgType
    处理服务器 hello
    wolfSSL 进入 VerifyClientSuite
    wolfSSL 离开 DoHandShakeMsgType(),返回0
    wolfSSL 离开 DoHandShakeMsg(),返回0
    增大的输入缓冲器

    嵌入接收错误
    连接复位
    发生 wolfSSL 错误,错误=-308
    wolfSSL 离开 wolfSSL_negotiate、返回-1
    wolfSSL 离开 SSL_WRITE ()、返回-1
    wolfSSL 离开 wolfSSL_send(),返回-1
    wolfSSL 进入 SSL_GET_ERROR
    wolfSSL 离开 SSL_GET_ERROR、返回-308

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

    您好!

     我不知道为什么 套接字错误是-308错误代码。 我仍然认为它与那些我没有太多经验的认证有关。 很抱歉让您处于没有指导的状态。 您是否有机会向 WolfSSL 寻求一些关于什么可能导致-308的指导? 我们知道、在非 SSL 中、两个 get/post 都可以正常工作。  您是否通过了 HTTPCli_connect 线路?

     您是否尝试过 postman 以外的其他服务器?

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

    您好!

    我们  也 尝试了 ev-root.chain-demos.digicert.com:443.As per wolfsl -308是由于一些 套接字相关的问题。所以我对使用的套接字创建 API 感到怀疑。 我尝试了下面的 方法,但没有运气。 您能否 与您的专家核实一下如何使用  HTTPCli_initSockAddr API 来创建安全套接字。

    对于以下 HTTPCli_initSockAddr 函数、支持的 URI 格式。

    支持的 URI 格式为:
    *-[http(s]://]host_name[:port_number][/request_Uri]
    *

    以下哪一项使用是正确的?

    REt = HTTPCli_initSockAddr ((struct sockaddr *)&addr、"https://postman-echo.com/post"、0";

    REt = HTTPCli_initSockAddr ((struct sockaddr *)&addr、"https://postman-echo.com"、0";

     REt = HTTPCli_initSockAddr ((struct sockaddr *)&addr、 "https://postman-echo.com",HTTPCli_TYPE_TLS);

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

    您是否未通过 HTTPCli_initSockAddr、地址解析出现打印错误失败? 您是否在公司网络中运行此程序? 如果有防火墙阻止您访问互联网、您可能需要咨询您的 IT 部门。 您是否可以尝试使用其他网络(如家庭网络)。 这至少能证明您是否因为网络而遇到不同类型的错误。 代码可能仍会失败、但由于不同的错误、代码可能会多运行几行。  

    RET = HTTPCli_initSockAddr ((struct sockaddr *)&addr、HOSTNAME、0);
    如果(ret < 0){
    printError("httpsTask:地址解析失败",ret );

    您能否尝试  ret = HTTPCli_initSockAddr ((struct sockaddr *)&addr、"https://postman-echo.com:443"、0";

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

    HTTPCli_initSockAddr return Success ,但 HTTPCli_sendRequest ()总是返回错误-103 ,这导致套接字错误-308 (套接字上的错误条件)要运行 WOLFSSL 调试日志,HTTPCli_connect()总是成功。 此问题是否与 Cipher Suite 有关?

     

    RET = HTTPCli_initSockAddr ((struct sockaddr *)&addr、HOSTNAME、0);
    如果(ret < 0){
    printError("httpsTask:地址解析失败",ret );

    HTTPCli_params_init (&params);
    params.tls = TLS;

    REt = HTTPCli_connect (&CLI、(struct sockaddr *)&addr、0、&params);
    如果(ret < 0){
    printError ("httpsTask: connect failed"、ret);


    RET = HTTPCli_sendRequest (&CLI、HTTPStd_post、request_URI、false); //返回-103
    如果(ret < 0){
    printError("httpsTask: send failed",ret );

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    HTTPCli_sendRequest ()总是返回错误-103,这导致套接字错误-308 (套接字上的错误条件)要运行 WOLFSSL 调试日志,HTTPCli_connect()总是成功。 此问题是否与 Cipher Suite 有关?

    我认为它与密码套件有关、但很抱歉、我不是 WolfSSL 堆栈专家、所以无法在这里提供指导。 您是否有机会联系 WolfSSL、他们是否有任何建议?

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

    尊敬的 Charles:

    下面的错误信息是什么意思?

    TI.sysbios.grets.HeapMem:361行:内存中:handle=0x2001cba4、size=8324

    handle =0x2001cba4是什么意思? 尺寸= 8324意味着什么?

    如何解决该问题?

    我有另一个与程序执行相关的查询

    1)如何从异常终止中检索程序(abort)


    */李启明 /
    /*中止-异常程序终止。 当前只是停止执行。 */
    */李启明 /
    __attribute__((section (".text:abort"))
    void abort (void{
    #if defined (embed_cio_BP)
    __ asm (".global C$$EXITE");
    #if defined (__ 32 bis_)
    _asm ("C$$EXITE:.word 0xDEFED0FE");
    #else
    _asm (".align 4");
    #if defined (__ big_endian_)
    _asm ("C$$EXITE:.half 0xDEFE");
    #else
    _asm ("C$$EXITE:.half 0xD0FE");
    #endif /*__big_endian__*/
    #endif /*_32bis_*/

    #else /*!embedded_cio_BP */
    _asm (".global C$$EXIT");
    __ asm ("C$$EXIT:NOP");
    #endif

    for (;;);/*永久旋转*/

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

    您好,Charles

    堆问题已解决。 但有时, 当 使用 https 将数据发布到服务器时,我收到一个错误,如"00039.200 TcpTimeoutReTransmit Timeout" 和为什么得到这个错误?  

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

    您好 Anusree:

    堆问题已解决。 [/报价]

    您能先说明一下您做了哪些更改来解决堆问题吗? 我在上次回复中提供的建议是否有助于您解决该问题?

    但有时  使用 https 将数据发布到服务器时,我收到了类似于"00039.200 TcpTimeoutRexmt 重新传输超时"的错误,以及为什么会出现此错误?

    在这里你说"一段时间"。 这是否意味着它有时会在哪里工作? 换言之、当它工作时、您正在让 HTTPS 工作? 是正确的理解。  

    我发现这些文章讨论了这个错误。 您能看一下它们是否适用于您吗?

    https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/675774/rtos-tm4c1292ncpdt-tcptimeoutrexmt-retransmit-timeout--error-while-communicating-to-external-system-in-100-mbps?ReplyFilter=Answers&ReplySortBy=Answers&ReplySortOrder=Descending

    https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/627766/rtos-tm4c1294ncpdt-tcptimeoutrexmt-retransmit-timeout

    https://e2e.ti.com/support/processors-group/processors/f/processors-forum/574463/rtos-tcp-packet-loss-in-ti-rtos-ndk

    https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/674812/rtos-ek-tm4c1294xl-ndk-in-ti-rtos-for-tivac-2-16-1-14-can-get-into-a-state-where-unable-to-transmit-packets

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

    您能先说明一下您做了哪些更改来解决堆问题吗? 我在上次回复中提供的建议是否有助于您解决该问题?

    [/报价]

    您的最后一个回复帮助我解决堆问题。

    此处您说"某个时间"。 这是否意味着它有时会在哪里工作? 换言之、当它工作时、您正在让 HTTPS 工作? 是正确的理解。  [/报价]

    修复了将堆大小从90112减小到70926后的 TCP 超时问题。 但是、在将数据发布到服务器时出现了问题。 当时我使用了硬件支持的 wolfsl 库。

    现在、使用软件支持的 WolfSSL 库来保护设备、我的问题已经解决。

    但我真的想实施硬件支持的 wolfsl 库。  是否需要进行其他配置?

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

    您好 Anusree:

    您的最后一个回复帮助我解决堆问题。

    很高兴您的堆问题得到解决。  

    现在我的问题通过使用支持软件的 WolfSSL 库来解决,以保护设备。

    -您能详细说明一下您如何解决软件 WolfSSL 库? 您是否可以像以前所做的那样发布更新的代码片段? 以下是您上次发布的代码。 您修改了什么内容、使其这次使用软件库至少部分工作?

    /*************** HTTPS Post **************/
    
    bool moreFlag = false;
    char data[64],RCVData[400];
    int ret;
    int len;
    char CONTENT_LENGTH[3];
    struct sockaddr_in addr;
    
    TLS_Params tlsParams;
    TLS_Handle tls;
    
    
    //Data to be sent
    //strcpy(data, "{\"val\": 10}");
    strcpy(data, "testdata");
    len = strlen(data);
    sprintf(CONTENT_LENGTH, "%d", len);
    
    System_printf("\nData: %s\n", data);
    System_printf("len(int): %d\n", len);
    System_printf("CONTENT_LENGTH: %s\n", CONTENT_LENGTH);
    
    HTTPCli_Params params;
    HTTPCli_Struct cli;
    HTTPCli_Field fields[3] = {
    { HTTPStd_FIELD_NAME_HOST, HOSTNAME },
    { HTTPStd_FIELD_NAME_CONTENT_TYPE, CONTENT_TYPE },
    { NULL, NULL }
    };
    
    // Response field filters
    char respFields[2] = {
    HTTPStd_FIELD_NAME_CONTENT_LENGTH,
    NULL};
    
    startNTP();
    
    System_printf("Sending a HTTPS POST request to '%s'\n", HOSTNAME);
    System_flush();
    
    TLS_Params_init(&tlsParams);
    tlsParams.ca = ca;
    tlsParams.calen = calen;
    
    tls = TLS_create(TLS_METHOD_CLIENT_TLSV1_2, &tlsParams, NULL);
    if (!tls) {
    printError("httpsTask: TLS create failed", -1);
    }
    
    HTTPCli_construct(&cli);
    
    HTTPCli_setRequestFields(&cli, fields);
    
    HTTPCli_setResponseFields(&cli, respFields);
    
    
    ret = HTTPCli_initSockAddr((struct sockaddr *)&addr,HOSTNAME, 0);
    if (ret < 0) {
    printError("httpsTask: address resolution failed\n", ret);
    }
    
    params.tls = tls;
    HTTPCli_Params_init(&params);
    
    
    ret = HTTPCli_connect(&cli, (struct sockaddr *)&addr, 0, &params);
    if (ret < 0) {
    printError("httpsTask: connect failed\n", ret);
    }
    
    
    ret = HTTPCli_sendRequest(&cli, HTTPStd_POST, REQUEST_URI, true);
    if (ret < 0) {
    printError("httpsTask: send failed\n", ret);
    }
    else
    {
    System_printf("sendRequest successful\n");
    }
    
    ret = HTTPCli_sendField(&cli, HTTPStd_FIELD_NAME_CONTENT_LENGTH, CONTENT_LENGTH, false);
    ret = HTTPCli_sendField(&cli, HTTPStd_FIELD_NAME_CONTENT_TYPE, CONTENT_TYPE, true);
    
    if (ret < 0) {
    printError("httpTask: send failed\n", ret);
    }
    else {
    System_printf("sendField successful\n");
    }
    ret = HTTPCli_sendRequestBody(&cli, data, strlen(data));
    if (ret < 0) {
    printError("httpTask: Variable data couldn't be sent\n", ret);
    }
    else {
    System_printf("Data sent successfully\n");
    }
    
    ret = HTTPCli_getResponseStatus(&cli);
    //ret = HTTPCli_readRawResponseBody(&cli, RCVData, sizeof(RCVData));
    ret = HTTPCli_getResponseField(&cli, RCVData, sizeof(RCVData), &moreFlag);

    -您连接到了哪个服务器? 是 postman-echo.com 还是任何服务器?

    -之前您在连接到 post-echo.com 时遇到问题,并且询问服务器时间是否正确。 您是如何解决的? 问题是否完全与堆分配有关?

    -您使用的是哪一个 ca[]? 您可以显示证书吗?

    但是我真的想实施硬件支持的 wolfsl 库。  是否需要额外配置?

    请见下方。 在构建项目时、可以链接两个 wolfsl 库。 您可以链接到 wolfssl_tm4c_hw.aem4f 库。 这一 wolfsl 库将利用 TM4C129硬件安全引擎(如 AES)进行数据加密和解密。 如果要使用软件库、则需要链接到 wolfssl.aem4f。 如果有某些特征您想成为  wolfssl.aem4f 或 wolfssl_tm4c_hw.aem4f 的一部分  、那么您需要重建 wolfssl 库。  

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

    您好,Charles  

    代码保持不变、这是主机名声明中唯一的更改、即 www.postman-echo.com:443"。

    第二个问题是因为 我们 最初使用 wolfssl_tm4c_hw.aem4f 库、但该库不起作用。 后来 我们更改为软件库 wolfssl.aem4f.now 我想使用 AES 硬件加速器 wolfssl_tm4c_hw.aem4f  。如果需要安装使用 该硬件模块 吗?

    使用的证书:  

    uint8_t ca[]="MIIEDzCCAvegAwIBAGIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQGEwJVUzEl\
    MCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMp\
    U3RhcmZpZWxIensYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQw\
    NjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBoMQswCQYDVQGEWJVUzElMCMGA1UE\
    ChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZp\
    ZWxkIensYXNzIDIgQ2VydGlmaWNhdGlvbibBBdXRob3JpdHkwegMA0GCSqGSIb3\
    DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf\
    8MOh2tTYbitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIR1MvnsoFAZMej2YcOadN\
    +lq2cwQlZut3f+dZxkqZJRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0\
    X9tDkYI22WY8sbi5gv2cOj4QyDvBmVmepsZGT3/cVE8MC5fvj13c7JdBmzDI1aa\
    K4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSNF4Azbl5KXZnJHoe0nRrA\
    1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAgEDo4HFMIB0G\
    A1UdDgQWBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBICKMIGGBS/X7fR\
    zt0fhvRbVazc1xDCDqmI56FspGowaDELMAkGA1BhMCVVMxJTAjBgNVBAoTHFN0\
    YXJmaWVsZCBUZWNobm9sb2dpZXMsIluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBD\
    bGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8w\
    DQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGsafPzWdqbAYcaT1epoXkJKtv3\
    L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLMPUxA2IGvd56D\
    eruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl\
    xy16paq8U4Zt3VekyvggQqto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynp\
    VSJYACPq4xJDKVtHCN2MQWplBqjlIapBtJuhlbl90TSrE9atvNziPTnNvT51cKEY\
    WQPJIrSPnNVeKtelttQKbfi3QBFGmh95DmK/D5fs4C8fF5Q=";

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    代码保持不变,主机名声明中唯一的更改是 www.postman-echo.com:443".

    感谢您的澄清。 一年前、我曾建议您尝试 www.postman-echo.com:443。 以下是我之前的答复。  

    您是否未通过 HTTPCli_initSockAddr、地址解析出现打印错误失败? 您是否在公司网络中运行此程序? 如果有防火墙阻止您访问互联网、您可能需要咨询您的 IT 部门。 您是否可以尝试使用其他网络(如家庭网络)。 这至少能证明您是否因为网络而遇到不同类型的错误。 代码可能仍会失败、但由于不同的错误、代码可能会多运行几行。  

    RET = HTTPCli_initSockAddr ((struct sockaddr *)&addr、HOSTNAME、0);
    如果(ret < 0){
    printError("httpsTask: 地址解析失败",ret );

    您能否尝试 ret = HTTPCli_initSockAddr ((struct sockaddr *)&addr、"https://postman-echo.com:443"0";

    第二个问题是因为 我们 最初使用的是 wolfssl_tm4c_hw.aem4f 库,但该库不起作用。 后来 我们更改为软件库 wolfssl.aem4f.now 我想使用 AES 硬件加速器 wolfssl_tm4c_hw.aem4f  。如果需要使用 硬件模块进行任何安装 吗?

    TM4C129EKCPDT 支持 AES。 我想  wolfssl_tm4c_hw.aem4f 库会使用 AES 加速器。 您的问题是 wolfssl_tm4c_hw.aem4f 库不调用 AES 加速器或者它调用 AES 加速器、但不返回正确的加密/解密 数据。 如果前者、我建议您联系 WolfSSL。 我不知道是否需要首先启用任何宏、以便可以重建 wolfssl_tm4c_hw.aem4f 库。