当前位置: 首页 > article >正文

C++-Mongoose(2)-https-server-openssl

OpenSSL生成HTTPS自签名证书 - 简书
 

1.Openssl

     

windowsubuntu
下载http://www.openssl.vip/download
1.VS2019编译OpenSSL
2.VS2019编译第一个OpenSSL项目
 
1.ubuntu编译OpenSSL 3.0
2.编写第一个OpenSSL

 1.windows下编译OpenSSL

安装vs2019 perl nasm安装activePerl
生成项目文件: perl Configure VC-WIN32
                        perl  Configure VC-WIN64A --prefix=%cd%\out
运行控制台: x64 Native Tools Command Prompt for VS 2019
nmake
nmake install

2.第一个OpenSSLprj
       2.1添加openssl 的bin、lib、include进项目
       2.2修改属性

 

C/C++->附加包含目录:..\openssl\include
链接器->附加库目录:..\openssl\lib\x86
链接器->输入->附加依赖项:libcrypto.lib
常规->输出目录:..\..\bin\x86  libcrypto.lib与生成文件同一个目录
常规->调试->工作目录->..\..\bin\x86


相对路径说明:
点击文件显示所在文件夹路径:例如:
D:\C++-httpserver-json-redis\httpserver_json\httpserver_json\httpserver_jsonDlg.cpp

那么..\openssl\include就是
D:\C++-httpserver-json-redis\httpserver_json\httpserver_json\openssl
 


 

 1.simplest https server

https://www.cnblogs.com/nightnine/p/12617620.html

1.1配置openssl|

 

环境配置:

1.1.1mongoose.c中配置OpenSSL ,在mongoose.c中,4474行后,增加 

#pragma comment(lib,"libeay32MTd.lib")
#pragma comment(lib,"ssleay32MTd.lib")

编译过gmssl库(libcrypto.lib、libssl.lib)


1.1.2 项目工程配置OpenSSL的头文件



1.2开启SSL

修改mongoose.h

mongoose定义了MG_ENABLE_SSL宏来控制ssl功能的开启与关闭。修改mongoose.h头文件中MG_ENABLE_SSL的值为1,以开启SSL功能。



1.3code

mongoose学习(一)Https通信-CSDN博客

服务器端:

 

#include "stdafx.h"
#include "stdafx.h"
#include "mongoose.h"#include <string>static const char *s_http_port = "8443";
static const char *s_ssl_cert = "server.crt";
static const char *s_ssl_key = "server.key";
static const char *s_ssl_ca = "ca.crt";
static struct mg_serve_http_opts s_http_server_opts;static void ev_handler(struct mg_connection *conn, int ev, void *ev_data)
{// 区分http和websocketif (ev == MG_EV_HTTP_REQUEST){http_message *hm = (http_message *)ev_data;//(int)hm->message.len, hm->message.p 中存放客户端发过来的信息,包括post,Host(http地址),Content-Length(信息的长度),以及信息本身。//通过 std::string url = std::string(hm->uri.p, hm->uri.len); 可以得到url//通过 std::string body = std::string(hm->body.p, hm->body.len);可以得到body中 存储的从客户端发送过来的信息std::string req_str = std::string(hm->message.p, hm->message.len);printf("got request:\n%s\n", req_str.c_str());//TODO.  请求处理// eg.  We have received an HTTP request. Parsed request is contained in `hm`.//      Send HTTP reply to the client which shows full original request.mg_send_head(conn, 200, hm->message.len, "Content-Type: text/plain");mg_printf(conn, "%.*s", (int)hm->message.len, hm->message.p);//API函数mg_serve_http()可以轻松地从文件系统提供文件。 例如,为了创建一个从当前目录提供静态文件的Web服务器,实现如下处理://mg_serve_http(conn, hm, s_http_server_opts);}else if (ev == MG_EV_WEBSOCKET_HANDSHAKE_DONE ||ev == MG_EV_WEBSOCKET_FRAME ||ev == MG_EV_CLOSE){websocket_message *ws_message = (struct websocket_message *)ev_data;//TODO.  请求处理}
}int _tmain(int argc, _TCHAR* argv[])
{//声明和初始化事件管理器,  mg_mgr是拥有所有活动连接的事件管理器struct mg_mgr mgr;//mg_connection描述连接struct mg_connection *nc;struct mg_bind_opts bind_opts;const char *err;mg_mgr_init(&mgr, NULL);/* Set HTTP server options */memset(&bind_opts, 0, sizeof(bind_opts));bind_opts.error_string = &err;      //bind_opts.ssl_cert = s_ssl_cert;    //指定服务端证书bind_opts.ssl_key = s_ssl_key;      //指定服务端私钥//bind_opts.ssl_ca_cert = s_ssl_ca;  //提供了CA证书,表示需要验证客户端的证书printf("Starting SSL server on port %s, cert from %s, key from %s\n", s_http_port, bind_opts.ssl_cert, bind_opts.ssl_key);nc = mg_bind_opt(&mgr, s_http_port, ev_handler, bind_opts);if (nc == NULL){printf("Failed to create listener: %s\n", err);getchar();return 1;}// Set up HTTP server parameters,  for both http and websocketmg_set_protocol_http_websocket(nc);s_http_server_opts.document_root = ".";  // Serve current directorys_http_server_opts.enable_directory_listing = "yes";//通过调用循环创建一个事件mg_mgr_poll()循环:for (;;) {mg_mgr_poll(&mgr, 1000);}mg_mgr_free(&mgr);return 0;
}

