网络安全实训报告Word格式文档下载.docx

上传人:b****1 文档编号:4506243 上传时间:2023-05-03 格式:DOCX 页数:15 大小:107.68KB
下载 相关 举报
网络安全实训报告Word格式文档下载.docx_第1页
第1页 / 共15页
网络安全实训报告Word格式文档下载.docx_第2页
第2页 / 共15页
网络安全实训报告Word格式文档下载.docx_第3页
第3页 / 共15页
网络安全实训报告Word格式文档下载.docx_第4页
第4页 / 共15页
网络安全实训报告Word格式文档下载.docx_第5页
第5页 / 共15页
网络安全实训报告Word格式文档下载.docx_第6页
第6页 / 共15页
网络安全实训报告Word格式文档下载.docx_第7页
第7页 / 共15页
网络安全实训报告Word格式文档下载.docx_第8页
第8页 / 共15页
网络安全实训报告Word格式文档下载.docx_第9页
第9页 / 共15页
网络安全实训报告Word格式文档下载.docx_第10页
第10页 / 共15页
网络安全实训报告Word格式文档下载.docx_第11页
第11页 / 共15页
网络安全实训报告Word格式文档下载.docx_第12页
第12页 / 共15页
网络安全实训报告Word格式文档下载.docx_第13页
第13页 / 共15页
网络安全实训报告Word格式文档下载.docx_第14页
第14页 / 共15页
网络安全实训报告Word格式文档下载.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

网络安全实训报告Word格式文档下载.docx

《网络安全实训报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《网络安全实训报告Word格式文档下载.docx(15页珍藏版)》请在冰点文库上搜索。

网络安全实训报告Word格式文档下载.docx

私钥只有自己知道。

由公钥加密的信息只能由与之相对应的私钥解密。

为确保只有某个人才能阅读自己的信件,发送者要用收件人的公钥加密信件;

收件人便可用自己的私钥解密信件。

同样,为证实发件人的身份,发送者要用自己的私钥对信件进行签名;

收件人可使用发送者的公钥对签名进行验证,以确认发送者的身份。

它能保证用户之间在网上传递信息的安全性、真实性、可靠性、完整性和不可抵赖性,不仅需要对用户的身份真实性进行验证,也需要有一个具有权威性、公正性、唯一性的机构,负责向电子商务的各个主体颁发并管理符合国内、国际安全电子交易协议标准的电子商务安全证,并负责管理所有参与网上交易的个体所需的数字证书。

二、实验环境

WindowsXP、VisualC++6.0、openssl

三、总体概述

程序分为两部分,客户端和服务器端,我们的目的是利用openssl开发包编写建立在

SSL上的C/S程序,利用SSL/TLS的特性保证通信双方能够互相验证对方身份(真实性),并保证数据的完整性,私密性。

以达到对其传输信息进行加密。

功能结构图:

ClientServer

阻塞等待客户端Recv()Send()

Socket()()SocketReturn聊天

聊天内容

Bind()

listen

IP

获取主机

()

Connect)Send客户端接收文件

accept

