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:HTTPS 客户端连接抛出-102错误

Guru**** 2874030 points

Other Parts Discussed in Thread: UNIFLASH, CC3200

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/978332/cc3200-https-client-connection-throws--102-error

器件型号:CC3200
主题中讨论的其他器件:UNIFLASH

您好!

我已使用 uniflash 将根 CA 上传到 C3200。  

我已经尝试使用 DER、cer、CRT 和 pem 文件、但它始终抛出-102错误

我有什么问题了。  

您能否共享任何示例代码或设置 HTTPS 的分步配置指南。

 此致、

Sundar

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

    很难从-102错误代码中判断问题到底是什么。

    如果您可以在调用"ret = connect (...)"后在 HTTPCLI_CONNECT()(在 WebClient/httpcli.c 中)中添加打印内容或设置断点、则返回值("ret")应提供更多信息。

    如果 ca 正确,并且在   应用程序中调用 HTTPCLI_setSecureParams()时在 secParams 中设置了文件(“/cert/129.cer”)的正确路径,则 DER 格式应该起作用。

    BR、

    Kobi

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

    你(们)好

    您能否共享任何示例代码或设置 HTTPS 的分步配置指南。

    我们正在努力实施 HTTPS   

     您问:

    “如果您可以在调用“ret = connect(...)”后在 HTTPCLI_CONNECT()(在 WebClient/httpcli.c 中)中添加打印内容或设置断点,则返回值(“ret”)应该更有用

    我找不到“ret = connect(...)” 在“In WebClient/httpcli.c)”中!?? 您能更具体吗?

    如果 ca 正确,并且在   应用程序中调用 HTTPCLI_setSecureParams()时在 secParams 中设置了文件(“/cert/129.cer”)的正确路径,则 DER 格式应该起作用。”

    证书文件扩展名应该是.der 还是.cer ?  或者、证书格式是否应该具有 extension.der、且路径是否具有扩展名.cer?

     

     

     

    请提供更多详细信息和具体信息    

     

    我不理解您对设置的疑问,您是否会更清楚、更详细?

     

     

    以下是我的代码:

     

    #define     SL_SSL_CA_CERT"/cert/129.cer

     

    静态 int ConnectToHTTPServer (HTTPCL_Handle https 客户端)

       long lRetVal =-1;

       struct sockaddr_in addr;

     

       slDateTime_t dt;

          struct HTTPCLI_SecureParams sparams;

          /*设置当前日期以验证证书*/

          DT.SL_TM_DAY = 12;

          DT.SL_TM_mon = 2;

          DT.SL_TM_year = 2021;

          DT.SL_TM_Hour = 9;

          DT.SL_TM_MIN = 0;

          DT.SL_TM_sec = 0;

          SL_DevSet (SL_DEVICE_General_CONFIGURATION、

          SL_DEVICE_General_configuration_date_time、

          sizeof (slDateTim_t)、(unsigned char *)(&dt));

     

          /*安全参数*/

          sparams.method.secureMethod = SL_SO_SEC_METHOD_TLSv1_2;

          sparams.mask.secureMask = SL_SEC_MASK_TLS_RSA_ITH_AES_256_CBC_SHA;

          strncpy (sparams.cafile、sl_SSL_CA_CERT、sizeof (sl_SSL_CA_CERT));

          sparams.privkey[0]= 0;

          sparams.cert[0]= 0;

          sparams.dhkey[0]= 0;

           HTTPCLI_setSecureParams (&sparams);

     

     

    #ifdef use_proxy

       struct sockaddr_in paddr;

       paddr.sin 系列= AF_iNet;

       paddr.sin 端口= htons (proxy_port);

       paddr.sin_addr.s_addr = sl_Htonl (proxy_IP);

       HTTPCLI_setProxy (struct sockaddr *) paddr);

    #endif

     

       /*解析主机名/IP */

       lRetVal = sl_NetAppDnsGetHostByName ((signed char *) host_name、

                                             strlen ((const char *) host_name)、

                                             &g_ulDestinationIP、sl_AF_iNet);

       if (lRetVal < 0)

       {

         UART_PRINT ("ConnectToHTTPServer 失败111 ");

     

        ASSERT_ON_ERROR (GET_HOST_IP_FAILED);

       }

       UART_PRINT ("\r\nConnectToHTTPServer 222");

     

     

       /*设置 HTTP 连接的输入参数*/

       Addr.Sin_Family = AF_iNet;

       Addr.sin 端口= htons (host_port);

       addr.sin addr.s_addr = sl_Htonl (g_ulDestinationIP);

       UART_PRINT ("\r\nConnectToHTTPServer 333 ");

      

       HTTPCLI_con构(https 客户端);

     

     

       UART_PRINT ("\r\nConnectToHTTPServer 444");

       UART_PRINT ("\r\nHTTPServer 主机名:%s IP 地址:%d.%d.%d.%d "、

     

        host_name、sl_IPv4_byte (g_ulDestinationIP、3)、

                          SL_IPV4_BYTE (g_ulDestinationIP、2)、

                          SL_IPV4_BYTE (g_ulDestinationIP、1)、

                          SL_IPV4_BYTE (g_ulDestinationIP、0));

     

     

       

        lRetVal = HTTPCli_connect (https 客户端、(struct sockadr *)&addr、HTTPCL_TYPE_TLS、NULL);

       如果(lRetVal < 0)

       {

           UART_PRINT ("\r\n 连接到服务器失败。 错误(%d)"、lRetVal);

           ASSERT_ON_ERROR (SERVER_CONNECT_FAILED);

     

       }

       其他

       {

           UART_PRINT ("\r\n 成功创建到服务器的连接");

       }

     

       返回 lRetVal;

    我是否需要在 Uniflash 的用户文件或系统文件部分中添加 DER 文件? 请确认

    此致、

    Sundar

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

    应将证书添加为用户文件。

    代码看起来不错-我想您是基于"http 客户端演示"、这是一个很好的参考。

    该应用程序与 WebClient 库链接、该库包含在 SDK 安装中的 NetApp/http 文件夹下(预编译和源代码可用)。

    您可以打开 WebClient 项目、找到并更改我之前提到的代码-在这种情况下、您需要重建库、然后使用新库构建应用 (或者、您可以从库中复制相关文件并将其添加到您的应用项目中-在这种情况下、您需要将 WebClient 文件夹添加到项目的包含路径中)。

    HTTP 库使用 NWP 驱动程序的 API (例如 sl_Connect)。 我们需要获取 sl_Connect 的返回代码以更好地了解问题。

    BTW。 我假设这是一个新设计。 为什么选择 CC3200?  

    适用于下一代 CC3220器件的 SDK 更易于使用、并且会定期获取软件更新(SDK 每季度更新一次)。  

    BR、

    Kobi

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

    您好、Kobi、

    感谢您的输入。 它确实有很大帮助。 我已进行以下2项更改并将其固定。

    我已将云服务器从 Window Server 2019更改为 Window Server 2016

    我从不同供应商处购买了不同的证书(Digi Cert)

    现在、我在设置 HTTPS 证书验证的日期时间时遇到问题。

    我只能购买2年有效期证书。 如果我对日期和时间进行硬编码、我必须在2年后重新刷写程序。

    是否有任何其他方法来查找日期时间。 我们的一个客户只允许端口443。 他挡住了端口80。

    请帮助我们完成项目的最后阶段。

    此致、

    Sundar

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

    请检查使用 SNTP 协议检索系统时间的 get_time 示例。

    BR、

    Kobi

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

    您好、Kobi、

    感谢您的回答。 我们实现了相同的功能、并且工作正常。 我还需要遵循 CC3235的 get_time 示例吗?

    此致、

    Sundar

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

    是的、请检查 CC3235 SDK 中的 local_time 示例。

    BR、

    Kobi

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

    谢谢 Kobi。

    此致、

    Sundar