相关文章:

C++-Mongoose(2)-https-server-openssl

OpenSSL生成HTTPS自签名证书 - 简书 1.Openssl windowsubuntu下载http://www.openssl.vip/download1.VS2019编译OpenSSL 2.VS2019编译第一个OpenSSL项目 1.ubuntu编译OpenSSL 3.0 2.编写第一个OpenSSL 1.windows下编译OpenSSL 安装vs2019 perl nasm安装activePerl…...

【GDB】调试程序的基本命令和用法(Qt程序为例)

1. 引言 GDB&#xff08;GNU Debugger&#xff09;是一个强大的命令行调试工具&#xff0c;它可以帮助开发者在程序运行时查找和修复错误。当调试Qt程序时&#xff0c;GDB同样适用&#xff0c;并且能够帮助开发者定位诸如数组越界挂死等复杂问题。 2. 基本命令 2.1 启动GDB …...

力扣DAY46-50 | 热100 | 二叉树:展开为链表、pre+inorder构建、路径总和、最近公共祖先、最大路径和

前言 中等 、困难 √&#xff0c;越来越有手感了&#xff0c;二叉树done&#xff01; 二叉树展开为链表 我的题解 前序遍历树&#xff0c;当遇到左子树为空时&#xff0c;栈里pop节点&#xff0c;取右子树接到左子树位置&#xff0c;同时断开该右子树与父节点的连接&#x…...

服务器DNS失效

服务器异常 xx.t.RequestException: java.net.UnknownHostException: test.ac.xxxx.cn现象分析 本地测试正常&#xff0c;说明域名本身无问题。服务器 DNS 解析异常&#xff0c;导致 UnknownHostException。**服务器可正常解析 ****baidu.com**&#xff0c;说明网络正常&#…...

用excel做九乘九乘法表

公式&#xff1a; IF($A2>B 1 , 1, 1,A2 & “" & B$1 & “” & $A2B$1,”")...

企业数据安全如何保障?深度解析AIGC系统源码本地化部署

—从数据加密到权限管控&#xff0c;构建企业级AI安全防线 企业AIGC面临的5大数据安全风险 1. 数据出境违规 典型场景&#xff1a; 使用ChatGPT处理客户信息 → 数据经美国服务器中转 → 违反《个人信息保护法》第38条某金融公司因通过Midjourney生成宣传图&#xff0c;导致产…...

《妖风》-来自DeepSeek

《妖风》 周明揉了揉酸胀的眼睛&#xff0c;电脑屏幕上的Excel表格已经模糊成一片绿色的小格子。窗外&#xff0c;三月的阳光懒洋洋地洒进来&#xff0c;带着春天特有的那种让人昏昏欲睡的温暖。办公室里中央空调的嗡嗡声像是一首催眠曲&#xff0c;他的眼皮越来越重。 "…...

鬼泣:蓄力攻击

文章目录 蓄力攻击&#xff1a;有两个动作&#xff0c;蓄力时触发蓄力动作&#xff0c;攻击时触发攻击动作1.蓄力动作2.攻击动作 浮空上挑1.蓄力对齐位置 2.攻击 下劈斩1.蓄力对齐位置 2.攻击 beiwuf debug事件分发器发送&#xff1a;调用发送器即可发送消息接收&#xff1a;绑…...

企业指标设计方法指南