(()选择

客户选择是否同意

客户端发送文件

获取信息Send()退出

打开记录文件

Recv()

聊天内容

写入记录文件

Recv()

获取信息

Send()

写入记录文件

四、实验过程及对结果的分析

1、建立openssl环境

2、下载CA证书并对其进行分割

3、编写server端程序及编写client端程序

4、利用证书,对通信进行加密

验证实验结果:

这是连接成功服务器端的程序

这是连接成功客户端的程序

五、详细设计

主要代码块的说明:

1、程序结构

客户端程序的框架为:

/*生成一个SSL结构*/

meth=SSLv23_client_method();

ctx=SSL_CTX_new(meth);

ssl=SSL_new(ctx);

/*下面是正常的TCPsocket过程*/

printf(Begintcpsocket...\n);

sd=socket(AF_INET,SOCK_STREAM,0);

CHK_ERR(sd,socket);

memset(&

sa,'

'

sizeof(sa));

sa.sin_family=AF_INET;

sa.sin_addr.s_addr=inet_addr(SERVER_ADDR);

/*ServerIP*/

sa.sin_port=htons(PORT);

/*ServerPortnumber*/

err=connect(sd,(structsockaddr*)&

sa,

sizeof(sa));

CHK_ERR(err,connect);

/*TCP链接已建立.开始SSL握手过程..........................*/

printf(BeginSSLnegotiation\n);

ssl=SSL_new(ctx);

CHK_NULL(ssl);

SSL_set_fd(ssl,sd);

err=SSL_connect(ssl);

CHK_SSL(err);

/*把建立好的socket和SSL结构联系起来*/

SSL_set_fd(ssl,fd);

/*数据交换开始,用SSL_write,SSL_read代替write,read*/

printf(BeginSSLdataexchange\n);

err=SSL_write(ssl,HelloWorld!

strlen(HelloWorld!

));

err=SSL_read(ssl,buf,sizeof(buf)-1);

buf[err]='

;

printf(Got%dchars:

%s'

\n,err,buf);

SSL_shutdown(ssl);

/*sendSSL/TLSclose_notify*/

服务端程序的框架为:

meth=SSLv23_server_method();

/*接受TCP链接*/

err=listen(listen_sd,5);

CHK_ERR(err,listen);

client_len=sizeof(sa_cli);

sd=accept(listen_sd,(structsockaddr*)&

sa_cli,&

client_len);

CHK_ERR(sd,accept);

closesocket(listen_sd);

printf(Connectionfrom%lx,port%x\n,

sa_cli.sin_addr.s_addr,sa_cli.sin_port);

/*TCP连接已建立,进行服务端的SSL过程.*/

printf(BeginserversideSSL\n);

err=SSL_accept(ssl);

printf(SSL_acceptfinished\n);

err=SSL_write(ssl,Ihearyou.,strlen(Ihearyou.));

2、根据RFC2246(TLS1.0)整个TLS(SSL)的流程如下:

ClientHello-------->

ServerHello

Certificate*

ServerKeyExchange*

CertificateRequest*

<

--------ServerHelloDone

ClientKeyExchange

CertificateVerify*

[ChangeCipherSpec]

Finished-------->

--------Finished

ApplicationData<

------->

ApplicationData

对程序来说,openssl将整个握手过程用一对函数体现,即客户端的SSL_connect和服务端的SSL_accept.而后的应用层数据交换则用SSL_read和SSL_write来完成.

函数介绍:

1、intSSL_CTX_set_cipher_list(SSL_CTX*,constchar*str);

根据SSL/TLS规范,在ClientHello中,客户端会提交一份自己能够支持的加密方法的列表,由服务端选择一种方法后在ServerHello中通知服务端,从而完成加密算法的协商.

可用的算法有:

EDH-RSA-DES-CBC3-SHA

EDH-DSS-DES-CBC3-SHA

DES-CBC3-SHA

DHE-DSS-RC4-SHA

IDEA-CBC-SHA

RC4-SHA

RC4-MD5

我们在程序中选用了RC4做加密,MD5做消息摘要(先进行MD5运算,后进行RC4加密).即SSL_CTX_set_cipher_list(ctx,RC4-MD5);

2、intSSL_CTX_load_verify_locations(SSL_CTX*ctx,constchar*CAfile,constchar*CApath);

要验证对方的话,当然装要有CA的证书了,此函数用来便是加载CA的证书文件的.

3、intSSL_CTX_use_certificate_file(SSL_CTX*ctx,constchar*file,inttype);

加载自己的证书文件.

4、intSSL_CTX_use_PrivateKey_file(SSL_CTX*ctx,constchar*file,inttype);

加载自己的私钥,以用于签名.

5、intSSL_CTX_check_private_key(SSL_CTX*ctx);

调用了以上两个函数后,自己检验一下证书与私钥是否配对.

6、OpenSSL_add_ssl_algorithms()或SSLeay_add_ssl_algorithms()

其实都是调用intSSL_library_init(void)

进行一些必要的初始化工作,用openssl编写SSL/TLS程序的话第一句便应是它.

7、voidSSL_load_error_strings(void);

如果想打印出一些方便阅读的调试信息的话,便要在一开始调用此函数.

8、voidERR_print_errors_fp(FILE*fp);

如果调用了SSL_load_error_strings()后,便可以随时用ERR_print_errors_fp()来打印错误信息了.

9、X509*SSL_get_peer_certificate(SSL*s);

握手完成后,便可以用此函数从SSL结构中提取出对方的证书(此时证书得到且已经验证过了)整理成X509结构.

六、测试

测试通信是否已经加密的方法:

使用网络监视器来验证在应用程序服务器与数据库服务器之间传送的数据是否已加密。

首先以明文形式发送数据,然后通过先配置服务器,再配置客户端来启用加密。

七、心得体会

在实验中,我感受到openssl是sslv2,sslv3,tlsv1的一份完整实现,内部包含了大量加密算法程序.其命令行提供了丰富的加密,验证,证书生成等功能,甚至可以用其建立一个完整的CA.与其同时,它也提供了一套完整的库函数,可用开发用SSL/TLS的通信程序.

我们这几天的实训内容是“CA证书服务器的建立与使用”,在开始的申请证书、导出包含公私钥的密钥文件、分割公私密钥时还是可以顺利完成的;

但在编译openssl环境时,由于对控制台的操作不熟悉,走了弯路,而且在openssl的解压目录下执行命令时,未执行“ms\do_ms”命令,导致后续步骤出错,无法进行下去。

在最后的程序调试过程中,由于马虎,将添加在lib下的文件名输入错误,导致程序报错,找不到此文件,经过进一步的调试,程序无错误无警告,但服务器端运行时仍出现有要发送的错误报告,此问题还有待解决。

参考文献

1.SSL规范(draft302)

2.openssl源程序及文档

3.

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2