2019-2020-1 20175302 201752314 20175316 实验五 通讯协议设计
任务一
任务详情
在Ubuntu中完成 http://www.cnblogs.com/rocedu/p/5087623.html 中的作业
关于OpenSSL
背景技术
- SSL是Secure Sockets Layer(安全套接层协议)的缩写,可以在Internet上提供秘密性传输。其目标是保证两个应用间通信的保密性和可靠性,可在服务器端和用户端同时实现支持。已经成为Internet上保密通讯的工业标准。
SSL能使用户/服务器应用之间的通信不被攻击者窃听,并且始终对服务器进行认证,还可选择对用户进行认证。SSL协议要求建立在可靠的传输层协议(TCP)之上。SSL协议的优势在于它是与应用层协议独立无关的,高层的应用层协议(例如:HTTP,FTP,TELNET等)能透明地建立于SSL协议之上。SSL协议在应用层协议通信之前就已经完成加密算法、通信密钥的协商及服务器认证工作。在此之后应用层协议所传送的数据都会被加密,从而保证通信的私密性。
工作流程
服务器认证阶段:
- 客户端向服务器发送一个开始信息“Hello”以便开始一个新的会话连接;
- 服务器根据客户的信息确定是否需要生成新的主密钥,如需要则服务器在响应客户的“Hello”信息时将包含生成主密钥所需的信息;
- 客户根据收到的服务器响应信息,产生一个主密钥,并用服务器的公开密钥加密后传给服务器;
服务器回复该主密钥,并返回给客户一个用主密钥认证的信息,以此让客户认证服务器。
用户认证阶段:
在此之前,服务器已经通过了客户认证,这一阶段主要完成对客户的认证。经认证的服务器发送一个提问给客户,客户则返回(数字)签名后的提问和其公开密钥,从而向服务器提供认证。
实验过程及步骤
Linux下OpenSSL的安装
- 解压源码:
unzip openssl-master.zip
- 进入源代码目录:
cd openssl-master
编译安装:
./config
make
sudo make install
使用make test
进行测试
Linux下OpenSSL的使用
通过
man openssl
查看帮助文档
- 编写测试代码
test_openssl.c
#include <stdio.h>
#include <openssl/evp.h>
int main(){
OpenSSL_add_all_algorithms();
return 0;
}
- 编译:
gcc -o test_openssl test_openssl.c -L/usr/local/ssl/lib -lcrypto -ldl -lpthread
,生成可执行文件test_openssl
- 执行
echo $?
,结果打印0