该文档聚焦企业指标设计方法,适用于企业中负责战略规划、业务运营、数据分析、指标管理等相关工作的人员,如企业高管、部门经理、数据分析师等。 主要内容围绕指标设计展开:首先指出指标设计面临的困境,包括权责不清、口径不统一、缺乏标准规范、报表体系混乱、指标…...

CSS学习02 动态列数表格开发,解决多组数据布局与边框重合问题

概要 在前端开发中&#xff0c;表格常用于展示结构化数据。当数据组的字段数量不统一时&#xff08;如有的行包含 3 组数据&#xff0c;有的行包含 2 组或 1 组&#xff09;&#xff0c;传统固定列数的表格会出现结构错位、边框重合等问题。本文通过 HTML/CSS 规范方法&#x…...

加载js/mjs模块时服务器返回的 MIME 类型不对导致模块被拒绝执行

浏览器报错 Failed to load module script: The server responded with a non-JavaScript MIME type of "text/html". Strict MIME type checking is enforced for module scripts per HTML spec.Understand this errorAI 核心问题 浏览器加载模块脚本&#xff08;如…...

大唐杯省赛安排来了!还有7天,该如何准备?

(一&#xff09;赛道一:工程实践赛 1、理论赛阶段由参赛队伍使用两台电脑分别登录学唐平台作答&#xff0c;仿真实践赛阶段为参赛队伍共用一台电脑&#xff0c;以竞赛小组方式共同作答&#xff08;按照报名顺序&#xff0c;用第1选手账号登录仿真平台&#xff09;。最终统计理…...

iframe学习与应用场景指南

一、iframe核心原理与学习路径 1. 嵌套网站的本质原理 技术特性&#xff1a; • 浏览器为每个iframe创建独立的window对象和DOM环境 • 资源独立加载&#xff1a;子页面拥有自己的CSS/JS/Cookie作用域 • 跨域限制&#xff1a;同源策略下无法直接访问DOM&#xff08;需CORS或…...

WebGL数学手记:矩阵基础

一、矩阵的定义 矩阵&#xff0c;数学术语。在数学中&#xff0c;矩阵&#xff08;Matrix&#xff09;是一个按照长方阵列排列的复数或实数集合。 1.英文发音&#xff08;Matrix&#xff09; Matrix的发音类似于中文的[美吹克斯]&#xff0c;知道它的发音。方便后期看教程时…...

IO流——字符输入输出流:FileReader FileWriter

一、文件字符输入流&#xff1a;FileReader 作用&#xff1a;以内存为基准&#xff0c;可以把文件中的数据以字符的形式读入到内存中去 public class Test5 {public static void main(String[] args) {try (Reader fr new FileReader("E:\\IDEA\\JavaCodeAll\\file-io-t…...

Graphpad Prism for Mac医学绘图

Graphpad Prism for Mac医学绘图 一、介绍 GraphPad Prism for Mac是一款功能强大、易于使用的科学和统计分析软件&#xff0c;适用于各种类型的数据处理和可视化需求。无论您是进行基础研究、临床试验还是学术写作&#xff0c;GraphPad Prism for Mac都能为您短时间内做出最…...

使用人工智能大模型腾讯元宝,如何免费快速做高质量的新闻稿?

今天我们学习使用人工智能大模型腾讯元宝&#xff0c;如何免费快速做高质量的新闻稿&#xff1f; 手把手学习视频地址&#xff1a;https://edu.csdn.net/learn/40402/666431 第一步在腾讯元宝对话框中输入如何协助老师做新闻稿&#xff0c;通过提问&#xff0c;我们了解了老师…...

破解root密码

一、背景&#xff1a; 必须是服务器的管理者&#xff0c;涉及重启服务器 二、破解过程&#xff1a; 1)重启系统,进入 救援模式 开机过程中&#xff0c;按e进入救援模式 在linux开头的该行&#xff0c;将此行的ro修改为rw 然后空格输入 rd.break 按 ctrl x 启动&#xff0c;…...

嵌入式---烧录器

一、核心定义与本质功能 烧录器&#xff08;Programmer&#xff09;是一种将用户编写的程序代码&#xff08;如.hex/.bin文件&#xff09;写入单片机内部存储器&#xff08;Flash/EEPROM/ROM&#xff09;的专用工具&#xff0c;核心功能包括&#xff1a; 程序烧写&#xff1a…...

机器学习 | 强化学习基本原理 | MDP | TD | PG | TRPO

文章目录 📚什么是强化学习🐇监督学习 vs 强化学习🐇马尔科夫决策过程(MDP)📚基本算法(value-based & policy-based)🐇时序差分算法(TD)🐇SARSA和Q-learning🐇策略梯度算法(PG)🐇REINFORCE和Actor-Critic🐇信任区域策略优化算法(TRPO)⭐️参考…...

Spring中使用Kafka的详细配置,以及如何集成 KRaft 模式的 Kafka

在 Spring 中使用 Apache Kafka 的配置主要涉及 Spring Boot Starter for Kafka&#xff0c;而开启 ‌KRaft 模式‌&#xff08;Kafka 的元数据管理新模式&#xff0c;替代 ZooKeeper&#xff09;需要特定的 Kafka Broker 配置。以下是详细步骤&#xff1a; 一、Spring 中集成 …...

llinux上的pip国内镜像全局配置

1、创建全局 pip 配置文件&#xff08;推荐&#xff09; sudo tee /etc/pip.conf <<EOF [global] index-url https://pypi.tuna.tsinghua.edu.cn/simple trusted-host pypi.tuna.tsinghua.edu.cn EOF2、验证配置 任意用户运行以下命令应显示配置的镜像&#xff1a; …...

ASEG的鉴定

等位基因特异性表达(Allele-Specific Expression, ASE)基因的鉴定是研究杂种优势和基因表达调控的重要手段。以下是鉴定ASE基因的详细流程和方法: ### **1. 实验设计与样本准备** - **选择材料**:选择杂交种及其亲本作为研究材料。例如,玉米中的B73和Mo17及其杂交组合B73…...

swift菜鸟教程14(闭包)

一个朴实无华的目录 今日学习内容&#xff1a;1.Swift 闭包1.1闭包定义1.2闭包实例1.3闭包表达式1.3.1sorted 方法&#xff1a;据您提供的用于排序的闭包函数将已知类型数组中的值进行排序。1.3.2参数名称缩写&#xff1a;直接通过$0,$1,$2来顺序调用闭包的参数。1.3.3运算符函…...

新手宝塔部署thinkphp一步到位

目录 一、下载对应配置 二、加载数据库 三、添加FTP​ 四、上传项目到宝塔​ 五、添加站点​ 六、配置伪静态 七、其他配置 开启监控 八、常见错误 一、打开宝塔页面&#xff0c;下载对应配置。 二、加载数据库 从本地导入数据库文件 三、添加FTP 四、上传项目到宝塔…...

Java常用工具算法-7--秘钥托管云服务2(阿里云 KMS)

阿里云的KMS&#xff08;Key Management Service&#xff09;也是一种托管式密钥管理服务&#xff0c;帮助用户安全地创建、控制和使用密钥&#xff0c;保护敏感数据。通过使用KSM&#xff0c;您可以专注于构建和优化应用程序&#xff0c;而不必担心密钥管理的复杂性。 1、主要…...

基于STM32 的实时FFT处理(Matlab+MDK5)

目录 一、 任务介绍二、基本原理三、软件仿真3.1 软件仿真基本原理3.2 软件仿真序列的软件模拟 四、模拟测试五、 附加题六、 源码 一、 任务介绍 1、在硬件平台上实现 FFT 算法&#xff1b; 2、模拟数据&#xff0c;通过 FFT 算法进行谱分析&#xff1b; 3、测定 PWM 输出方波…...

RVOS-3.实现内存管理

3.内存管理 3.1 实验目的 对内存进一步的管理&#xff0c;实现动态的分配和释放。 实现 Page 级别的内存分配和释放。 在 page 分配的基础上实现更细颗粒度的&#xff0c;精确到字节为单位的内存管理。 &#xff08;练习8.1&#xff09; void *malloc(size_t size); void fr…...

MySQL 约束(入门版)

目录 一、约束的基本概念 二、约束演示 三、外键约束 &#xff08;一&#xff09;介绍 &#xff08;二&#xff09;外键约束语法 &#xff08;三&#xff09;删除/更新行为 一、约束的基本概念 1、概念&#xff1a;约束是作用于表中字段上的规则&#xff0c;用于限制存储…...

系统与网络安全------Windows系统安全(11)

资料整理于网络资料、书本资料、AI&#xff0c;仅供个人学习参考。 制作U启动盘 U启动程序 下载制作U启程序 Ventoy是一个制作可启动U盘的开源工具&#xff0c;只需要把ISO等类型的文件拷贝到U盘里面就可以启动了 同时支持x86LegacyBIOS、x86_64UEFI模式。 支持Windows、L…...