硕士学位论文计算机网络.docx

上传人:b****7 文档编号:9975337 上传时间:2023-02-07 格式:DOCX 页数:16 大小:366.71KB
下载 相关 举报
硕士学位论文计算机网络.docx_第1页
第1页 / 共16页
硕士学位论文计算机网络.docx_第2页
第2页 / 共16页
硕士学位论文计算机网络.docx_第3页
第3页 / 共16页
硕士学位论文计算机网络.docx_第4页
第4页 / 共16页
硕士学位论文计算机网络.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

硕士学位论文计算机网络.docx

《硕士学位论文计算机网络.docx》由会员分享,可在线阅读,更多相关《硕士学位论文计算机网络.docx(16页珍藏版)》请在冰豆网上搜索。

硕士学位论文计算机网络.docx

硕士学位论文计算机网络

3.3.2.3数据传输模块的实现

整个数据传输模块在结构上全部或部分的包含了应用层模块、管理模块、核心控制程序、握手层模块、记录层模块以及套接层模块等,在功能上实现了服务器方和客户方的双向认证,安全通道的建立,应用数据的传输等。

该模块是系统的核心模块,也是整个系统实现的难点和重点。

下面将从三个方面说明该模块的实现:

1)系统认证的建立

系统在实验阶段在服务器方建立自己的简易的CA,为服务器方和客户方颁发符合X.509V3标准的证书,并在服务器方和客户方建立证书库存放自己的证书。

证书生成有两种方式:

命令行方式和OpenSSLAPI函数方式。

Ø命令行方式

OpenSSL软件包提供了命令行方式,使应用者可以手工签署证书。

建立系统模型时就是采用了这种方式分别为服务器方和客户方生成数字证书。

应用OpenSSL指令前需要配置openssl.conf文件,用来对OpenSSL指令行进行相应的设置。

Openssl.conf文件的主要部分如下:

##########################################################

#SampleOpenSSLconfigurationfile#

##########################################################

RANDFILE=E:

\\111\\.rnd

[ca]

default_ca=CA_default#Thedefaultcasection

[CA_default]

dir=C:

\\CA

certs=$dir\\certs#Wheretheissuedcertsarekept

crl_dir=$dir\\crl#Wheretheissuedcrlarekept

database=$dir\\index.txt#databaseindexfile.

new_certs_dir=$dir\\newcerts#defaultplacefornewcerts.

certificate=$dir\\CAcert.pem#TheCAcertificate

serial=$dir\\serial#Thecurrentserialnumber

crl=$dir\\crl.pem#ThecurrentCRL

private_key=$dir\\private\\CAkey.pem#Theprivatekey

RANDFILE=$dir\\private\\.rand#privaterandomnumberfile

x509_extensions=usr_cert#Theextentionstoaddtothecert

default_days=365#howlongtocertifyfor

default_crl_days=30#howlongbeforenextCRL

default_md=md5#whichmdtouse.

preserve=no#keeppassedDNordering

……….

[v3_ca]

subjectKeyIdentifier=hash

authorityKeyIdentifier=keyid:

always,issuer:

always

basicConstraints=CA:

true

[crl_ext]

authorityKeyIdentifier=keyid:

always,issuer:

always

证书生成过程:

1.生成RSA私钥

直接利用genrsa命令可以在屏幕上生成RSA私钥。

命令格式比较简单。

OpenSSL>genrsa

默认选取随机数生成512位私钥。

系统采用了1024位RSA私钥,并利用TripleDES加密生成的私钥文件。

OpenSSL>genrsa–des3-outRootCA.key1024

Genrsa:

:

生成RSA私钥文件

-des3:

用TripleDES算法加密RootCA.key密钥文件

-outRootCA.key:

生成密钥文件

1024:

密钥长度为1024bits

生成密钥文件时系统提示输入TripleDES密码,保护RootCA.key文件。

可以用rsa命令查看私钥内容。

OpenSSL>rsa–text–inRootCA.key输入正确的密码后就可以看到私钥文件的内容。

2.生成自签名的数字证书

