信息安全课程论文答卷.docx
《信息安全课程论文答卷.docx》由会员分享,可在线阅读,更多相关《信息安全课程论文答卷.docx(22页珍藏版)》请在冰豆网上搜索。
信息安全课程论文答卷
---------------------------------------------装------------------------------------------订-----------------------------------------线----------------------------------------
班级10信息管理与信息系统2班姓名李政学号10251101221
-
广东财经大学答题纸(格式二)
课程信息安全2013-2014学年第1学期
课程代码119203课程班级及座位号
成绩 评阅人
检查项目
权重
得分
(1)选题意义:
选题是否为研究领域的热点话题,研究意义是否明确。
20
(2)论文摘要和关键词:
摘要能否简要地阐明研究目的、方法、范围、结果及结论;关键词选择是否恰当。
20
(3)学术价值和应用价值:
论文结构是否合理,概念是否准确,论证是否合乎逻辑;分析问题是否有一定的深度,解决问题是否有一定的创新。
30
(4)文字质量:
语言是否精炼,语义是否清晰。
20
(5)文献引用:
文献格式是否规范,引用是否够全面。
10
合计
100
WebServices的单向和双向认证
------------------------------------------------------------------------------------------------------------------------------------
摘要
OpenSSL(http:
//www.openssl.org/)是一个开放源代码软件包,实现了SSL及相关加密技术,是最常用的数字证书管理工具。
数字证书也称作电子证书,用于标识网路中计算机的身份。
而Https协议是网络中web最常用的安全协议,是基于SSL/TLS协议的HTTP协议,位于应用层,而SSL./TLS是带有加密信息的传输层协议,数据证书正是为这种协议相关的加密和解密信息。
本文将介绍如何利用Tomcat的HTTPS功能,和一个自己创建的CA,来构建WEB服务器证书和个人数字证书,最终建成一个HTTPS单向认证和双向认证环境。
并且使用AXIS2开源Webservice框架,提供一个简单的计算器web服务,通过使用Wireshark网络监测工具,对比Webservice使用证书认证后,认证协议对SOAP明文的保护,进而对认证技术进行更深刻的探讨。
关键字:
WebserviceOpenSSL单向认证双向认证
Abstract
OpenSSL(http:
//www.openssl.org/)isanopensourcesoftwarepackagethatimplementsSSLandrelatedencryptiontechnology,andisthemostcommonlyuseddigitalcertificatemanagementtools..Adigitalcertificateisalsocalledelectroniccertificate,usedtoidentifytheidentityofthecomputerinthenetwork.WhiletheHttpsprotocolisthemostcommonlyusednetworkwebsecurityprotocols,isbasedonSSL/TLSprotocolHTTPprotocol,islocatedintheapplicationlayer,andSSL./TLStransportlayerprotocolisencryptedwithinformation,datacertificateforencryptionanddecryptionofinformationaboutthisagreement.ThisarticleintroduceshowtousetheTomcatHTTPSfunctions,andaselfcreatedCA,tobuildaWEBservercertificateandpersonaldigitalcertificate,finallybuiltaHTTPSone-wayauthenticationandtwo-wayauthenticationenvironment.AnduseAXIS2opensourcewebserviceframework,providingasimplecalculatorwebservice,usingwiresharknetworkmonitoringtools,contrastwebserviceusingcertificateauthentication,authenticationprotocolforSOAPprotectionofplaintext,andauthenticationtechnologyfordeeperdiscussion.
Keywords:
WebserviceopenSSLOne-wayauthenticationTwo-wayauthentication
1、前言
随着信息技术和计算机网络的迅速发展,越来越多的网络应用在交换信息的时候需要关注信息的保密性。
特别是在网络上进行金融交易,保密性业务交互时,我们需要确认对方的身份和信息的完整性,以及我们的信息在传输的过程中必须加密。
Webservice是一个平台独立的,松耦合的,自包含的、基于可编程的web的应用程序,对于WebService系统我们并不陌生,通过WebService我们可以使用浏览器就可以获得如桌面程序运行所获得的远程服务器信息。
而这些信息是基于SOAP或WSDL协议的可扩展的标记语言(XML),是人和机器皆可以读懂的数据保存格式。
如何保护这种明文展示的数据?
WebService数据安全显得十分重要。
OpenSSL是为网络通信提供安全及数据完整性的一种安全协议,囊括了主要的密码算法、常用的密钥和证书封装管理功能以及SSL协议,并提供了丰富的应用程序供测试或其它目的使用。
使用OpenSSL应用程序,可以快速地构建webservice安全环境,为webservice提供认证协议保护数据的功能。
1.1编写目的
本文就如何构建webservice,并且使用openSSL对webservice数据交互过程进行安全保护,使用wireshark进行网络监测对比加密的情况,完成基于webservice的单向认证和双向认证的应用程序做实验过程记录,并对实验结果进行思考和探索。
1.2软件定义
本次程序使用java编程语言完成了webservice的客户端和webservice的服务端,并且使用openSSL应用程序生成了个人客户端证书,服务端证书,以及根证书,是一项实验程序。
1.3开发环境
硬件:
计算机:
ACER4820TG笔记本计算机
处理器:
I5-450M2.5G四核笔记本处理器
内存:
2GB(金士顿DDR2800MHz)主硬盘希捷(500GB/7200转/分)
显示器:
14.6寸支持1366*768以上分辨率。
软件:
操作系统:
Windows7旗舰版64位操作系统
应用软件:
JDK1.6.0、apache-tomcat-7..0.37、Myeclipse8.5
开源工具包:
JUnit4.11、Axis2、Apache-CommonsCodec1.5、OpenSSL1.0..1
2.实验原理介绍
2.1OpenSSL介绍
SSL是SecureSocketLayer(安全套接层协议)的缩写,目标是保证两个应用间通信的保密性和可靠性,可在服务器端和用户端同时实现支持.该协议能使用户/服务器应用之间的通信不被攻击者窃听,并且始终对服务器进行认证,还可选择对用户进行认证。
我们可以使用openssl签发自己的证书,数字证书充当加密算法的载体,为数据进行加密与解密,签名和认证等工作。
签发的过程首先是要证书需求者生成自己的密钥对,然后将加密算法,公钥与及个人信息发给认证机构,openssl充当认证机构的角色,对用户的身份进行确认并且生成证书。
使用openssl可以相继生成根证书,服务端证书以及客户端证书。
2.2Axis2webservice框架介绍
Axis本质上就是一个SOAP引擎,提供创建服务器端、客户端和网关SOAP操作的基本框架。
使用Axis可以快速将java应用类发布成webservice形式,并且通过浏览器可以浏览其wsdl描述,可以使用javaRPC创建客户端远程调用server端的服务。
2.3单向认证及双向认证
客户端在双向认证及单向认证的环境中请求web服务,都必须先向与服务器协商算法。
经过此步骤后,服务器下发服务器证书至客户端,客户端验证该证书以确认服务器身份。
若服务器的身份得确认,则可以开展以服务端单向认证为基础的加密交互。
若要构建双向认证,则服务器也要求客户端提供数字证书,服务器将证书发至认证机构以确认客户端身份。
若双方的身份都得意确认,则可以进行加密交互。
对于加密的过程,客户端取得服务器证书公钥,并生成对称密钥对,使用证书公钥加密秘钥对发动给服务端。
服务端用服务证书私钥解密加密信息,获得密钥对。
秘钥对则是服务端与客户端所构建的会话密钥。
双方就会话密钥对进行握手,加密webservice的服务信息即将开始。
客户端使用会话密钥的公钥对数据进行加密,向服务端发起请求,服务端用私钥解密数据。
完成处理请求后,服务端用私钥对数据进行签名和加密,回应客户端加密后的数据及数字签名。
客户端使用公钥对数据进行数字签名的验证确认信息的来源并且解密数据。
SSL对于上述的实验更加复杂,但已经对所有步骤进行封装。
本文的软件直接调用了OpenSSL的API,直接构建了HTTPS单向认证及双向认证的环境。
3.实验过程及代码
3.1生成根证书、服务端证书、以及客户端证书
利用OpenSSL生成CA自签名证书ca.p12、服务器证书server.p12和客户端证书client.p12。
1、本文使用lizhengCA命名签发根证书ca.p12,为了方便,所以证书的密码为123456.在windows命令模式,代码如下:
opensslreq-new-keyprivate/ca.key.pem-outprivate/ca.csr-subj"/C=CN/ST=GZ/L=GZ/O=lizheng/OU=lizheng/CN=lizhengCA"
opensslx509-req-days10000-sha1-extensionsv3_ca-signkeyprivate/ca.key.pem-inprivate/ca.csr-outcerts/ca.cer
opensslpkcs12-export-cacerts-inkeyprivate/ca.key.pem-incerts/ca.cer-outcerts/ca.p12
图1根证书构建过程
2、为了使用wireshark监测客户端与webservice服务端的数据交互,故把服务端部署在172.16.56.111的tomcat服务器上,并且使用172.16.56.111为用户名签发服务器证书server.p12。
代码如下:
opensslgenrsa–aes256–outprivate/server.key.pem2048
opensslreq-new-keyprivate/server.key.pem-outprivate/server.csr-subj"/C=CN/ST=GZ/L=GZ/O=lizheng/OU=lizheng/CN=172.16.56.111"
opensslx509-req-days3650-sha1-extensionsv3_req-CAcerts/ca.cer-CAkeyprivate/ca.key.pem-CAserialca.srl-CAcreateserial-inprivate/server.csr-outcerts/server.cer
opensslpkcs12-export-clcerts-inkeyprivate/server.key.pem-incerts/server.cer-outcerts/server.p12
图2服务器证书构建过程
3、签发客户端证书client.p12。
注意构建时候与服务端签发机构要保持一致。
代码如下:
opensslgenrsa-aes256-outprivate/client.key.pem2048
opensslreq-new-keyprivate/client.key.pem-outprivate/client.csr-subj"/C=CN/ST=GZ/L=GZ/O=lizheng/OU=lizheng/CN=info"
opensslca-days3650-inprivate/client.csr-outcerts/client.cer-certcerts/ca.cer-keyfileprivate/ca.key.pem
opensslpkcs12-export-clcerts-inkeyprivate/client.key.pem-incerts/client.cer-outcerts/client.p12
图3客户端证书构建过程
4、至此,所以证书签发完毕,位于D:
\\CA目录下。
图4、根证书、客户端证书、服务端证书生成成功
3.2构建webservice
1、在MyEclipse中构建一个普通类Caculator,实现整数的加法和乘法运算。
代码如下:
packageexp.webservices;
publicclassCalculatorService{
publicStringadd(inta,intb){
return"result:
"+(a+b);
}
publicStringmultiply(inta,intb){
return"result:
"+(a*b);
}
}
图5、calculator类实现
2、将AXIX2的开源依赖包加入webserivce工程内,放置webroot/web-inf/lib目录下,如图6。
并将Caculator类中的操作实现为WebServices形式,在webroot/web-inf/service-config.wsdd文件中配置service结点,并把web工程发布到到单独的Tomcat7中。
Service-config.wsdd文件中关键配置如下:
xmlversion="1.0"encoding="UTF-8"?
>
//xml.apache.org/axis/wsdd/"xmlns:
java="http:
//xml.apache.org/axis/wsdd/providers/java">
org.apache.axis.handlers.http.URLMapper"/>
list"value="org.apache.axis.transport.http.QSListHandler"/>
method"value="org.apache.axis.transport.http.QSMethodHandler"/>
wsdl"value="org.apache.axis.transport.http.QSWSDLHandler"/>
org.apache.axis.transport.local.LocalResponder"/>
--这是自己的webservice-->
RPC">
RPC">
图6、为项目添加AXIS支持
4、在浏览器访问
"http:
//172.16.56.111:
8080/openssl/services/CalculatorService.jws?
wsdl,可以得到service发布成功,并且得到它的用法的详细描述,如图7.
图7访问webservice
5、用myeclipse编写测试webservice的客户端程序,客户端调用webservcie计算2+3,得到结果
"result:
5",测试webservice的状态为可用,如图8。
客户端代码如下:
StringcalculatorWSDLurl="http:
//172.16.56.111:
8080/openssl/services/CalculatorService.jws?
wsdl";
@Test
publicvoidtestCalculateadd()throwsException{
Serviceservice=newService();
Callcall=(Call)service.createCall();
call.setOperationName("add");
call.setTargetEndpointAddress(newURL(calculatorWSDLurl));
inta=2;
intb=3;
Stringresult=(String)call.invoke(newObject[]{a,b});
System.out.println(result);
}
图8验证webservice可用性
6、此时使用wireshark对网络进行监听,如图9:
可以得到客户端与服务器交互的明文数据。
配置参数为:
(ip.src==172.16.56.102&&ip.dst==172.16.56.111)||(ip.src=172.16.56.111&&ip.dst==172.16.56.102)&&http
图9得到交互的明文结果
3.3单向认证及双向认证
3.3.1单向认证
1.将server.p12和ca.p12复制到Tomcat服务器的conf文件夹中;
2.修改server.xml文件:
对于单向认证,添加以下代码;对于单向认证则将clientAuth设置为false;
SSLEnabled="true"
maxThreads="150"
port="443"
protocol="HTTP/1.1"
scheme="https"
secure="true"
sslProtocol="TLS"
keystoreFile="conf/server.p12"
keystorePass="123456"
keystoreType="PKCS12"
truststoreFile="conf/ca.p12"
truststorePass="123456"
truststoreType="PKCS12"/>
图9配置tomcat
3.如果需要在ie浏览器以https的形式继续访问webservice的wsdl,需要在ie浏览器中导入根证书至“受信任的根证书发布机构”,IE浏览器使用https的地址才能继续访问。
网络地址:
https:
//172.16.56.111/openssl/services/CalculatorService.jws?
wsdl
图10导入根证书
图11HTTPS形式访问成功
4.于myeclipee编写客户端,以https协议访问172.16.56.111的服务,如图12。
使用wireshark监测网络数据。
客户程序需要使用system.setProperty()为axis框架下的客户端添加服务器证书属性。
在junit测试环境下使用@before注解在程序初始化时获得服务器证书。
代码如下:
packagetest;
import.URL;
importorg.apache.axis.client.Call;
importorg.apache.axis.client.Service;
importorg.junit.Before;
importorg.junit.Test;
@Before
publicvoidinit(){