引言:

本文将介绍使用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的更多相关文章

  1. 构建基于Netty 的HTTP/HTTPS 应用程序

    HTTP/HTTPS是最常见的协议套件之一,并且随着智能手机的成功,它的应用也日益广泛,因为对于任何公司来说,拥有一个可以被移动设备访问的网站几乎是必须的.这些协议也被用于其他方面.许多组织导出的用于 ...

  2. 基于Apache搭建HTTP HTTPS

    参考资料 <openssl攻略>--第一章 <Apache服务器配置与使用工作笔记>-- 第六章 第十四章 https://juejin.im/post/5a31faf2518 ...

  3. Netty 框架学习 —— 基于 Netty 的 HTTP/HTTPS 应用程序

    通过 SSL/TLS 保护应用程序 SSL 和 TLS 安全协议层叠在其他协议之上,用以实现数据安全.为了支持 SSL/TLS,Java 提供了 javax.net.ssl 包,它的 SSLConte ...

  4. 基于SpringBoot项目的https

    在spring中配置项目运行的端口很简单. 在application.properties中 server.port: 这样配置后,spring boot内嵌的tomcat服务器就是跑在8080端口启 ...

  5. haproxy配置基于ssl证书的https负载均衡

    本实验全部在haproxy1.5.19版本进行测试通过,经过测试1.7.X及haproxy1.3版本以下haproxy配置参数可能不适用,需要注意版本号. 一.业务要求现在根据业务的实际需要,有以下几 ...

  6. 【LNMP】基于阿里云的https免费证书配置

    1 登录阿里云账户,左侧菜单选择    ->   2 右上角选择购买证书,选择免费型 3 按照流程购买,回到订单列表.填写认证信息,选择DNS解析,  在列表 选择下载证书 4 我的服务器是ng ...

  7. 基于Swoole的HTTP/HTTPS代理

    N行代码实现一个简单的代理服务器 <?php /** * Web代理服务器(支持http/https) * @author zhjx922 */ class WebProxyServer { p ...

  8. 基于SSL(TLS)的HTTPS网页下载——如何编写健壮的可靠的网页下载

    源码下载地址案例开发环境:VS2010本案例未使用openssl库,内部提供了sslite.dll库进行TLS会话,该库提供了ISSLSession接口用于建立SSL会话. HTTP协议很简单,写个简 ...

  9. 基于httpd2.2配置https

    本次演示使用一台主机实现,即自签自演 主机IP:192.168.1.105 开始配置: 1.创建私有CA # cd /etc/pki/CA # touch serial # touch index.t ...

  10. 网站部署 HTTPS 中需要做的事情

    这篇文章首发于我的个人网站:听说 - https://tasaid.com/,建议在我的个人网站阅读,拥有更好的阅读体验. 这篇文章与 博客园 和 Segmentfault 共享. 前端开发QQ群:3 ...

随机推荐

  1. Android应用禁止屏幕休眠的3种方法

    做android应用开发时,有时需要在应用前台运行时,禁止休眠,以下几种方法供参考. 方法一:持有wakelock 添加休眠锁,休眠锁必须成对出现. private wakelock mwakeloc ...

  2. 高效开发助手:深入了解Hutool工具库

    一.关于Hutool 1.1 简介 Hutool​是一个功能丰富且易用的Java工具库,通过诸多实用工具类的使用,旨在帮助开发者快速.便捷地完成各类开发任务. 这些封装的工具涵盖了字符串.数字.集合. ...

  3. 植物大战僵尸杂交版最新版(PC+手机+苹果)+ 修改器+高清工具

    游戏介绍 <植物大战僵尸杂交版>在保留原作经典塔防玩法的基础上,进行了大胆创新和优化.潜艇伟伟迷通过融合多种植物和僵尸元素,创造了全新的游戏体验.玩家不仅能体验到熟悉的植物防御僵尸的乐趣, ...

  4. Spark - [03] RDD概述

    RDD,分布式数据集,是Spark中最基本的数据抽象. 一.什么是RDD RDD(Resilient Distributed Dataset)叫做分布式数据集,是 Spark 中最基本的数据抽象. 代 ...

  5. 【BUUCTF】HardSQL

    [BUUCTF]HardSQL 题目来源 收录于:BUUCTF 极客大挑战 2019 题目描述 一道纯粹的SQL注入题 尝试进行注入,发现对以下字符进行了过滤: = %20(空格) %09 %0a % ...

  6. C# TCP/IP通信,Socket通信例子

    1.服务端建立监听,等待客户端连接 class Program { static void Main(string[] args) { TcpListener listener = new TcpLi ...

  7. vscode如何退出/切换 github 账号

    退出/切换 github 账号 左下角点击头像按钮,选择注销,然后再重新登录

  8. composer init

    $ composer init Do not run Composer as root/super user! See https://getcomposer.org/root for details ...

  9. 『Plotly实战指南』--柱状图绘制基础篇

    柱状图作为最基础的数据可视化形式之一,能直观展示不同类别数据的对比关系,适用于一下的场景: 比较不同类别之间的数据大小,如不同产品的销售额对比. 展示数据的分布情况,如各年龄段的人口数量分布. 分析时 ...

  10. 超简单电脑本地部署deepseek,另附”一键使用脚本“撰写与联网使用方法

    在电脑上部署deepseek,总共分三步 1.打开ollama官网点击Download按钮 2.在ollama官网搜索deepseek-r1模型,选择对应规模,并复制ollama命令,比如这里,我的o ...