引言:

本文将介绍使用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. HTTP协议与RESTful API实战手册(二):用披萨店故事说透API设计奥秘 🍕

    title: HTTP协议与RESTful API实战手册(二):用披萨店故事说透API设计奥秘 date: 2025/2/27 updated: 2025/2/27 author: cmdragon ...

  2. 使用Node.js打造交互式脚手架,简化模板下载与项目创建

    在上一篇文章中,我们探讨了如何构建一个通用的脚手架框架.今天,我们将在此基础上进一步扩展脚手架的功能,赋予它下载项目模板的能力. 通常情况下,我们可以将项目模板发布到 npm 上,或者在公司内部利用私 ...

  3. Unable to Connect: sPort: 0 C# ServiceStack.Redis 访问 redis

    需求:  对数据库中的不断抓取的文章进行缓存,因此需要定时访问数据,写入缓存中 在捕获到的异常日志发现错误:Unable to Connect: sPort: 0 使用的访问方式是线程池的方式:Poo ...

  4. 非局域网远程访问MySQL

    使用内网穿透解决,市面上说道最多的是"花生壳" 主要操作见这篇官方说明 但其中提到的什么花生棒(第二.三点)完全不用管,应该算是产品推销. 登录后选"新增内网映射&quo ...

  5. 华为云windows server 2008 迁机遇到字符串问题

    问题 使用主机迁移服务迁移windows server 2008出现问题 2.按照教程安装Windows Agent(Python2)下载后,在源主机上运行agent-start.exe,输入ak后, ...

  6. Qt通过setProperty来达到设置控件的不同样式表

    文章目录 前言 根据不同的属性显示不一样的样式 setProperty Q_PROPERTY和DynamicProperty 前言 最近在做项目的时候,找了一个开源的小控件,发现里面有一个设置样式的骚 ...

  7. liunx服务器某个Java运行服务CPU占用率过高问题排查及修复

    进入服务器 用 top 命令查看 top top - 09:57:55 up 40 days, 22:05, 9 users, load average: 4.44, 4.03, 3.85 Tasks ...

  8. BigDecimal类--java进阶day05

    1.BigDecimal出现的原因 2.BigDecimal的创建 不推荐第一种形式,会有误差 第二种方式创建对象 第三种方式调用方法 2.BigDecimal常用方法 除法的特殊事项 如果有除不尽的 ...

  9. md语法练手随笔

    代码 单行代码:代码之间分别用一个反引号包起来 代码块: 代码之间分别用三个反引号包起来, 且两边的反引号单独占一行 这是一级标题 这是六级标题 这是加粗的文字 这是倾斜的文字 这是斜体加粗的文字 这 ...

  10. 『Plotly实战指南』--饼图绘制高级篇

    在数据可视化的世界里,饼图是最直观的展示比例关系的工具之一. 然而,传统的静态饼图已经无法满足现代数据分析的需求.Plotly作为一款强大的可视化库,不仅提供了饼图丰富的基础功能,还支持交互效果和动态 ...