网络安全实训报告

上传人:鲁** 文档编号:470232668 上传时间:2023-02-02 格式:DOC 页数:10 大小:220KB
返回 下载 相关 举报
网络安全实训报告_第1页
第1页 / 共10页
网络安全实训报告_第2页
第2页 / 共10页
网络安全实训报告_第3页
第3页 / 共10页
网络安全实训报告_第4页
第4页 / 共10页
网络安全实训报告_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《网络安全实训报告》由会员分享,可在线阅读,更多相关《网络安全实训报告(10页珍藏版)》请在金锄头文库上搜索。

1、目录一、 背景描述 1二、 实验环境 1三、 总体概述 四、 实验过程及结果分析 五、 详细设计 六、 测试 .七、 心得体会 .参考文献 一、背景知识描述CA 拥有一个证书(内含公钥和私钥)。网上的公众用户通过验证 CA 的签字从而信任 CA ,任何人都可以得到 CA 的证书(含公钥),用以验证它所签发的证书。数字证书在用户公钥后附加了用户信息及CA的签名。公钥是密钥对的一部分,另一部分是私钥。公钥公之于众,谁都可以使用。私钥只有自己知道。由公钥加密的信息只能由与之相对应的私钥解密。为确保只有某个人才能阅读自己的信件,发送者要用收件人的公钥加密信件;收件人便可用自己的私钥解密信件。同样,为证

2、实发件人的身份,发送者要用自己的私钥对信件进行签名;收件人可使用发送者的公钥对签名进行验证,以确认发送者的身份。它能保证用户之间在网上传递信息的安全性、真实性、可靠性、完整性和不可抵赖性,不仅需要对用户的身份真实性进行验证,也需要有一个具有权威性、公正性、唯一性的机构,负责向电子商务的各个主体颁发并管理符合国内、国际安全电子交易协议标准的电子商务安全证,并负责管理所有参与网上交易的个体所需的数字证书。二、实验环境 Windows XP、Visual C+ 6.0、openssl三、总体概述程序分为两部分,客户端和服务器端,我们的目的是利用openssl开发包编写建立在SSL上的C/S程序,利用

3、SSL/TLS的特性保证通信双方能够互相验证对方身份(真实性),并保证数据的完整性, 私密性。以达到对其传输信息进行加密。功能结构图:ServerSocket()Bind ()listen()accept()阻塞等待客户端ReturnRecv()客户选择Send()是否同意客户端发送文件Socket()获取主机IPConnect()ClientSend()选择客户端接收文件聊天获取信息Send()聊天内容Recv()聊天内容打开记录文件Recv()聊天内容写入记录文件获取信息Send()聊天内容写入记录文件退出四、实验过程及对结果的分析1、建立openssl 环境 2、下载CA 证书并对其进行

