博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2017-2018-1 20155315 《信息安全系统设计基础》实验五 通讯协议设计
阅读量:5103 次
发布时间:2019-06-13

本文共 2125 字,大约阅读时间需要 7 分钟。

实验内容

  • 基于Socket实现TCP通信,一人实现服务器,一人实现客户端
  • 研究OpenSSL算法,测试对称算法中的AES,非对称算法中的RSA,Hash算法中的MD5
  • 选用合适的算法,基于混合密码系统实现对TCP通信进行机密性、完整性保护。

实验知识点

  • OpenSSL
  • TCP通信
  • 混合密码系统

实验步骤

(一)Linux下OpenSSL的安装与使用

  • OpenSSL整个软件包大概可以分成三个主要的功能部分:
    • 密码算法库
    • SSL协议库
    • 应用程序
  • 安装过程
./configuremakesudo make install
  • 测试AES
    1071536-20171216121224294-1948233370.png
  • 测试RSA
    1071536-20171216121241419-873322536.png
  • 测试test_openssl.c
    1071536-20171216121401731-113509596.png
  • 主要问题:按照教程一步步进行的时候,发现安装包中有config和Configure,一开始运行Configure,在make的时候总是会出现错误。全部重新来过运行config才正常。查找资料发现其实configure也是一种命令,但是在这次实验中要运行config才可以。

(二)TCP通信

  • 一人实现服务器,一人实现客户端
  • 服务器伪代码
socket()bind()listen()accept()closesocket()
  • 客户端伪代码
socket()bind()connect()closesocket()
  • 运行结果
    1071536-20171216154625124-902243152.png

(三)混合密码系统

在Ubuntu中实现对实验二中的“wc服务器”通过混合密码系统进行防护

生成证书
  • 生成服务器端的私钥(key文件)
    openssl genrsa -des3 -out server.key 1024
  • 生成服务器端的csr文件
    openssl req -new -key server.key -out server.csr -config
  • 客户端生成key文件
    openssl genrsa -des3 -out client.key 1024
  • 生成客户端的csr文件
    openssl req -new -key client.key -out client.csr -config
  • 生成自己的CA,生成ca.key和ca.crt证书文件
    openssl req -new -x509 -keyout ca.key -out ca.crt -config
  • 用生成的ca给服务器的csr文件签名,生成服务器端的证书
    Openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key -config openssl.cnf
  • 用生成的ca给客户端的csr文件签名,生成客户端的证书
    Openssl ca -in client.csr -out client.crt -cert ca.crt -keyfile ca.key -config openssl.cnf
  • 主要问题:在生成服务器端的证书时,提示部门与CA中的定义的部门不符,重新进行第一步修改部门之后生成server.crt。在生成服务器端的证书时,提示因为与前面使用的common name相同,需要修改文件demoCA/index.txt.attr,
    将里面的:unique_subject = yes改为unique_subject = no保存退出再重新输入就可以了。

用混合密码系统进行防护

  • 基本框架与socket编程一样,只是其中需要加入头文件:
#include 
#include
#include

和一些其他的代码:

SSL_library_init();OpenSSL_add_all_algorithms();SSL_load_error_strings();ctx = SSL_CTX_new(SSLv23_server_method());if (ctx == NULL)  {    ERR_print_errors_fp(stdout);    exit(1); }if (SSL_CTX_use_certificate_file(ctx, argv[3], SSL_FILETYPE_PEM) <= 0) {    ERR_print_errors_fp(stdout);    exit(1); }if (SSL_CTX_use_PrivateKey_file(ctx, argv[4], SSL_FILETYPE_PEM) <= 0) {    ERR_print_errors_fp(stdout);    exit(1); }if (!SSL_CTX_check_private_key(ctx))  {    ERR_print_errors_fp(stdout);    exit(1); }
  • 运行结果
    1071536-20171216163401452-2126670249.png

参考资料

PSP时间统计

步骤 耗时 百分比
需求分析 10min 10%
设计 20min 20%
代码实现 50min 50%
测试 10min 10%
总结分析 10min 10%

转载于:https://www.cnblogs.com/-zyl/p/8046930.html

你可能感兴趣的文章
Java对字符串进行的操作
查看>>
Python IO模型
查看>>
Ugly Windows
查看>>
DataGridView的行的字体颜色变化
查看>>
java.nio异步线程安全的IO
查看>>
(网上摘抄)云标签
查看>>
记录-时间日期
查看>>
便签:
查看>>
JS function 函数基本定义方法
查看>>
Java再学习——关于ConcurrentHashMap
查看>>
bzoj3944 Sum
查看>>
后缀表达式/逆波兰表达式
查看>>
标准模板库中的优先队列(priority_queue)
查看>>
如何处理Win10电脑黑屏后出现代码0xc0000225的错误?
查看>>
局域网内手机访问电脑网站注意几点
查看>>
IT项目经验和难点分享
查看>>
那些黑刘翔的人,你们的良心被狗吃了
查看>>
图片延迟加载(lazyload)的实现原理
查看>>
TreeMap和TreeSet在排序时如何比较元素?Collections工具类中的sort()方法如何比较元素?...
查看>>
Redis系列--内存淘汰机制(含单机版内存优化建议)
查看>>