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:器件 CC3200MOD

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

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

器件型号:CC3200-LAUNCHXL
Thread 中讨论的其他器件:CC3200

您好,  

我们使用 Wi-Fi 连接通过 CC3200上的 TCP IP 协议栈开发了 HTTP 服务器1.1。

如何使用 SSL 使用安全连接,如何在 CC3200中确保套接字连接套接字的安全  

CC3200中是否有任何库可用于安全连接?

请在这方面提供帮助。

谢谢 、此致
Shailendra sen

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

    您好!

    CC3200内部集成了 SSL/TLS 堆栈。 只需正确创建安全套接字并设置证书等参数即可。 最适合您的起点可以是 SDK 示例 WebSocket _Simple 和 http 服务器库(\netapps\http\server\)。 此库集成了安全的 http 服务器、可能是您的理想选择。

    其他资源:

    (注意:CC3200一次仅支持两个安全套接字)

    1月

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

    您好,  

    我将在这里共享套接字代码、用于测试 postman 的 h secure client、  

    我已经生成了 serverkey.der 和 servercert.der、并按照 CC 3200文档中的说明进行了刷写。

    稍后我将尝试从 postman 工具进行连接,我还提供了相同的 serverkey.der 和 servercert.der,

    我也在这里挂着鲨鱼的记录,同时也在给 postman 的 GET 请求。

    IP 为192.168.1.1要查看捕获 packet.it 在从客户端发送 SYN 数据包时失败,需要在服务器端纠正一些问题,请在这方面提供帮助。

    //
    //版权所有(C) 2014 Texas Instruments Incorporated
    //
    //保留所有权利。 德州仪器(TI)公司的财产。
    //使用、复制或披露此代码的受限权限为
    //通过合同授予。
    //未经的书面许可,不得使用该程序
    // Texas Instruments Incorporated 或违反条款和条件
    //提供本计划的协议中规定,
    //并且在任何情况下都不能与非 TI 连接器件一起使用。
    //
    //


    /**
     *@defgroup HttpSocket
     *此模块执行所有 HTTP 套接字操作
     *
     *@{
     *

    #include
    #include
    #include "simplelink.h"

    #include "hw_types.h"


    #include "OSI.h"

    #define OSI_DELAY (x)  OSI_SLEEP (x);//操作系统空闲

    int OpenTCPServerSocket (unsigned int uiPortNum)

     int iSockDesc、iRetVal;
     saddr_in sServerAddress;
     SlSockNonBlocking_t enableOption;
     enableOption.NonblockingEnabled = 1;

     //
     //打开安全套接字
     //
     if (443 =uiPortNum)
     {
     iSockDesc = sl_Socket (sl_AF_iNet、sl_sock_stream、sl_SEC_Socket);

    否则//不安全

    iSockDesc = sl_Socket (sl_AF_iNet、sl_sock_stream、sl_IPPROTO_TCP);


     if (iSockDesc < 0)
     {
       返回-1;
     }

    // if (443 =uiPortNum)
    // {
    // ////非阻塞套接字-启用非阻塞模式
    //  iRetVal = sl_SetSockOpt (iSockDesc、SOL_Socket、SL_SO_SECMETHOD、&enableOption、sizeof (enableOption));
    // }
    // 否则
    // {
      iRetVal = sl_SetSockOpt (iSockDesc、SOL_Socket、sl_SO_NONBLOCKING、enableOption、sizeof (enableOption));
    // }
      if (iRetVal < 0)
      {
        CloseTCPServerSocket (iSockDesc);
      }
        返回-1;
    // }

     if (443 =uiPortNum)
     {
    iRetVal = sl_SetSockOpt (iSockDesc、sl_SOL_Socket、sl_SO_SECURE_FILESS_PRIVATE_FILE_NAME、sl_SSL_SRV_KEY、strlen (sl_SSL_SRV_KEY));
    if (iRetVal < 0)

    CloseTCPServerSocket (iSockDesc);
    返回-1;

      iRetVal = sl_SetSockOpt (iSockDesc、sl_SOL_Socket、sl_SO_SECURE_FILEST_CERTIFICATE_FILE_NAME、sl_SSL_SRV_CERT、strlen (sl_SSL_SRV_CERT));
    if (iRetVal < 0)

    CloseTCPServerSocket (iSockDesc);
    返回-1;



     //
     //绑定-为套接字分配端口
     //
     sServerAddress.Sin_Family = AF_iNet;
     sServerAddress.Sin_addr.s_addr = htonl (INADDR_ANY);
     sServerAddress.Sin_port = htons (uiPortNum);

     if (bind (iSockDesc,(struct sockaddr*)&sServerAddress,sizeof (sServerAddress))!= 0)
     {
      CloseTCPServerSocket (iSockDesc);
      返回-1;
     }

     返回 iSockDesc;


    int CreateTCPServerSocket (unsigned int uiPortNum)

     int iSockDesc =-1;
     unsigned char connectRetries = 0;

     while (connectRetries +< SERVER_MAX_SETUP_RETRY)
     {
      iSockDesc = OpenTCPServerSocket (uiPortNum);

      IF (iSockDesc < 0)
      {
       继续;
      }

      if (监听(iSockDesc、HTTP_CORE_MAX_connections)!= 0)
      {
       CloseTCPServerSocket (iSockDesc);
       iSockDesc =-1;
       继续;
      }
      其他
      {
       connectRetries = 0;
       中断;
      }
     }

     返回 iSockDesc;


    int CloseTCPServerSocket (int iSockDESC)

     int ittr = 0;

     if (iSockDesc < 0)
     {
      返回0;
     }

     操作
     {
      if (sl_close (iSockDESC)>=0)
      {
       iSockDesc =-1;
       //HttpDebug (DEBUGCOM、"HTTP 服务器套接字已关闭\n\r\n);
       返回0;
      }
      其他
      {
      //HttpDebug (DEBUGCOM、"\n HTTP 客户端套接字关闭错误\n\n");
       OSI_DELAY (500);//等待500ms
      }
      ITTR++;
     }while (ittr < 3);

     返回-1;


    int CreateTCPCLientSocket (int iSockDesc)

     saddr sClientAddr;
     SlSockklen_t uiClientAddrLen = sizeof (sClientAddr);
     int sock =-1;
     SlTimeval_t timeVal;
     SlSockNonBlocking_t enableOption;

     sock =接受(iSockDesc、&sClientAddr、&uiClientAddrLen);
     if (sock >= 0)
     {
      enableOption.NonblockingEnabled = 0;

      //阻塞套接字-启用阻塞模式
      if (sl_SetSockOpt (sock、SOL_socket、sl_SO_nonblocking、enableOption、sizeof (enableOption))< 0)
      {
       CloseTCPClientSocket (sock);
       返回-1;
      }

      timeVal.tv_sec = 1;       // 1秒
      timeVal.tv_usec = 0;       //微秒。 10000微秒分辨率
      if (((sl_SetSockOpt (sock、SOL_socket、sl_SO_RCVTIMEO、&timeVal、sizeof (timeVal)))< 0)
      {
       CloseTCPClientSocket (sock);
       返回-1;
      }//启用接收超时
     }

     返回袜子;


    int CloseTCPClientSocket (int iSockDESC)

     int ittr = 0;

     if (iSockDesc < 0)
     {
      返回0;
     }

     操作
     {
      if (sl_close (iSockDESC)>=0)
      {
       iSockDesc =-1;
       //HttpDebug (DEBUGCOM、"\n HTTP 客户端套接字已关闭\n\r\n);

      返回0;
      }
      其他
      {
      //HttpDebug (DEBUGCOM、"\n 客户端套接字关闭错误\n\n");
       OSI_DELAY (500);//等待500ms
      }
      ITTR++;
     }while (ittr < 3);

     返回-1;


    int ClientSocketSend (长套接字、char * buffer、unsigned int len)

     int send_len = 0、Ittr = 0;

     操作
     {
      send_len =(int) send ((int) socket、buffer、(int) len、0);

      if (send_len >0)
      {
       if (len!= send_len)
       {
        //HttpDebug (DEBUGCOM、"客户端发送长度不匹配%d \n\r\n、SEND_Len);
        send_len =-1;
       }
       返回 SEND_Len;
      }
      否则、如果(send_len!= sl_EAGAIN)
      {
      //HttpDebug (DEBUGCOM、"\n 客户端套接字发送错误%d\n\r\n、send_len);
      返回-1;
      }

      Ittr++;

     } while (((sl_EAGAAIN = send_len));

     //HttpDebug (DEBUGCOM、"\n 客户端发送超时%d\n\r\n、send_len);

     返回-1;
    }  

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

    您好 、Shailendra、

    请描述您看到的问题、而不是包含您的代码。 此外、Jan 还为您提供了一些非常好的信息、帮助您了解安全套接字如何在我们的器件上工作、如何设置安全套接字以及如何使用安全套接字的工作示例。 请参阅这些资源。 如果仍有问题、请描述您看到的确切问题。 提供相关的错误代码和控制台日志。 如果可能、请通过串行 wifi 示例进行操作。

    Jesu

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

    您好、Shailendra、

    我简单地看了一下您的代码、但我没有发现任何明显的错误。 如果没有调试、则很难确定问题的原因。 抱歉、我无法调试您的代码。 如果在 SYN 数据包连接失败,则表明您的服务器没有侦听或有外部块连接。 但我只猜测。

    请遵循上述 Jesu 的建议。

    1月

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

    您好、Jesu、  

    感谢您的回复,  

    问题是我尝试使用 postman 工具从 http 客户端连接到 http 服务器。  

    因此无法从服务器获取响应,现在我更改了 Postman 中的设置,没有设置任何发送 GET 命令的证书,此外,这是从服务器获取响应,但当客户端发送“客户端 Hello”时,服务器会发送 FIN 数据包。

    因此、安全套接字连接无法与我共享的上述服务器套接字代码一起工作。

    我已附加 PNG 文件、握手的快照,如果服务器端的某些内容可以改进或缺少,  

    请提供建议和帮助。

    谢谢、此致

    Shailendra Sen.

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

    您好、Shailendra、

    我不熟悉 postman、但通常包括两侧所需的证书、具体取决于您使用的身份验证类型、每侧的私钥就是所需的。 我注意到 Postman 有一个社区论坛。 也许您会问服务器为什么没有响应?

    Jesu

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

    您好、Jesu、

    感谢您的回复、

    现在我们可以握手,我将屏幕快照附加 到这里,在屏幕快照中,所有客户端服务器 TLS 握手都会发生,但在该套接字连接关闭后,没有通过 安全套接字连接从 postman 工具获取呼叫数据,  

    因此、在 CC 3200中的 TLS/SSL 握手中、标准握手机制 是消息流正确、我随附握手消息的屏幕截图、请在这方面查看并提供帮助。   

    谢谢、此致

    Shailendra Sen.

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

    您好、Shailendra、  

    似乎您可以设置证书,但服务器没有响应客户端密钥交换包。 服务器应发送一个服务器完成的数据包、这意味着握手已完成、数据可以安全地交换。 我建议您检查 postman 社区以了解服务器为何没有响应。

    Jesu