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.

[参考译文] CC3235MODAS:SimpleLinkNetAppRequestEventHandler,未使用 https 获取事件

Guru**** 2560390 points
Other Parts Discussed in Thread: UNIFLASH

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/1073812/cc3235modas-simplelinknetapprequesteventhandler-not-getting-event-with-https

部件号:CC3235MODAS
《线程》中讨论的其他部件:UNIFLASHCC3235S

TI 专家:您好!

我正在使用 SimpleLinkNetAppRequestEventHandler 来处理来自 HTML 页面的获取/发布请求。 因此,Fat 可以与 http 服务器配合使用,但现在当我从 Uniflash 启用了安全 http 服务器时,在此之后我无法接收 SimpleLinkNetAppRequestEventHandler 中的任何事件以进行 POST 请求。  

我做了什么错?   

谢谢

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

    您是否能够运行本地 OTA 示例? 此请求使用 POST 请求,默认情况下使用安全连接。

    如果您正确设置了证书和密钥-这将会起作用。 您还需要设置 SL_NetApp_HTTP_primary_port_security_mode。

    请参阅启用 HTTP 服务器的代码示例:

    typedef struct
    {
        uint16_t primaryPort;   /* set to primary port or 0 to use default (80) */
        uint16_t secondaryPort; /* set to secondary port or 0 to use default (no secondary) */
        char *pServerCert;      /* set to HTTPS server's certificate, or to NULL (when using HTTP) */
        char *pServerKey;       /* set to HTTPS server's private key (null when usign HTTP) */
        char *pClientRootCa;    /* set to Client root CA (if needed), or to NULL (if not needed) */
    } HTTPSRV_IF_params_t;
     
    //*****************************************************************************
    //
    //! \brief  This function configures the HTTPS server
    //!
    //! \param  pServerCert         Server's Certificate filename (NULL if no security is needed)
    //!
    //! \param  pServerKey          Server's Private Key filename
    //!
    //! \param  pClientRootCACert   Clients' root CA (if client authentication is needed)
    //!
    //! \return NetApp error codes or 0 upon success.
    //!
    //*****************************************************************************
    int HTTPSRV_IF_config(HTTPSRV_IF_params_t *pSrvParams)
    {
        int rc = 0;
        int status = 0;
        SlFsFileInfo_t FsFileInfo;
        uint16_t primaryPort = DEFAULT_HTTP_SRV_PORT;
        uint16_t secondaryPort = 0;
        uint8_t securityMode = 0;
        uint8_t secondaryPortEnable = 0;
    
        /* By default - only set primary to HTTP (not secure) port
         */
    
    
        if(pSrvParams)
        {
            /* Update the primary/secondary ports if needed */
            if(pSrvParams->primaryPort != 0)
            {
                primaryPort = pSrvParams->primaryPort;
            }
            secondaryPort = pSrvParams->secondaryPort;
    
            /* Check for HTTPS params */
            if(pSrvParams->pServerCert)
            {
                LOG_DEBUG("Configure Server for secured mode...");
                securityMode = 1;
                /* Check if the file used for SSL exists in the FS */
                status = sl_FsGetInfo((const uint8_t *)pSrvParams->pServerCert, 0, &FsFileInfo);
                if(status < 0)
                {
                    if (status == SL_ERROR_FS_FILE_NOT_EXISTS)
                    {
                        LOG_ERROR("File %s status=SL_ERROR_FS_FILE_NOT_EXISTS\r\n",pSrvParams->pServerCert);
                    }
                    else
                    {
                        LOG_ERROR("Error sl_FsOpen %s, Status=%d\r\n", pSrvParams->pServerCert, status);
                    }
                    return status;
                }
                /* Check if the file used for SSL key exists in the FS */
                status = sl_FsGetInfo((const uint8_t *)pSrvParams->pServerKey, 0, &FsFileInfo);
                if(status < 0)
                {
                    if (status == SL_ERROR_FS_FILE_NOT_EXISTS)
                    {
                        LOG_ERROR("File %s status=SL_ERROR_FS_FILE_NOT_EXISTS\r\n",pSrvParams->pServerKey);
                    }
                    else
                    {
                        LOG_ERROR("Error sl_FsOpen %s, Status=%d\r\n", pSrvParams->pServerKey, status);
                    }
                    return status;
                }
                /* Set the file names used for SSL key exchange */
                setNetAppHttp(&rc, SL_NETAPP_HTTP_DEVICE_CERTIFICATE_FILENAME,
                              strlen((char *)pSrvParams->pServerCert), (const uint8_t *)pSrvParams->pServerCert);
    
                setNetAppHttp(&rc, SL_NETAPP_HTTP_PRIVATE_KEY_FILENAME,
                              strlen((char *)pSrvParams->pServerKey), (const uint8_t *)pSrvParams->pServerKey);
    
                if(pSrvParams->pClientRootCa)
                {
                    setNetAppHttp(&rc, SL_NETAPP_HTTP_CA_CERTIFICATE_FILE_NAME,
                                  strlen((char *)pSrvParams->pClientRootCa), (const uint8_t *)pSrvParams->pClientRootCa);
                }
            }
        }
        setNetAppHttp(&rc, SL_NETAPP_HTTP_PRIMARY_PORT_NUMBER,
                      sizeof(primaryPort), (uint8_t *)&primaryPort);
        if(secondaryPort)
        {
            /* Enable secondary HTTP port (can only be used for redirecting
             connections to the secure primary port) */
            setNetAppHttp(&rc, SL_NETAPP_HTTP_SECONDARY_PORT_NUMBER,
                          sizeof(secondaryPort), (uint8_t *)&secondaryPort);
            secondaryPortEnable = 1;
        }
        setNetAppHttp(&rc,
                      SL_NETAPP_HTTP_SECONDARY_PORT_ENABLE,
                      sizeof(secondaryPortEnable),
                      &secondaryPortEnable);
    
        setNetAppHttp(&rc,
                      SL_NETAPP_HTTP_PRIMARY_PORT_SECURITY_MODE,
                      sizeof(securityMode),
                      &securityMode);
    
        if(rc >= 0)
        {
            rc = sl_NetAppStop(SL_NETAPP_HTTP_SERVER_ID);
            LOG_DEBUG("HTTP Server Stopped");
    
            rc = sl_NetAppStart(SL_NETAPP_HTTP_SERVER_ID);
            while (rc == SL_ERROR_HTTP_SERVER_ENABLE_FAILED)
            {
                sleep(1);
                rc = sl_NetAppStart(SL_NETAPP_HTTP_SERVER_ID);
            }
    
            LOG_DEBUG("HTTP Server Re-started");
        }
        return rc;
    }
    
     

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

    您好,

    感谢您的及时回复。 我使用云 OTA 作为参考代码。 我在这里附加了我用来建立安全服务器的功能,它运行正常,能够毫无问题地访问 https 服务器,还可以添加和删除配置文件功能, 但这样做后,我没有从用于设备配置参数的 html 页面获得任何置换请求。

    int32_t ConfigureHttpsServer(void)
    {
        int32_t retVal = 0;
        int32_t status = 0;
        uint8_t httpsPort[] = { 0xBB, 0x01 }; /* 0x1BB = 443 */
        uint8_t secondaryPort[] = { 0x50, 0x00 }; /* 0x050 = 80 */
        uint8_t secondaryPortEnable[] = { 0x1 };
        uint8_t securityMode = 1;
        SlFsFileInfo_t FsFileInfo;
    
        UART_PRINT("ConfigureHttpsServer for secured mode...\n\r");
    
        /* Check if the file used for SSL exists in the FS */
        status = sl_FsGetInfo((const uint8_t*) SSL_SERVER_CERT, 0, &FsFileInfo);
        if (status < 0)
        {
            if (status == SL_ERROR_FS_FILE_NOT_EXISTS)
            {
                UART_PRINT(
                        " [ERROR] File %s status=SL_ERROR_FS_FILE_NOT_EXISTS\r\n",
                        SSL_SERVER_CERT);
            }
            else
            {
                UART_PRINT(" [ERROR] Error sl_FsOpen %s, Status=%d\r\n",
                SSL_SERVER_CERT,
                           status);
            }
            return status;
        }
        /* Check if the file used for SSL key exists in the FS */
        status = sl_FsGetInfo((const uint8_t*) SSL_SERVER_KEY, 0, &FsFileInfo);
        if (status < 0)
        {
            if (status == SL_ERROR_FS_FILE_NOT_EXISTS)
            {
                UART_PRINT(
                        " [ERROR] File %s status=SL_ERROR_FS_FILE_NOT_EXISTS\r\n",
                        SSL_SERVER_KEY);
            }
            else
            {
                UART_PRINT(" [ERROR] Error sl_FsOpen %s, Status=%d\r\n",
                SSL_SERVER_KEY,
                           status);
            }
            return status;
        }
    
        /* Set the file names used for SSL key exchange */
        SetNetAppHttp(&retVal, SL_NETAPP_HTTP_DEVICE_CERTIFICATE_FILENAME,
                      strlen((char*) SSL_SERVER_CERT),
                      (const uint8_t*) SSL_SERVER_CERT);
    
        SetNetAppHttp(&retVal,
        SL_NETAPP_HTTP_PRIVATE_KEY_FILENAME,
                      strlen((char*) SSL_SERVER_KEY),
                      (const uint8_t*) SSL_SERVER_KEY);
    
        /* Activate SSL security on primary HTTP port and change it to
         443 (standard HTTPS port) */
        SetNetAppHttp(&retVal,
        SL_NETAPP_HTTP_PRIMARY_PORT_SECURITY_MODE,
                      sizeof(securityMode), &securityMode);
    
        SetNetAppHttp(&retVal,
        SL_NETAPP_HTTP_PRIMARY_PORT_NUMBER,
                      sizeof(httpsPort), httpsPort);
    
        /* Enable secondary HTTP port (can only be used for redirecting
         connections to the secure primary port) */
        SetNetAppHttp(&retVal,
        SL_NETAPP_HTTP_SECONDARY_PORT_NUMBER,
                      sizeof(secondaryPort), secondaryPort);
    
        SetNetAppHttp(&retVal,
        SL_NETAPP_HTTP_SECONDARY_PORT_ENABLE,
                      sizeof(secondaryPortEnable), secondaryPortEnable);
    
        if (retVal >= 0)
        {
            retVal = sl_NetAppStop(SL_NETAPP_HTTP_SERVER_ID);
            UART_PRINT("[Provisioning App] HTTP Server Stopped\n\r");
    
            retVal = sl_NetAppStart(SL_NETAPP_HTTP_SERVER_ID);
            if (retVal == SL_ERROR_HTTP_SERVER_ENABLE_FAILED)
            {
                do
                {
                    sleep(1);
                    retVal = sl_NetAppStart(SL_NETAPP_HTTP_SERVER_ID);
                }
                while (retVal == SL_ERROR_HTTP_SERVER_ENABLE_FAILED);
            }
    
            UART_PRINT("[Provisioning App] HTTP Server Re-started\n\r");
        }
        return retVal;
    }

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

    云 OTA 不使用内部 HTTP 服务器(在云 OTA 中,我们使用 HttpClient 库连接到远程服务器)。

    local_OTA 显示如何配置和使用 HTTP 服务器,并应作为参考。

    本地 OTA 正在使用 POST 请求(未提交) 传输有效负载。

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

    大家好,我发现安全服务器证书可能存在问题。 我已经  使用 postman 工具测试了相同的 PUT 请求,当我禁用 SSL 验证时,它运行正常。 可以从 cc3235设备端禁用 SSL 证书验证。settings.html 文件中的所有其他功能都可以正常使用 https 服务器。  在 simplelinknetapprequesteventerandler 中,仅收到 PUT 请求。   “mysimplelink.net ”安全服务器是否有任何证书可用。  

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

    http_server 可以在没有安全保护的情况下使用(http 而不是 https)-请参阅 SL_NetApp_HTTP_primary_port_security_mode 设置(在这种情况下不提供证书)。

    在 LocalOta 示例中,我们使用的是虚拟“运动场”证书(在这种情况下,浏览器需要在其“已验证”证书列表中包括伪根 CA 证书)。 这可以用于开发,但在构建真实产品时必须用正式证书(由已知 CA 签署)替换。  

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

    找到问题。 Ajax 呼叫在 安全 服务器上无法正常工作。  感谢您的支持。