基于libwchnet&Mbedtls实现HTTPS
引言:
本文将介绍使用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
基于libwchnet&Mbedtls实现HTTPS的更多相关文章
- 构建基于Netty 的HTTP/HTTPS 应用程序
HTTP/HTTPS是最常见的协议套件之一,并且随着智能手机的成功,它的应用也日益广泛,因为对于任何公司来说,拥有一个可以被移动设备访问的网站几乎是必须的.这些协议也被用于其他方面.许多组织导出的用于 ...
- 基于Apache搭建HTTP HTTPS
参考资料 <openssl攻略>--第一章 <Apache服务器配置与使用工作笔记>-- 第六章 第十四章 https://juejin.im/post/5a31faf2518 ...
- Netty 框架学习 —— 基于 Netty 的 HTTP/HTTPS 应用程序
通过 SSL/TLS 保护应用程序 SSL 和 TLS 安全协议层叠在其他协议之上,用以实现数据安全.为了支持 SSL/TLS,Java 提供了 javax.net.ssl 包,它的 SSLConte ...
- 基于SpringBoot项目的https
在spring中配置项目运行的端口很简单. 在application.properties中 server.port: 这样配置后,spring boot内嵌的tomcat服务器就是跑在8080端口启 ...
- haproxy配置基于ssl证书的https负载均衡
本实验全部在haproxy1.5.19版本进行测试通过,经过测试1.7.X及haproxy1.3版本以下haproxy配置参数可能不适用,需要注意版本号. 一.业务要求现在根据业务的实际需要,有以下几 ...
- 【LNMP】基于阿里云的https免费证书配置
1 登录阿里云账户,左侧菜单选择 -> 2 右上角选择购买证书,选择免费型 3 按照流程购买,回到订单列表.填写认证信息,选择DNS解析, 在列表 选择下载证书 4 我的服务器是ng ...
- 基于Swoole的HTTP/HTTPS代理
N行代码实现一个简单的代理服务器 <?php /** * Web代理服务器(支持http/https) * @author zhjx922 */ class WebProxyServer { p ...
- 基于SSL(TLS)的HTTPS网页下载——如何编写健壮的可靠的网页下载
源码下载地址案例开发环境:VS2010本案例未使用openssl库,内部提供了sslite.dll库进行TLS会话,该库提供了ISSLSession接口用于建立SSL会话. HTTP协议很简单,写个简 ...
- 基于httpd2.2配置https
本次演示使用一台主机实现,即自签自演 主机IP:192.168.1.105 开始配置: 1.创建私有CA # cd /etc/pki/CA # touch serial # touch index.t ...
- 网站部署 HTTPS 中需要做的事情
这篇文章首发于我的个人网站:听说 - https://tasaid.com/,建议在我的个人网站阅读,拥有更好的阅读体验. 这篇文章与 博客园 和 Segmentfault 共享. 前端开发QQ群:3 ...
随机推荐
- gitlab - [02] 安装部署
安装部署篇 一.5分钟搭建私人代码仓库 (1)设置环境变量:export GITLAB_HOME=/src/gitlab (2)编写docker-compose.yml mkdir -p /opt/d ...
- ARC132E题解
简要题意 有 \(n\) 个方块,每个方块有一个初始状态可能为左右或者空.每次操作随机选择一个空进行操作.每次操作可以向左或者向右走一直到下一个空或者走出边界,走到的每个格子会变成左或者右,这取决于移 ...
- PDManer 入门教程:超强代码生成工具!
PDManer 入门教程:超强代码生成工具!https://www.51cto.com/article/753161.html
- C# 域套接字通讯类
public class UdsClient { public Socket _socket { get; set; } public UnixDomainSocketEndPoint endPoin ...
- java的三大版本、特性和优势
Write Once Run AnyWhere 版本: JavaSE:标准版(桌面程序.控制台开发) JavaME:嵌入式开发(手机.家电...) JavaEE:E企业级开发(web端.服务端开发) ...
- ubuntu升级python版本
ubuntu升级python版本 # 更新包列表 sudo apt update # 安装 Python 所需的软件包 sudo apt install software-properties-com ...
- linux ssh 免密登录
1.服务器端开启密钥登录模式 $ vim /etc/ssh/sshd_config # 是否允许 root 远程登录 PermitRootLogin yes # 密码登录是否打开 PasswordAu ...
- 原生 JS 实现 HTML 转 Markdown ,(html2md.js 或 html2markdown.js)
之前因为一些需要,需要转换部分 HTML 标签成 markdown 格式,但是不知不觉就完善到一个相对完整的函数. 然后我就封装成了一个文件放在了 github ( https://github.co ...
- luogu-P5320题解
简要题意 设 \(f(n)\) 表示用多米诺骨牌恰好铺满 \(2\times n\) 的平面的方案数,\(g(n)\) 表示用多米诺骨牌恰好铺满 \(3\times n\) 的平面的方案数:设 \(F ...
- Python 类型检查与类型注解:mypy 与 typing 深度解析
Python 类型检查与类型注解:mypy 与 typing 深度解析 在 Python 动态类型语言中,mypy 和 typing 是两个提升代码健壮性的核心工具.它们通过静态类型检查与类型注解,帮 ...