利用 OpenSSL 的 C/S 安全通信程序设计
前言
本项目是《网络安全协议》的实验二 “利用 OpenSSL 的 C/S 安全通信程序设计” 的项目。
- 本项目是 基于 Linux 平台、 gcc 编译、 OpenSSL 依赖库环境 下进行编写的。
- 所以可能会出现在 Windows 平台上无法编译的情况。
开发环境
- Linux 下安装本项目所需环境,请参阅:Ubuntu 20.04 安装 OpenSSL C 开发环境 。
函数说明
- 本项目所使用到的关于 OpenSSL 的函数,请参阅:基于 OpenSSL 的简单 C/S 通信 C 程序设计使用函数文档 。
项目程序
- 验收后发布。
编译、运行
解压
-
解压项目 zip 包。
复制
unzip openssl-c-s.zip
-
进入解压的项目目录:
复制
cd openssl-c-s/
修改代码中服务端 IP
-
修改
src/server.c
和src/client.c
中的参数:复制
char *ip_server = "172.17.0.3"; int port_server = 5223;
ip_server
:初始为172.17.0.3
,应修改为要执行server
服务端可执行文件的 Linux 主机的 IP 。port_server
:可随意设置为没有占用且开放的端口。- 注意:两个文件都要修改,且相同。
编译
运行
需要打开两个 Linux 主机,每个主机都要打开一个终端控制台,且都要进入目录 openssl-c-s/
。
也可以使用 docker 创建运行两个容器来执行。
-
docker 容器列表 :
- 服务端
opensll-s
IP :172.17.0.3
。 - 客户端
opensll-c
IP :172.17.0.4
。
- 服务端
-
将项目复制到这两个容器中。
容器中可以看到:
-
opensll-s
容器先执行服务端可执行文件:复制
./server
-
opensll-c
容器先执行客户端可执行文件:复制
./client
这时服务连通,SSL 连接建立,可以通信。
- 更多功能说明、截图:基础功能实现和扩展 。
项目结构
树状图
共有 4 个文件夹,12 个文件。
复制$ tree openssl-c-s/
openssl-c-s/
├── README.md
├── bin
│ ├── client.out
│ └── server.out
├── certificate
│ ├── serverCert.cer
│ └── serverKey.pem
├── client -> bin/client.out
├── include
│ └── get_ip_addr.h
├── makefile
├── server -> bin/server.out
└── src
├── client.c
├── get_ip_addr.c
└── server.c
4 directories, 12 files
结构说明
文件夹
bin/
: 包含最终结果的可执行文件。certificate/
:包含服务器证书和私钥。include/
: 包含使用到的自定义头文件。src/
: 包含所有的 .c 源文件。
文件
-
主目录下:
makefile
: 描述了整个项目的编译、链接等规则。RAEDME.md
:使用 Markdown 语法的说明文件。
-
make
命令:编译、链接目标文件,生成bin/server.out
到server
的软连接等等。
-make clean
命令:使用clean
伪目标,执行定义的删除相关文件指令,。server
:make
生成的指向bin/server.out
的软链接文件。
-
client
:make
生成的指向bin/client.out
的软链接文件。 -
bin/
目录下:bin/client.out
:项目客户端的可执行文件。bin/server.out
:项目服务器的可执行文件。
-
certificate/
目录下:serverCert.cer
:openssl 命令生成的服务器证书。serverKey.pem
:openssl 命令生成的服务器密钥。
-
include/
目录下:get_ip_addr.h
: 对src/get_ip_addr.c
中函数的声明、暴露接口给外部使用。
-
src/
目录下:client.c
:项目客户端的 .c 源文件。get_ip_addr.c
:项目核查服务端 IP 的 .c 源文件。server.c
:项目服务端的 .c 源文件。
基础功能实现和扩展
作者:Yogile
出处:https://www.cnblogs.com/Yogile/p/12924034.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
分类:
OpenSSL
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构