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.

[参考译文] CC3220S-LAUNCHXL:转换为 HTTPS 的步骤是什么?

Guru**** 2578945 points
Other Parts Discussed in Thread: UNIFLASH, CC3220SF

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/748248/cc3220s-launchxl-what-are-the-steps-to-convert-to-https

器件型号:CC3220S-LAUNCHXL
主题中讨论的其他器件:UNIFLASHCC3220SF

您好!

我从 https://e2e.ti.com/support/wireless-connectivity/wifi/f/968/t/734654更新的 HTTP 代码 一直适用于 HTTP 主机。 但是、当我尝试向 HTTPS 主机发送请求时、我会收到一个错误。 我想问、为了成功实现 HTTPS 发送请求、我需要采取哪些确切步骤?

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

    您好!

    我想您正在使用 HTTP 库。

    在这种情况下,库知道这是根据 hostname 参数(在 parseURI()方法中完成)中的前缀进行的安全连接。

    此外、您还需要设置证书。 服务器身份验证和客户端身份验证需要 RootCA、如果服务器需要客户端身份验证、则需要密钥。 这些参数应设置为 exSecParams 参数的一部分。

    另请记住使用正确的根证书目录。

    此致、

    Shlomi

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

    因此、我要尝试从的主机是 https://grayw3zc2c.execute-api.us-east-1.amazonaws.com/default/Weather-API?zip=98053。 我从 https://www.amazontrust.com/repository/获得了亚马逊根 CA 、如下所示。

    我通过 https://docs.aws.amazon.com/apigateway/latest/developerguide/getting-started-client-side-ssl-authentication.html#generate-client-certificate 和 https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-setup-api-key-with-console.html#api-gateway-usage-plan-create-apikey 获得了客户证书和密钥。 我设置 exSecParams、如下所示。

    HttpClient_extSecParams exSecParams;
    exSecParams.clientCert ="gzxnkg";
    exSecParams.privateKey ="Vpgue16GcXaS6Ilu9IRXnatIsWAgFhtR1g8HPYIF";
    exSecParams.RootCA ="AmazonRootCA1.pim";
    
    RET = HttpClient_connect (httpClientHandle、host_name、&exSecParams、0);
    如果(ret < 0){
    display_printf (display、0、0、"httpTask:connect failed =%d"、ret);
    }
    否则{
    display_printf (display、0、0、"httpTask:connect Success =%d"、ret);
    } 

    然后、我在 Uniflash 的"用户文件"部分上传了根 CA (.cer)、如下所示。

    但是、当我运行程序时、仍然无法成功连接到主机(返回"httpTask:connect failed =-111")。 如何解决此问题?

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

    因此、我要尝试从的主机是 https://grayw3zc2c.execute-api.us-east-1.amazonaws.com/default/Weather-API?zip=98053。 我从 https://www.amazontrust.com/repository/获得了亚马逊根 CA 、如下所示。

    我通过访问 https://docs.aws.amazon.com/apigateway/latest/developerguide/getting-started-client-side-ssl-authentication.html#generate-client-certificate 和 https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-setup-api-key-with-console.html#api-gateway-usage-plan-create-apikey 获得了凭证。 我设置 exSecParams、如下所示。

    HttpClient_extSecParams exSecParams;
    exSecParams.clientCert ="xxxxxx";
    exSecParams.privateKey ="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
    exSecParams.RootCA ="AmazonRootCA1.cer";
    
    RET = HttpClient_connect (httpClientHandle、host_name、&exSecParams、0);
    如果(ret < 0){
    display_printf (display、0、0、"httpTask:connect failed =%d"、ret);
    }
    否则{
    display_printf (display、0、0、"httpTask:connect Success =%d"、ret);
    } 

    然后、我在 Uniflash 的"用户文件"部分上传了根 CA (.cer)、如下所示。

    但是、当我运行程序时、仍然无法成功连接到主机(返回"httpTask:connect failed =-111")。 如何解决此问题?

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

    您好、Jack Loop

        我测试了连接到 CC3220SF 的 AWS API 网关、能够进行通信。

        我还测试了您的产品、测试结果也很好。

        获取证书= Google Chrome ->设置->高级->管理证书->受信任的根证书颁发机构-> Starfield 2类证书颁发机构->导出证书并转换.pem 格式更改名称( SecParams.RootCA ="main_amazon.pem")。

    //
    *版权所有(c) 2015-2017,Texas Instruments Incorporated
    *保留所有权利。
    *
    *
    只要
    符合以下条件*、允许以源代码和二进制形式重新分发和使用:
    *
    *源代码的重新分发必须保留上述版权
    声明*、此条件列表和以下免责声明。
    *
    ***二进制形式的再发行必须在
    
    *随发行提供的文档和/或其他材料中复制上述版权声明、本条件列表和以下免责声明。
    *
    ***未经
    
    事先书面许可、不得使用德州仪器公司的名称或*其贡献者的名称认可或推广从本软件衍生的产品*。
    *
    *本软件由版权所有者和贡献者"按原样"提供
    *、
    
    不承担任何明示或暗示的保证、包括但不限于*适销性和特定用途适用性的暗示保证*。 在任何情况下、版权所有者或
    *贡献者都不对任何直接、间接、偶然、特殊、
    *模范、 或相应的损害(包括但不限于
    *采购替代产品或服务;丧失使用、数据或利润;
    *或业务中断)、但出于任何责任理论
    、*无论是在合同中、严格责任还是由于
    使用本软件而以任何方式产生的侵权行为(包括疏忽或*其他)
    、*即使已获悉可能会发生此类损坏。
    //
    
    /*
    === HttpGet .c ====
    * HTTP 客户端获取示例应用
    */
    
    * BSD 支持*/
    #include "string.h"
    #include 
    #include 
    #include "semaphore.h"
    
    #define application_name "HTTP Get"
    #define HOSTNAME"grayw3zc2c.execute-api.us-east-1.amazonaws.com"
    #define REQUEST_URI "/default/Weather-API?zip=98053
    #define USER_AGENT "HttpClient (ARM;TI-RTOS)"
    #define CONT_TYPE "application/json"
    #define HTTP_MIN_RECV (256)
    
    extern Display_Handle 显示;
    extern SEM_t ipEventSyncObj;
    extern void printError (char * errString、
    内部代码);
    
    //*********
    //
    //! 在 UART
    上显示\brief 应用程序启动//!
    //! \param none
    //!
    //! \无返回
    //!
    //
    静态空 DisplayBanner (char * AppName)
    {
    display_printf (display、0、0、"\n\n\n\r\n"r);
    Display_printf (display、0、0、
    "\t ************* "
    " \n\n");
    Display_printf (display、0、0、"\t\t %s 应用程序 n"\r\n、
    AppName);
    Display_printf (display、0、0、
    "\t ********* "
    " \n\n");
    display_printf (display、0、0、"\n\n\n\r\n\r\n");
    }
    
    /*
    === httpTask ====
    *发出 HTTP GET 请求
    */
    void* httpTask (void* pvParameters)
    {
    bool MoreDataFlag = false;
    char data[HTTP_MIN_RECV];
    int16_t ret = 0;
    int16_t len = 0;
    
    /*打印应用程序名称*/
    DisplayBanner (application_name);
    
    SEM_WAIT (&ipEventSyncObj);
    display_printf (display、0、0、"向'%s'发送 HTTP GET 请求\n"、
    主机名);
    
    HttpClient_handle httpClientHandle;
    HttpClient_extSecParams SecParams;
    SecParams.clientCert = 0;
    SecParams.privateKey = 0;
    SecParams.RootCA ="main_amazon.pem";
    
    int16_t statusCode;
    httpClientHandle = HttpClient_create (&statusCode、0);
    if (statusCode < 0)
    {
    printError ("httpTask:创建 http 客户端句柄失败"、
    状态代码);
    }
    /*
    RET =
    HttpClient_setHeader (httpClientHandle、
    HttpClient_HFIELD_REQ_USER_AGENT、
    USER_AGENT、strlen (USER_AGENT)、
    HttpClient_HFIELD_PERSISTENT);
    if (ret < 0)
    {
    printError ("httpTask:设置请求标头失败"、ret);
    }
    
    RET =
    HttpClient_setHeader (httpClientHandle、
    HttpClient_HFIELD_REQ_content_type、
    cont_type、strlen (cont_type)、
    HttpClient_HFIELD_PERSISTENT);
    if (ret < 0)
    {
    printError ("httpTask:设置请求标头失败"、ret);
    }
    *
    RET = HttpClient_connect (httpClientHandle、HOSTNAME&SecParams、0);
    if (ret < 0)
    {
    printError ("httpTask: connect failed"、ret);
    }
    RET =
    HttpClient_sendRequest (httpClientHandle、http_method_get、request_URI、
    空、0、
    0);
    if (ret < 0)
    {
    printError ("httpTask: send failed"、ret);
    }
    
    if (ret!= HTTP_SC_OK)
    {
    printError ("httpTask:无法获取状态"、ret);
    }
    
    display_printf (display、0、0、"HTTP 响应状态代码:%d\n"、ret);
    
    Len = 0;
    操作
    {
    RET = HttpClient_readResponseBody (httpClientHandle、data、sizeof (data)、
    MoreDataFlag (&M);
    if (ret < 0)
    {
    printError ("httpTask: Response body processing failed"、ret);
    }
    display_printf (display、0、0、"%.*s \r\n"、ret、data);
    len += ret;
    }
    while (moreDataFlag);
    
    display_printf (display、0、0、"接收到的有效载荷%d 字节\n"、len);
    
    RET = HttpClient_ddisconnect (httpClientHandle);
    if (ret < 0)
    {
    printError ("httpTask: disconnect failed"、ret);
    }
    
    HttpClient_Destroy (httpClientHandle);
    返回(0);
    }
    

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

     谢谢你。 但我确实注意到、发送请求有时会失败、如下所示。 是什么原因导致了这种情况? 是由于发送请求超时? 如何防止发生此错误?

    错误! 代码=-111、desc = httpTask:发送失败 

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

    您好、Jack Loop

       您是否可以连接并获取数据??

       错误代码=-111表示连接被拒绝。

       获取证书= Google Chrome ->设置->高级->管理证书->受信任的根证书颁发机构-> Starfield 2类证书颁发机构->导出证书并转换.pem 格式更改名称( SecParams.RootCA ="main_amazon.pem")。

       使用此证书 字段2类认证机构。

       我使用相同的代码进行了测试、但没有任何错误工作正常。

    (一
    
    HTTP GET 应用程序
    
    (一
    
    
    
    
    
    正在连接到: XXXXXX。
    
    向'grayw3zc2c.execute-api.us-east-1.amazonaws.com'
    
    HTTP 响应状态代码:200
    
    {"score":45}发送 HTTP GET 请求
    
    收到12字节有效载荷 

    谢谢你  

      瓦苏

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    确实让它工作了。 我刚才说过、"有时"会发生该错误。 您知道原因吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Jack Loop、

    我不知道为什么没有出错。
    如果我遇到错误、请告知您。

    谢谢你
    瓦苏