嵌入式技术论坛
直播中

廖阿朋

7年用户 1267经验值
私信 关注
[问答]

TLSclient如何与测试网站建立TLS连接并获取加密数据?

该示例程序提供了一个简单的TLSclient,与测试网站建立TLS连接并获取加密数据。

回帖(1)

王丽娟

2021-3-31 15:59:45
示例文件
[tr]示例程序路径说明[/tr]
samples/tls_app_test.cTLS 测试例程
例程工作流程

本例程使用了 RT-Thread 官方 TLS 测试网站 www.rt-thread.org,使用 mbedtls_client_write 函数发送 HTTP 测试请求,成功后,该网站会返回文本数据,测试例程将解析后的数据输出到控制台。
  • 例程使用的 HTTP 请求数据如下所示
"GET /download/rt-thread.txt HTTP/1.0/r/n""Host: www.rt-thread.org/r/n""User-Agent: rtthread/3.1 rtt/r/n""/r/n";
  • mbedTLS 测试例程的基本工作流程如下所示
    • client连接测试网站 www.rt-thread.org
    • client 和 server 握手成功
    • client 发送请求
    • server 回应请求
    • TLS 测试成功/失败

准备工作

获取软件包

  • menuconfig 配置软件包
    打开 RT-Thread 提供的 ENV 工具,使用 menuconfig 配置软件包。
    启用 mbedtls 软件包,并配置使能测试例程(Enable a mbedtls client example),如下所示:
RT-Thread online packages --->  security packages  --->        Select Root Certificate  --->      # 选择证书文件   mbedtls: An portable and flexible SSL/TLS library # 打开 mbedtls 软件包      Store the AES tables in ROM      # 将 AES 表存储在 ROM 中    (2)   Maximum window size used         # 用于点乘的最大“窗口”大小(2-7)    (3584) Maxium fragment length in bytes # 配置数据帧大小      Enable a mbedtls client example  # 开启 mbedtls 测试例程    [ ]   Enable Debug log output          # 开启调试 log 输出          version (latest)  --->           # 选择软件包版本,默认为最新版本
  • 使用 pkgs --update 命令下载软件包
  • 编译下载
同步设备时间

SSL/TLS 服务器进行证书校验的过程中,会对当前发起校验请求的时间进行认证,如果时间不满足服务器的要求,就会校验证书失败。因此,我们需要为设备同步本地时间。
  • 方式一: 使用 date 命令
    未同步过时间的设备输入 date 命令后如下所示:
msh />dateThu Jan  1 00:00:06 1970使用 date 设置当前时间,如下所示:
msh />date 2018 08 02 12 23 00msh />dateThu Aug  2 12:23:01 2018msh />
  • 方式二: 使用 NTP 同步网络时间
    该方式需要依赖 NTP 工具包,使用 menuconfig 配置获取,如下所示:
RT-Thread online packages --->    IoT - internet of things  --->        -*- netutils: Networking utilities for RT-Thread  --->            -*-   Enable NTP(Network Time Protocol) client            (8)     Timezone for calculate local time            (cn.ntp.org.cn) NTP server name使用命令 ntp_sync 同步网络时间
msh />ntp_syncGet local time from NTP server: Thu Aug  2 14:31:30 2018The system time is updated. Timezone is 8.msh />dateThu Aug  2 14:31:34 2018启动例程

在 MSH 中使用命令 tls_test 执行示例程序,成功建立 TLS 连接后,设备会从服务器拿到一组密码套件,设备 log 如下所示:
msh />tls_testMbedTLS test sample!Memory usage before the handshake connection is established:total memory: 33554408used memory : 20968maximum allocated memory: 20968Start handshake tick:3313[tls]mbedtls client struct init success...[tls]Loading the CA root certificate success...[tls]mbedtls client context init success...msh />[tls]Connected www.rt-thread.org:443 success...[tls]Certificate verified success...Finish handshake tick:6592MbedTLS connect success...Memory usage after the handshake connection is established:total memory: 33554408used memory : 45480maximum allocated memory: 50808Writing HTTP request success...Getting HTTP response...HTTP/1.1 200 OKServer: nginx/1.10.3 (Ubuntu)Date: Fri, 31 Aug 2018 08:29:24 GMTContent-Type: text/plainContent-Length: 267Last-Modified: Sat, 04 Aug 2018 02:14:51 GMTConnection: keep-aliveETag: "5b650c1b-10b"Strict-Transport-Security: max-age=1800; includeSubdomains; preloadAccept-Ranges: bytesRT-Thread is an open source IoT operating system from China, which has strong scalability: from a tiny kernel running on a tiny core, for example ARM Cortex-M0, or Cortex-M3/4/7, to a rich feature system running on MIPS32, ARM Cortex-A8, ARM Cortex-A9 DualCore etc.MbedTLS connection close success.                                          
举报

更多回帖

发帖
×
20
完善资料,
赚取积分