OpenSSL软件包中用req命令创建自签名的X.509V3格式的CA证书。

OpenSSL>req-new-x509-days365-nodes-configopenssl.conf–keyRootCA.key–outRootCA.crt

-new:

产生新的证书并要求输入证书信息

-X509:

产生自签名证书,并且可以用来作为根CA,本系统的实验模型就是采用这种方式。

-days365:

证书有效期限为365天

-configopesnssl.conf:

按OpenSSL配置文件工作

-keyRootCA.key:

按RootCA.key作为RootCA.crt的私钥文件

-outCARoot.crt输出数字证书文件。

证书生成时要求用户输入私钥密码以及生成证书文件所需的用户信息。

信息包括:

CountryName(2lettercode)[AU]:

CN

StateorProvinceName(fullname)[Some-State]:

sd

LocalityName(eg,city)[]:

sdu

OrganizationName(eg,company)[InternetWidgits]:

infor

OrganizationalUnitName(eg,section)[]:

lab

CommonName(eg,YourName)[]:

zws

EmailAddress[]:

zws6@

可以用x509命令查看证书的内容:

OpenSSL>x509–noout–text–inRootCA.crt

证书内容得到显示

Ø函数方式

程序中生成数字证书的实现方式比应用命令行方式要复杂一些,但是其基本步骤和原理相似。

主要利用OpenSSL软件包提供的API函数完成。

3.生成RSA密钥对

利用RSArsa=RSA_generate_key(intnum,unsignedlonge,

void(*callback)(int,int,void*),void*cb_arg);函数生成rsa,rsa是包含密钥队的RSA结构数据。

4.生成数字证书信息

intX509_NAME_add_entry_by_txt(X509_NAME*name,char*field,inttype,unsignedchar*bytes,intlen,intloc,intset);

利用该函数将数字证书信息分别导入证书。

5.证书签名

利用以下函数为数字证书设置版本号、公钥等信息。

X509_REQ_set_version(X509_REQ_new(),0L);

X509_REQ_set_pubkey(X509_REQ_new(),pkey)

6.证书保存

利用以下函数将生成的数字证书保存到指定文件中。

PEM_write_bio_PrivateKey(outPvk,pkey,EVP_des_ede3_cbc(), 

    (unsignedchar*)szPrivateKeyPwd,len,NULL,NULL);

outReq=BIO_new_file(szReqFileName,"w");

PEM_write_bio_X509_REQ(outReq,req);

2)系统的构建环境和OpenSSL软件包API函数

系统模型建立过程中,密钥和数字证书的生成主要依靠命令行方式完成,而系统的框架是在OpenSSL软件包的API函数的基础上完成的。

依靠部分API函数构建了C/S结构的系统应用。

系统主要在BorlandC++Builder6.0编译环境下,利用了Win32OpenSSL已编译静态库和.H函数,调用了OpenSSL软件包的API函数。

1.系统建立环境

系统调用libeay.lib和ssleay.lib两个静态库以及需要用到的openssl目录下的众多.H头(ssl.h,evp.h,bio.h,des.h等)文件。

另外由于整个SSL协议是建立在TCP/IP协议基础之上的,因此系统的数据传输也以SOCKET(套接字)传输为基础,系统中引用了winsock2.h头文件。

2.模块建立详细过程和API函数应用

Ø协议初始化

应用OpenSSL软件包以前必须对协议进行初始化。

初始化函数:

#include

#include

#include

#include

#include

intSSL_library_init(void);

intSSL_load_error_strings();

其中SSL_load_error_strings()是对OpenSSL错误信息的初始化。

通常情况下,初始化函数返回值为“1”。

Ø建立会话对象

协议初始化完成后,首先要建立会话对象(SSL_CTX),这个对象是服务器端和客户端进行连接从而数据传输的载体。

SSL_METHOD*meth;

SSL_CTX*ctx;

Char*keyfile;

ctx=SSL_CTX_new(meth);//建立会话对象

meth=SSLv23_method();//指出会话协议

设置SSL_CTX属性:

SSL_CTX_use_certificate_chain_file(ctx,keyfile)//调用证书文件

