• 利用 OpenSSL 的 C/S 安全通信程序设计


    前言

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

    • 本项目是 基于 Linux 平台、 gcc 编译、 OpenSSL 依赖库环境 下进行编写的。
    • 所以可能会出现在 Windows 平台上无法编译的情况。

    开发环境

    函数说明

    项目程序

    • 验收后发布。

    编译、运行

    解压

    • 解压项目 zip 包。

      unzip openssl-c-s.zip
      
    • 进入解压的项目目录:

      cd openssl-c-s/
      

    修改代码中服务端 IP

    • 修改 src/server.csrc/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.outserver 的软连接等等。
      - make clean 命令:使用 clean 伪目标,执行定义的删除相关文件指令,。

      • servermake 生成的指向 bin/server.out 的软链接文件。
    • clientmake 生成的指向 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 ,客户端程序同时结束

  • 相关阅读:
    Shell入门
    Linux基本的指令操作
    python网络爬虫入门范例
    Android中scrollview的scrollto方法不起作用的解决办法
    (转)Android利用canvas画各种图形(点、直线、弧、圆、椭圆、文字、矩形、多边形、曲线、圆角矩形)
    unable to load class org.codehaus.groovy.runtime.typehandling.shorttypehandling解决方法
    JavaScript运行原理
    AsyncTask的doInBackground不工作原因分析
    Android中的多线程与异步任务
    使用webview加载网页时session同步
  • 原文地址:https://www.cnblogs.com/Yogile/p/12924034.html
Copyright © 2020-2023  润新知