主题中讨论的其他器件:UNIFLASH、 CC3220SF
您好!
我从 https://e2e.ti.com/support/wireless-connectivity/wifi/f/968/t/734654更新的 HTTP 代码 一直适用于 HTTP 主机。 但是、当我尝试向 HTTPS 主机发送请求时、我会收到一个错误。 我想问、为了成功实现 HTTPS 发送请求、我需要采取哪些确切步骤?
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.
您好!
我从 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); }
您好、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字节有效载荷
谢谢你
瓦苏