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.

[参考译文] CC3100BOOST:在 CC3100Boost + MSP430F5529LP 上启用安全连接(TLS/SSL)时出现问题

Guru**** 2534260 points
Other Parts Discussed in Thread: CC3100, MSP430F5529, CC3100SDK, CC31XXEMUBOOST, UNIFLASH

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/619118/cc3100boost-issue-enabling-secure-connection-tls-ssl-on-cc3100boost-msp430f5529lp

器件型号:CC3100BOOST
主题中讨论的其他器件:CC3100MSP430F5529CC3100SDKCC31XXEMUBOOSTUNIFLASH

我正在配置 CC3100 + MSP430F5529 Launch Pad 以支持 TLS/SSL。 为了进行实验、我尝试修改 CC3100 HTTP 客户端示例。 我还有一个 CC31XXEMUBOOST、用于将证书上传到串行闪存。 当前编译器版本为 TI v15.12.1 LTS、CC3100SDK 版本为1.2和 CCS6.1。 文件 httpcli 和 sock 是参考 CC3100SDK、而不是 library_project_ccs 中的 http_lib。 我已经在 e2e.ti.com 上查看了许多有关 CC3100和 TLS 实施的文章、但无法使该计划正常运行。

问题:

  1. 有人能否描述如何按照 CC3100 HTTP 客户端上的建议、启用 HTTPCL_LIBTYPE_MIN 标志以构建库
  2. 创建证书文件并将其刷写到 CC3100串行闪存的过程。

下面是我在研究中所做的一些工作。

要设置 HTTPCli_LIBTYPE_MIN 标志、我转到 Project Properties > CCS Build > MSP430 Compiler > Advanced Options > Predefine Symbols、并在 Pre-defined NAME 部分添加了 HTTPCli_LIBTYPE_MIN。 我还注意到、在 Project Properties > C/C++ General > Paths and Symbols >#Symbol tab 下、有一些选项可为 HTTPCli_LIBTYPE_MIN 分配值。  应该在这里分配值1吗?

我遵循 CCS/CC3100:CC3100并 添加了__sl__、_使用_cli_和__ccs__宏。 这些宏的用途是什么。

要生成证书、我参考 了 CC3100 SSL 演示应用 程序和 CC3200 SSL 演示应用程序。 我遵循了使用部分和 来自 CC3200 SSL 演示应用程序的 CA 证书。

下面是 ConnectToHTTPServer 代码。 对 HTTPCLI_CONNECT 的调用返回一个-102错误代码。  

静态_i32 ConnectToHTTPServer (HTTPCLI_Handle https 客户端)
{
_i32 RetVal =-1;
struct sockaddr_in 地址;

//开始安全连接
struct HTTPCLI_SecureParams 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

//开始安全连接
slDateTime_t dt;

/*设置当前日期以验证证书*/
DT.SL_TM_DAY = 18;
DT.SL_TM_mon = 8;
DT.SL_TM_year = 2017;
DT.SL_TM_Hour = 4;
DT.SL_TM_MIN = 17;
DT.SL_TM_sec = 0;
sl_DevSet (sl_device_General_configuration、sl_device_General_configuration_date_time、sizeof (SlDateTim_t)、(unsigned char *)(&dt));
//结束安全连接


/*解析主机名/IP */
RetVal = sl_NetAppDnsGetHostByName (host_name、PAL_strlen (host_name)、
&g_DestinationIP、sl_AF_iNet);
if (RetVal < 0)
{
cli_Write ("设备无法获取主机名的 IP \r\n);
ASSERT_ON_ERROR (RetVal);
}

//开始安全连接
/*设置安全 TLS 连接*/
/*安全参数*/
sparams.method.secureMethod = SL_SO_SEC_METHOD_TLSv1_2;
sparams.mask.secureMask = SL_SEC_MASK_TLS_RSA_ITH_AES_256_CBC_SHA;//SL_SEC_MASK_SSL_RSA_ITH_RC4_128_SHA;//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);
//结束安全连接


/*设置 HTTP 连接的输入参数*/
Addr.Sin_Family = AF_iNet;
Addr.sin 端口= htons (host_port);
addr.sin addr.s_addr = sl_Htonl (g_DestinationIP);

/* HTTPCli open 调用:句柄,仅限地址参数*/
HTTPCLI_con构(httpClient);
// RetVal = HTTPCLI_connect (https 客户端、(struct sockadr *)&addr、0、NULL);
RetVal = HTTPCLI_CONNECT (httpClient、(struct sockaddr *)&addr、HTTPCL_TYPE_TLS、NULL);

如果(RetVal < 0)
{
cli_Write ("与服务器的连接失败\n\r\n");
ASSERT_ON_ERROR (RetVal);
}

cli_Write (" successfully connected to the server \r\n);
返回成功;
}

在调试过程中、我注意到错误发生在中

RET =连接(skt、sa、slen);

在 httpcli.c 文件中。

 

总之、我认为这可能是一个简单的配置问题。 感谢您支持解决此问题。   

参考文献:

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

    我将研究这个问题、并在星期一返回给您。

    谢谢!

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

    sparams.cafile 的值是多少?

    另外,您将 CA 文件保存在何处,以及您将其命名为什么?

    这两个字段应匹配。

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

    您好 Vincent、

    附加到 sparams.cafile 的值为

    #defineSL_SSL_CA_CERT"/cert/129.cer 

    这是在 main.c 的开头定义的

     我使用 CCSUniflash 更新串行闪存。  

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

    您能否验证是否正在将 CA 加载到串行闪存中?

    您应该能够在 uniflash 中选择验证选项、并且在调试窗口中、它将告诉您是否找到了该选项。

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

    您好 Vincent、

    我有 uniflash v3.4.1。  当我选择验证时、我在控制台窗口上看不到任何输出。

    我假设您所说的调试窗口是 Uniflash 调试控制台窗口、请进行确认。 但是、当我选择列表文件时、我会得到以下列表。

    让我看看我是否可以获得 CC3100 SSL 演示应用程序。 一个问题。 文档说明

    您知道我是否可以使用 Chrome 下载.der 文件、或者是否可以使用.cer 文件。 感谢您的反馈。

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

    我调试了示例项目、并为您找到了解决方案。

    在该示例中、我们连接到 httpbin.org。 如果我们尝试通过安全连接连接到该服务器、则连接失败。 这是因为我们的器件默认不支持 SNI (服务器名称指示)。 由于我们在客户端 Hello 消息中不包含 SNI 扩展、因此服务器不允许我们进行连接。

    这很可能是您面临的问题。

    您可以使用 www.ssllabs.com/.../检查您的服务器是否需要 SNI


    对该功能的支持已添加到下一个 Service Pack 版本中。

    此致、

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

    尝试将安全掩码更改为:

    sparams.mask.secureMask = SL_SEC_MASK_SECURE_DEFAULT;

    这将让服务器决定要使用的掩码。

    此致、

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

    Vince、

    遗憾的是、这没有解决问题。 我仍然会得到以下错误代码。  

    来自 httpcli.c 文件

    RET =连接(skt、sa、slen); 

    生成-456错误代码

    从 main.c 中删除  

    RetVal = HTTPCLI_CONNECT (httpClient、(struct sockaddr *)&addr、HTTPCL_TYPE_TLS、NULL); 

    -102错误代码(HTTPCli_ECONNECTFAIL)