4、分割 3、 编写server端程序及编写client端程序4、 利用证书,对通信进行加密验证实验结果:这是连接成功服务器端的程序 这是连接成功客户端的程序五、详细设计主要代码块的说明:1、程序结构客户端程序的框架为:/*生成一个SSL结构*/meth = SSLv23_client_method();ctx = SSL_CTX_new (meth); ssl = SSL_new(ctx);/*下面是正常的TCP socket过程*/printf(Begin tcp socket.n);sd = socket (AF_INET, SOCK_STREAM, 0); CHK_ERR(sd, sock

5、et);memset (&sa, , sizeof(sa);sa.sin_family = AF_INET;sa.sin_addr.s_addr = inet_addr (SERVER_ADDR); /* Server IP */sa.sin_port = htons (PORT); /* Server Port number */err = connect(sd, (struct sockaddr*) &sa,sizeof(sa); CHK_ERR(err, connect);/* TCP 链接已建立.开始 SSL 握手过程. */printf(Begin SSL negotiation n

6、);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(Begin SSL data exchangen);err = SSL_write (ssl, Hello World!, strlen(Hello World!); CHK_SSL(err);err = SSL_rea

7、d (ssl, buf, sizeof(buf) - 1); CHK_SSL(err);buferr = ;printf (Got %d chars:%sn, err, buf);SSL_shutdown (ssl); /* send SSL/TLS close_notify */服务端程序的框架为:/*生成一个SSL结构*/meth = SSLv23_server_method();ctx = SSL_CTX_new (meth); ssl = SSL_new(ctx);/*接受TCP链接*/err = listen (listen_sd, 5); CHK_ERR(err, listen);

8、client_len = sizeof(sa_cli);sd = accept (listen_sd, (struct sockaddr*) &sa_cli, &client_len);CHK_ERR(sd, accept);closesocket (listen_sd);printf (Connection from %lx, port %xn,sa_cli.sin_addr.s_addr, sa_cli.sin_port);/*TCP连接已建立,进行服务端的SSL过程. */printf(Begin server side SSLn);ssl = SSL_new (ctx); CHK_NU

9、LL(ssl);SSL_set_fd (ssl, sd);err = SSL_accept (ssl);printf(SSL_accept finishedn);CHK_SSL(err);/*把建立好的socket和SSL结构联系起来*/SSL_set_fd(ssl,fd);/* 数据交换开始,用SSL_write,SSL_read代替write,read */err = SSL_read (ssl, buf, sizeof(buf) - 1); CHK_SSL(err);buferr = ;printf (Got %d chars:%sn, err, buf);err = SSL_write

10、 (ssl, I hear you., strlen(I hear you.); CHK_SSL(err);2、根据RFC2246(TLS1.0)整个TLS(SSL)的流程如下:Client ServerClientHello -ServerHelloCertificate*ServerKeyExchange*CertificateRequest*ChangeCipherSpec- FinishedApplication Data Application Data对程序来说,openssl将整个握手过程用一对函数体现,即客户端的SSL_connect和服务端的SSL_accept.而后的应用层

11、数据交换则用SSL_read和 SSL_write来完成.函数介绍:1、int SSL_CTX_set_cipher_list(SSL_CTX *,const char *str);根据SSL/TLS规范,在ClientHello中,客户端会提交一份自己能够支持的加密方法的列表,由服务端选择一种方法后在ServerHello中通知服务端, 从而完成加密算法的协商.可用的算法有:EDH-RSA-DES-CBC3-SHAEDH-DSS-DES-CBC3-SHADES-CBC3-SHADHE-DSS-RC4-SHAIDEA-CBC-SHARC4-SHARC4-MD5我们在程序中选用了RC4做加密,M

12、D5做消息摘要(先进行MD5运算,后进行RC4加密).即SSL_CTX_set_cipher_list(ctx,RC4-MD5);2、int SSL_CTX_load_verify_locations(SSL_CTX *ctx, const char *CAfile,const char *CApath);要验证对方的话,当然装要有CA的证书了,此函数用来便是加载CA的证书文件的.3、int SSL_CTX_use_certificate_file(SSL_CTX *ctx, const char *file, int type);加载自己的证书文件.4、int SSL_CTX_use_Pri

13、vateKey_file(SSL_CTX *ctx, const char *file, int type);加载自己的私钥,以用于签名.5、int SSL_CTX_check_private_key(SSL_CTX *ctx);调用了以上两个函数后,自己检验一下证书与私钥是否配对.6、OpenSSL_add_ssl_algorithms()或SSLeay_add_ssl_algorithms()其实都是调用int SSL_library_init(void)进行一些必要的初始化工作,用openssl编写SSL/TLS程序的话第一句便应是它.7、void SSL_load_error_strings(void );如果想打印出一些方便阅读的调试信息的话,便要在一开始调用此函数.8、void ERR_print_errors_fp(FILE *fp);如果调用了SSL_load_error_strings()后,便可以随时用ERR_print_errors_fp()来打印错误信息了.9、X509 *SSL_get_peer_ce

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 工作计划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号