SSL_CTX_use_PrivateKey_file(ctx,keyfile,SSL_FILETYPE_PEM)

//调用密钥文件

SSL_CTX_load_verify_locations(ctx,CA_LIST,0)//调用证书链

Ø套接字连接

OpenSSL软件包将会话对象建立在套接字之上。

编程时,先建立套接字,指定地址和端口,然后将SSL_CTX进行绑定。

/*建立套接字*/

char*host="127.0.0.1";

intport=8118;

SSL*ssl;

SOCKETsd=socket(AF_INET,SOCK_STREAM,0);

memset(&addr,0,sizeof(addr));

addr.sin_addr=*(structin_addr*)hp->h_addr_list[0];

addr.sin_family=AF_INET;

addr.sin_port=htons(port);

connect(sd,(conststructsockaddrFAR*)&addr,sizeof(addr));

ssl=SSL_new(ctx);

/*套接字绑定*/

inti=SSL_set_fd(ssl,sd);

//i=0绑定失败

//i=1绑定成功

Ø握手协议的实现

OpenSSL软件包实现握手层协议函数:

intflag=SSL_connect(SSL*ssl);//SSL协议握手过程

X509*SSL_get_peer_cert_chain(SSL*ssl);//查询对方证书信息

X509_NAME*X509_get_subject_name(X509*a);//得到证书所有

//者名字

X509_NAME*X509_get_issuer_name(X509*a);//得到证书签署者

//名字

Ø应用数据的传输

握手层协议结束后马上进行数据传输。

数据传输函数:

intSSL_read(SSL*ssl,voidbuf,intnum);//从套接字读取字节

intSSL_write(SSL*ssl,voidbuf,intnum);//向套接字写入字节

读/写成功后返回操作字节数。

ØSSL结束

数据传输结束后,应该释放占用的资源。

intSSL_shutdown(SSL*ssl);//关闭套接字

voidSSL_free(SSL*ssl);//释放套接字

voidSSL_CTX_free(SSL*ssl);//释放SSL会话环境

3)传输部分的软件实现

传输部分主要包含服务器端和客户端两部分,两部分构架基本相同。

以下以客户端为例进行说明:

客户端传输模块部分的构建主要包含以下代码:

(详细代码实现参见附录)

/*headfiles*/

…………

/*Globalsysteminitialization*/

SSL_library_init();

/*Anerrorwritecontext*/

SSL_load_error_strings();

/*Createourcontext*/

meth=SSLv23_method();

ctx=SSL_CTX_new(meth);

ssl=SSL_new(ctx);

/*Socket_Connection*/

SOCKETsd=socket(AF_INET,SOCK_STREAM,0);

if(!

(hp==gethostbyname(host)))Memo1->Lines->Add("Nohost!

");

memset(&addr,0,sizeof(addr));

addr.sin_addr=*(structin_addr*)hp->h_addr_list[0];

addr.sin_family=AF_INET;

addr.sin_port=htons(port);

connect(sd,(conststructsockaddrFAR*)&addr,sizeof(addr));

/*ConnetionofSpcketandSSL*/

kk=SSL_set_fd(ssl,sd);

/*Handshake*/

flag=SSL_connect(ssl);

/*writetypes*/

num=SSL_write(ssl,"HelloWorld!

",strlen("HellosWorld!

"));

第一节系统整体仿真

3.4.1系统仿真环境

1)软件Stunnel建立基于SSL协议的安全数据隧道

Stunnel是一个基于OpenSSL软件包开发的开放源代码的软件。

它可以对任意的TCP会话加密,在服务器和客户端之间建立安全数据隧道。

它采用C/S的工作模式,可以应用在Unix和Windows平台上。

2)软件Privoxy代理服务器端

由于Stunnel是C/S结构,系统仿真时采用代理软件Provixy代理服务器端。

这样服务器端和客户端就可以通过Stunnel建立安全数据隧道进行连接。

3)系统仿真环境说明

系统仿真是在信息科学与工程学院网络技术研究所的局域网环境下,利用两台PC机进行的。

