本项目是《网络安全协议》的实验二 “利用 OpenSSL 的 C/S 安全通信程序设计” 的项目。
解压项目 zip 包。
unzip openssl-c-s.zip
进入解压的项目目录:
cd openssl-c-s/
修改 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
:可随意设置为没有占用且开放的端口。在项目目录 openssl-c-s/
下,执行:
make
即可编译所需文件。
恢复未编译之前的初始状况,删除所有编译生成的文件:
make clean
需要打开两个 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 源文件。实验要求:编程实现基于 OpenSSL 的客户端、服务器安全通信的程序。
扩展功能 1:添加说明。
对于关键的步骤,添加了说明,比如监听端口或 SSL 握手请求等等。
扩展功能 2:循环输入,不输入 quit
不终止。
扩展功能 3:客户端聊天中输入 quit
,结束聊天,但服务器等待新的客户端请求。
扩展功能 4:服务器等待新的客户端请求,并与之连接。
扩展功能 5:服务器聊天中输入 quit
,客户端程序同时结束
原文:https://www.cnblogs.com/Yogile/p/12924034.html