引言:
本文将介绍使用CH32V307VCT6以及官方协议栈(libwchnet)搭配Mbedtls作为客户端通过HTTPS访问百度并获取百度首页数据。
一、HTTPS概述与SSL/TSL简介
HTTPS(SecureHypertextTransferProtocol)安全超文本传输协议,它是由Netscape开发并内置于其浏览器中,用于对数据进行压缩和解压操作,并返回网络上传送回的结果。HTTPS实际上应用了Netscape的完全套接字层(SSL)作为HTTP应用层的子层。(HTTPS使用端口443,而不是像HTTP那样使用端口80来和TCP/IP进行通信。)SSL使用40位关键字作为RC4流加密算法,这对于商业信息的加密是合适的。HTTPS和SSL支持使用X.509数字认证,如果需要的话用户可以确认发送者是谁。
HTTPS是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL。
SSL是一种用于加密数据传输的协议,通过加密和身份验证机制保护数据的机密性、完整性和身份验证。它广泛应用于HTTPS、SMTPS、FTPS等场景,但已被更安全的TLS协议取代。
SSL/TSL认证方式:
- **单向认证:**通过数字证书,只验证服务器的身份。
- **双向认证:**通过数字证书,同时验证客户端和服务器身份。


二、Mbedtls与libwchnet简介
市面上有很多TLS/DTLS实现工具包,知名的工具包包括OpenSSL、wolfssl和mbedtls,其中OpenSSL常用于互联网应用,而mbedtls用于物联网应用。mbedtls使开发人员可以非常轻松地在嵌入式产品中加入物联网安全功能。相比于OpenSSL这样的工具,mbedtls小巧灵活且易于使用。
libwchnet是一个轻量级的网络通信库,通常用于嵌入式系统或资源受限的环境中,提供基础的网络通信功能。提供TCP/UDP通信、Socket封装、数据包处理等基础网络功能,代码简洁,SocketAPI简单易用。
三、CH32V307VCT6软件实现(单向认证)
3.1、准备工具
1)、开发软件:MounRiver Studio(MRS)(下载安装可参考:https://www.cnblogs.com/wchmcu/p/17082520.html)
2)、Mbedtls版本:3.6.0(可在附件下载)
3)、CH32V307EVT例程(可在官网下载https://www.wch.cn/downloads/CH32V307EVT_ZIP.html)
4)、CH32V307VCT6评估板或开发板1块
5)、可运行openssl的环境(非必须)
3.2、解压CH32V307EVT.zip,打开DNS例程(路径:CH32V307EVT \EVT\EXAM\ETH\DNS),在DNS例程基础上添加TCP客户端功能,需如下代码:


TCP接收缓冲区与net.config.h中的WCHNET_NUM_TCP也需要设置,不然无法接收TCP的数据。


完成以上工作后,可实现CH32V307VCT6通过DHCP拿到自己的IP以及通过DNS拿到百度的IP并建立TCP连接,只是无法实现数据通信,因为数据通信需要TLS握手后(单向认证)才能进行,下面就需要用到Mbedtls实现TLS握手以及借助Mbedtls实现的收发数据的API来实现握手后的数据通信能力,比如获取baidu的首页。
3.3、解压mbedtls-development.zip并将include与library两个目录添加到DNS工程中,添加方法可参考:
https://blog.csdn.net/qq_36353650/article/details/128468104中的Q8与Q9
效果如下:

3.4、基于CH32V307与libwchnet实现随机数生成函数以及数据收发API供Mbedtls调用,具体实现如下:



3.5、修改mbedtls_config.h,用于启用相关的平台支持以及加密组件,修改mbedtls_config.h,用于启用相关的平台支持以及加密组件,对方服务器支持的TLS版本与加密组件可通过openssl :openssl s_client 180.101.51.73:443获得。



3.6、对mbedtls_ssl进行初始化以及实现握手操作


3.7、握手成功后即可通过mbedtls_ssl_write()与mbedtls_ssl_read()来实现加密数据收发。

3.7、如发现编译时RAM不够用可适当调整工程中的link.ld文件即可。

Mbedtls版本:3.6.0 -> https://files.cnblogs.com/files/blogs/745523/mbedtls-development.zip?t=1747454347\&download=true
完整示例工程 -> https://files.cnblogs.com/files/blogs/745523/Connect_baidu_1v0.zip?t=1747454370\&download=true