机器配置分别为:

机器A:

处理器IntelPentiumII2.4GHz内存256M操作系统MicrosoftWindows2000AdvancedServerServicePack6IPAddress202.194.20.211

机器B:

处理器IntelCeleron1.0GHz内存256M操作系统MicrosoftWindows2000AdvancedServerServicePack6IPAddress202.194.20.140IE6.0

机器A、B分别作为服务器和客户机。

代理软件Privoxy位于机器A上,为客户机B提供代理服务。

两台机器之间通过Stunnel建立安全数据隧道。

即:

AB之间的数据传输是在局域网环境下建立的安全隧道中进行的,所有传输数据都经过了加密处理。

而且AB在数据传输前经过握手协议,验证了对方的数字证书,完成了双向认证。

这样就防止了数据窃听及身份伪造等攻击行为的发生,保证了数据的完整性、保密性以及不可否认性。

4)安全数据隧道的建立

Ø服务器A安装、配置、运行Privoxy代理软件

Privoxy代理软件可以在Windows平台下运行。

Privoxy可配置项较多(config.txt),主要选项包括:

listen-address:

127.0.0.1:

8118//侦听地址和端口,采用默认值

peimit-access:

permit-accesslocalhost//只允许本地主机访问

Ø创建服务器A证书文件

Stunnel运行时所需要的证书存在于证书文件中(StunServ.pem)。

运用OpenSSL命令生成证书文件

OpenSSL>req-new-x509-days365-nodes-configopenssl.conf-outStunServ.pem-keyoutStunServ.pem

证书生成过程中要求输入服务器证书相关信息,最后证书保存在StunServ.pem文件中。

可以用X509命令查看证书信息。

Ø安装、配置、运行服务器端Stunnel软件

stunnel.conf包含了Stunnel软件的配置信息。

主要配置内容有:

key=StunServ.pem//证书文件

accept=443//与客户端建立安全连接端口

connect=127.0.0.1:

8118//将443端口映射到Privoxy端口

安装配置完成后就可以启动Stunnel,它将通过443端口与客户端进行连接,并将连接映射到本机的8118端口。

Ø安装、配置、运行客户端Stunnel软件

客户端与服务器端的配置略有不同,可户端stunnel.conf的配置文件:

client=yes//表明为客户端

accept=127.0.0.1:

80//使用80端口代理

connect=202.194.20.211:

443//与服务器的443端口进行连接

Ø设置客户端浏览器代理

为IE浏览器设置http代理,代理地址和端口为127.0.0.1:

80。

这样客户端B的浏览器将通过Stunnel建立的安全通道与服务器端A的Privoxy进行连接。

3.4.2系统仿真结果分析

Ø仿真系统功能说明

图4.6表示了仿真系统的结构功能图。

仿真系统将C/S结构模块嵌入到B/S结构系统中。

Stunnel软件在服务器端A和客户端B之间建立了安全数据隧道,该安全通道位于局域网中。

最终客户端浏览器通过服务器端代理软件Privoxy与Internet交换数据。

Ø仿真系统运行效果

图4.7表示了客户端B应用Stunnel软件的记录文件内容。

浏览器通过Stunnel与服务器A端代理软件建立连接。

收发数据都经过了SSL加密处理。

图4.7客户端Stunnel记录

图4.8和图4.9表示了服务器端Stunnel和Privoxy的运行记录。

服务器端Stunnel与客户端Stunnel建立了数据安全隧道,Privoxy接受Stunnel数据,为客户端浏览器提供代理服务。

图4.8服务器端Stunnel记录

图4.9服务器端Privoxy记录

Ø关于仿真系统

应用中可以在服务器端运行Tomcat或Apache等服务器,使客户端通过安全数据传输隧道访问它们。

另外,基于C/S结构的Stunnel完全可以无缝的嵌入到B/S或C/S结构中,为应用程序提供安全的数据传输通道。

系统的构建原则与仿真系统相似,就是要在系统中应用OpenSSL软件包按照SSL协议为数据传输建立安全隧道。

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

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1