2019-2020-1 20175234 20175205 20175217 实验五 通讯协议设计
2019-2020-1 20175234 20175205 20175217 实验五 通讯协议设计
实验内容
任务一
实验要求
- 在Ubuntu中完成 http://www.cnblogs.com/rocedu/p/5087623.html 中的作业
实验步骤
- 安装OpenSSL,OpenSSL是一个SSL协议的开源实现,采用C语言作为开发语言,具备了跨平台的能力,支持Unix/Linux、Windows、Mac OS等多种平台。
-
Linux下OpenSSL的使用
- 通过
man openssl
查看帮助文档
- 通过
- 编写一个测试代码test_openssl.c
#include <stdio.h>
#include <openssl/evp.h>
int main(){
OpenSSL_add_all_algorithms();
return 0;
}
-
然后使用
gcc -o to test_openssl.c -I /usr/local/ssl/inlcude -L /usr/local/ssl/lib -ldl -lpthread
进行编译 -
执行
./to;echo $?
,结果打印0。
任务二
实验要求
- 研究OpenSSL算法,测试对称算法中的AES,非对称算法中的RSA,Hash算法中的MD5
- 基于Socket实现TCP通信,一人实现服务器,一人实现客户端
- 选用合适的算法,基于混合密码系统实现对TCP通信进行机密性、完整性保护。
- 学有余力者,对系统进行安全性分析和改进。
实验步骤
- AES
- 测试命令:
openssl enc -aes-128-cbc -in plain.txt -out encrypt.txt -pass pass:123456 -p
- 测试命令:
- RSA
- 生成RSA密钥:
openssl genrsa -des3 -passout pass:123456 -out RSA.pem
- 提取公钥:
openssl rsa -in RSA.pem -passin pass:123456 -pubout -out pub.pem
- 使用RSA作为密钥进行加密,实际上使用其中的公钥进行加密:
openssl rsautl -encrypt -in plain.txt -inkey RSA.pem -passin pass:123456 -out enc.txt
- 使用RSA作为密钥进行解密,实际上使用其中的私钥进行解密:
openssl rsautl -decrypt -in enc.txt -inkey RSA.pem -passin pass:123456 -out replain.txt
- 比较原始文件和解密后文件:
diff plain.txt replain.txt
- 生成RSA密钥:
- MD5
-使用echo "20175217" | openssl dgst -md5
用MD5算法加密信息"20175217"
- Socket通信
- 编译server.c:
gcc -o server server.c -I /usr/local/ssl/include -L/usr/local/ssl/lib -lssl -lcrypto -ldl -lpthread
- 编译telent.c:
gcc -o telent telent.c -I /usr/local/ssl/include -L/usr/local/ssl/lib -lssl -lcrypto -ldl -lpthread
- 生产私钥和证书:
openssl genrsa -out privkey.pem 1024
、openssl req -new -x509 -key privkey.pem -out CAcert.pem -days 1095
- 运行:
./server 8888 1 CAcert.pem privkey.pem
、./telent 127.0.0.1 8888
- 编译server.c:
遇到的问题及解决方法
问题1:在进行编译时出现找不到文件的情况,错误提示:openssl error while loading shared libraries: libssl.so.1.1
解决1:查询资料后发现这是由于openssl库的位置不正确造成的,用命令:ln -s /usr/local/openssl/lib/libssl.so.1.1 /usr/lib64/libssl.so.1.1
、ln -s /usr/local/openssl/lib/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1
做一个软连接,即解决了该问题