c语言ssl通信,利用 OpenSSL 的 C/S 安全通信程序设计

本文档详细介绍了如何在Linux环境下使用OpenSSL库开发C/S安全通信程序。项目包括客户端和服务端的源代码,实现了SSL连接的建立和安全通信。通过修改配置文件,可以在不同主机上运行。扩展功能包括循环输入、多客户端支持和服务器端的退出控制。项目结构清晰,包含了编译、运行和清理的步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

本项目是《网络安全协议》的实验二 “利用 OpenSSL 的 C/S 安全通信程序设计” 的项目。

本项目是 基于 Linux 平台、 gcc 编译、 OpenSSL 依赖库环境 下进行编写的。

所以可能会出现在 Windows 平台上无法编译的情况。

开发环境

函数说明

项目程序

验收后发布。

编译、运行

解压

解压项目 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 :可随意设置为没有占用且开放的端口。

注意:两个文件都要修改,且相同。

9912e916321ec59b6479c9c4125892c4.png

编译

在项目目录 openssl-c-s/ 下,执行:

make

即可编译所需文件。

92ec6c2db57012a73678dacca6a277a6.png

恢复未编译之前的初始状况,删除所有编译生成的文件:

make clean

7def5f70f77609e735f4afad9cedcb5c.png

运行

需要打开两个 Linux 主机,每个主机都要打开一个终端控制台,且都要进入目录 openssl-c-s/ 。

也可以使用 docker 创建运行两个容器来执行。

docker 容器列表 :

服务端 opensll-s IP :172.17.0.3 。

客户端 opensll-c IP :172.17.0.4 。

11ef72ed3669c6e6b6f63a6ff9fd7feb.png

将项目复制到这两个容器中。

8372a9c873110775383eba294f1e7ce4.png

容器中可以看到:

026a6022bfed2317521669fc118f2e9d.png

opensll-s 容器先执行服务端可执行文件:

./server

opensll-c 容器先执行客户端可执行文件:

./client

这时服务连通,SSL 连接建立,可以通信。

34edddf82fe61d180a0b08bcae58e707.png

更多功能说明、截图:基础功能实现和扩展 。

项目结构

树状图

共有 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 源文件。

基础功能实现和扩展

实验要求:编程实现基于 OpenSSL 的客户端、服务器安全通信的程序。

扩展功能 1:添加说明。

对于关键的步骤,添加了说明,比如监听端口或 SSL 握手请求等等。

34edddf82fe61d180a0b08bcae58e707.png

扩展功能 2:循环输入,不输入 quit 不终止。

d8328c6a75db525b8fd308625b264d59.png

扩展功能 3:客户端聊天中输入 quit ,结束聊天,但服务器等待新的客户端请求。

61210fbcb66f194f1fdf49fe3b7f61e3.png

扩展功能 4:服务器等待新的客户端请求,并与之连接。

3a93ef60c00d25304cb2d321408af4ef.png

扩展功能 5:服务器聊天中输入 quit ,客户端程序同时结束

fd0f622c27a14ce37e44b0337309ab3a.png

原文:https://www.cnblogs.com/Yogile/p/12924034.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值