3108006633李宜乐网络与信息安全实验报告.docx
《3108006633李宜乐网络与信息安全实验报告.docx》由会员分享,可在线阅读,更多相关《3108006633李宜乐网络与信息安全实验报告.docx(22页珍藏版)》请在冰豆网上搜索。
3108006633李宜乐网络与信息安全实验报告
网络与信息安全实验报告
学院计算机学院
专业计算机科学与技术
班级08级计科05班
学号3108006633
姓名李宜乐
指导教师何晓桃
2011年12月
实验一数字证书的创建
实验项目名称:
数字证书的创建
实验项目性质:
验证型
所属课程名称:
《网络与信息安全》
实验计划学时:
2
一、实验目的
1、理解数字证书的概念;
2、掌握创建数字证书的创建;
3、掌握数字证书的签发;
二、实验内容和要求
1、使用Java中Keytool工具创建数字证书
2、使用Keytool工具显示及导出数字证书
3、使用Java程序签发数字证书
三、实验主要仪器设备和材料
1.计算机及操作系统:
PC机,WindowsXP;
2.JDK1.7
四、实验方法、步骤及结果测试
创建两个数字证书:
使用别名、指定算法、密钥库和有效期的方式创建两个数字证书。
显示并且导出已创建的数字证书的内容。
签发数字证书。
1、创建数字证书:
实现代码及截图:
语句(在WinXP下Cmd中输入)
使用别名:
D:
\java\jdk1.7.0\bin>keytool-genkey-aliasliyile
语句及执行结果截图显示
使用指定的算法、密钥库和有效期:
D:
\java\jdk1.7.0\bin>keytool-genkey-aliasliyile-keyalgRSA-keysize1024-keystoremykeystore-validity4000
语句及执行结果截图显示
2、显示并且导出已创建的数字证书内容
(1)使用Keytool直接从密钥库显示证书详细信息
(2)使用Keytool将数字证书导出到文件
(3)在Windows中从文件显示证书
实现代码及截图:
语句
(1)使用Keytool直接从密钥库显示证书详细信息
D:
\java\jdk1.7.0\bin>keytool-list-v-keystoremykeystore-aliasliyile
语句及执行结果截图显示
(2)使用Keytool将数字证书导出到文件
D:
\java\jdk1.7.0\bin>keytool-export-aliasliuliqiang-fileliuliqiang.cer–keystoremykeystore–storepass123456-rfc
语句及执行结果截图显示
(3)在Windows中从文件显示证书
语句及执行结果截图显示
3、Java程序签发数字证书
实现代码及截图:
语句
D:
\java\jdk1.7.0\bin>javaSignCertliyile.cer
语句及执行结果截图显示
五、实验中出现的问题及解决方案
这次实验中出现问题最大的就是最后这个Java程序签发证书,还好参考资料中有提供一份完整的代码,但由于之前自己基本都是使用C++开发,不清楚在Cmd下怎么运行这份代码,后来在Eclipse中把代码编译了一下却出现错误,最后XX了一下修改了配置才把错误解决了。
最终拷贝编译后的class文件终于运行成功了。
六、思考题
1、数字证书的功能是什么?
答:
数字证书的功能如下:
一、信息的保密性:
CA中心颁发的数字证书保证了电子政务、电子商务的信息传播中信息的保密。
二、网络通讯双方身份的确定性
CA中心颁发的数字证书可保证网上通讯双方的身份,行政服务中心、银行和电子商务公司可以通过CA认证确认身份,放心的开展网上业务。
三、不可否认性
CA中心颁发的所有数字证书类型都确保了电子交易通信过程的各个环节的不可否认性,使交易双方的利益不受到损害。
四、不可修改性
CA中心颁发的数字证书也确保了电子交易文件的不可修改性,以保障交易的严肃和公正。
2、keytool–genkey所产生证书的签发者是谁?
答:
keytool–genkey所产生证书是属于自签名的证书,签发者为自己本身。
通常一个证书的签发者为一个CA,使用该证书意味着信任签名该证书的实体。
但是在有些情况下,签发者会签自己的证书,为自签名证书。
附:
Java代码(SignCert)
importjava.io.*;
importjava.security.*;
importjava.security.cert.*;
importjava.util.*;
importsun.security.x509.*;
publicclassSignCert{
publicstaticvoidmain(Stringargs[])throwsException{
char[]storepass="123456".toCharArray();
char[]cakeypass="123456".toCharArray();
Stringalias="liyile";
Stringname="mykeystore";
//CertofCA-----c1
FileInputStreamin=newFileInputStream(name);
KeyStoreks=KeyStore.getInstance("JKS");
ks.load(in,storepass);
java.security.cert.Certificatec1=ks.getCertificate(alias);
PrivateKeycaprk=(PrivateKey)ks.getKey(alias,cakeypass);
in.close();
//得到签发者
byte[]encod1=c1.getEncoded();
X509CertImplcimp1=newX509CertImpl(encod1);
X509CertInfocinfo1=(X509CertInfo)cimp1.get(X509CertImpl.NAME+"."
+X509CertImpl.INFO);
X500Nameissuer=(X500Name)cinfo1.get(X509CertInfo.SUBJECT+"."
+CertificateIssuerName.DN_NAME);
CertificateFactorycf=CertificateFactory.getInstance("X.509");
FileInputStreamin2=newFileInputStream(args[0]);
java.security.cert.Certificatec2=cf.generateCertificate(in2);
in2.close();
byte[]encod2=c2.getEncoded();
X509CertImplcimp2=newX509CertImpl(encod2);
X509CertInfocinfo2=(X509CertInfo)cimp2.get(X509CertImpl.NAME+"."
+X509CertImpl.INFO);
//设置新证书有效期
Datebegindate=newDate();
//60day
Dateenddate=newDate(begindate.getTime()+3000*24*60*60
*1000L);
CertificateValiditycv=newCertificateValidity(begindate,enddate);
cinfo2.set(X509CertInfo.VALIDITY,cv);
//设置新证书序列号
intsn=(int)(begindate.getTime()/1000);
CertificateSerialNumbercsn=newCertificateSerialNumber(sn);
cinfo2.set(X509CertInfo.SERIAL_NUMBER,csn);
//设置新证书签发者
cinfo2.set(X509CertInfo.ISSUER+"."+CertificateIssuerName.DN_NAME,
issuer);
//设置新证书算法
AlgorithmIdalgorithm=newAlgorithmId(
AlgorithmId.md5WithRSAEncryption_oid);
cinfo2.set(CertificateAlgorithmId.NAME+"."
+CertificateAlgorithmId.ALGORITHM,algorithm);
//创建证书
X509CertImplnewcert=newX509CertImpl(cinfo2);
//签名
newcert.sign(caprk,"MD5WithRSA");
System.out.println(newcert);
//存入密钥库
ks.setCertificateEntry("lf_signed",newcert);
FileOutputStreamout=newFileOutputStream("newstore");
ks.store(out,"newpass".toCharArray());
out.close();
}
}
实验二SSL编程
实验项目名称:
SSL编程
实验项目性质:
验证型
所属课程名称:
《网络与信息安全》
实验计划学时:
2
一、实验目的
1、理解SSL的作用;
2、掌握SSL客户和服务器程序;
二、实验内容和要求
1、使用Java中的SSL编写SSL服务器程序
2、使用Java中的SSL编写SSL客户端程序
三、实验主要仪器设备和材料
1.计算机及操作系统:
PC机,WindowsXP;
2.JDK1.7
四、实验方法、步骤及结果测试
1、编写SSL服务器程序
实现代码及截图:
语句
D:
\java\jdk1.7.0\bin>javaSSLServer
语句及执行结果截图显示
3、编写SSL客户端程序
实现代码及截图:
语句
D:
\java\jdk1.7.0\bin>javaSSLClient
语句及执行结果截图显示
五、实验中出现的问题及解决方案
这次实验中主要问题是Client端一直找不到证书,后来仔细查阅了参考文献和代码之后发现忘记把证书导入myclienttrust中了,进行如下操作之后,问题迎刃而解。
六、思考题
1、描述SSL的握手协议过程。
答:
SSL的握手协议过程描述如下:
在客户端发送ClientHello信息后,对应的服务器回应ServerHello信息,否则产生一个致命错误,导致连接的失败。
ClientHello和ServerHello用于在客户端和服务器之间建立安全增强功能,并建立协议版本号、会话标识符、密码组和压缩方法。
此外,产生和交换两组随机值ClientHello.random和ServerHello.random。
在Hello信息之后,如果需要被确认,服务器将发送其证明信息。
此外,如果需要,可发送一个ServerKeyExchange信息。
如果服务器被确认,并且适合于所选择的密码组,就需要对客户端请求证明信息。
现在,服务器将发送ServerHelloDone信息,表示握手阶段的Hello信息部分已经完成,服务器将等待客户端响应。
如果服务器已发送了一个证明请求信息,客户端可回应证明信息或无证明告警。
然后发送ClientKeyExchange信息,信息的内容取决于在ClientHello和ServerHello之间选定的公开密钥算法。
如果客户端发送一个带有签名能力的证明,服务器发送一个数字签名的CertificateVerify信息用于检验这个证明。
这时,客户端发送一个ChangeCipherSpec信息,将PendingCipherSpec(待决密码参数)拷贝到CurrentCipherSpec(当前密码参数)。
然后客户端立即在新的算法、密钥和密码下发送结束信息。
对应地,如果服务器发送自己的ChangeCipherSpec信息,并将PendingCipherSpec拷贝到CurrentCipherSpec,然后在新的算法、密钥和密码下发送结束信息。
这时。
握手结束,客户端和服务器可开始交换其应用层数据。
2、SSL的握手协议过程是否体现在程序中?
说明分析过程。
答:
SSL的握手协议过程没有体现在程序中。
分析过程如下:
服务器端程序所做的动作如下:
第一步,设置密钥库及口令;
第二步,创建SSLServerSocketFactory类型的对象;
第三步,创建ServerSocket类型的对象;
第四步,等待客户程序连接,其代码如下:
Sockets=ss.accept();
第五步,建立输出流
PrintStreamout=newPrintStream(s.getOutputStream());
out.println("Hello");
没有哪一条语句有执行像第1题所描述的服务器握手协议中所执行的动作。
客户端程序所做的动作如下:
第一步,设置客户程序信任的密钥库;
第二步,创建SSLSocketFactory类型的对象;
第三步,创建Socket类型的对象,连接服务器程序,代码如下:
Sockets=ssf.createSocket("127.0.0.1",8888);
第四步,建立输出流,代码如下:
BufferedReaderin=newBufferedReader(newInputStreamReader(s.getInputStream()));
Stringx=in.readLine();
如果客户端与服务器的程序中有体现握手协议的过程的话,则应该在客户端连接服务器端这一步来体现的,但是程序中只有一条语句就完成了连接服务器的任务。
附1:
Java代码(SSLServer)
import.*;
importjava.io.*;
import.ssl.*;
publicclassSSLServer{
publicstaticvoidmain(Stringargs[])throwsException{
System.setProperty(".ssl.keyStore","mykeystore");
System.setProperty(".ssl.keyStorePassword","123456");
SSLServerSocketFactoryssf=(SSLServerSocketFactory)SSLServerSocketFactory
.getDefault();
ServerSocketss=ssf.createServerSocket(8888);
System.out.println("Waitingforconnection...");
while(true){
Sockets=ss.accept();
PrintStreamout=newPrintStream(s.getOutputStream());
out.println("Hello");
out.close();
s.close();
}
}
}
附2:
Java代码(SSLClient)
import.*;
importjava.io.*;
import.ssl.*;
publicclassSSLClient{
publicstaticvoidmain(Stringargs[])throwsException{
System.setProperty(".ssl.trustStore","myclienttrust");
SSLSocketFactoryssf=(SSLSocketFactory)SSLSocketFactory.getDefault();
Sockets=ssf.createSocket("127.0.0.1",8888);
BufferedReaderin=newBufferedReader(newInputStreamReader(
s.getInputStream()));
Stringx=in.readLine();
System.out.println(x);
in.close();
}
}
实验三Sniffer网络嗅探器的使用
实验项目名称:
Sniffer网络嗅探器的使用
实验项目性质:
验证型
所属课程名称:
《网络与信息安全》
实验计划学时:
2
一、实验目的
通过Sniffer软件的使用,了解如何使用该软件对网络数据包进行分析;
二、实验内容和要求
捕获HTTP数据包,并进行分析,捕获的目标计算机为个人主机
三、实验主要仪器设备和材料
1.计算机及操作系统:
PC机,Windows2000/xp;
2.Sniffer
四、实验方法、步骤及结果测试
扫描主机在Sniffer软件捕获期间浏览网页
1、安装Sniffer
2、设置网络适配器
截图:
3、设置捕获条件,“定义过滤器->高级”设置捕获报文为http。
截图:
4、显示个人主机所在局域网的所有通信连接
截图:
5、选择监视的目标主机
截图:
6、开始捕获,在Sniffer捕获过程中,在被监视主机上登录
7、单击工具栏上“停止和显示“,查看捕获情况。
8、查看专家解码,找到和用户名以及密码相关的报文,并截图显示。
截图:
5、实验中出现的问题及解决方案
答:
网络适配器的设置以及各参数的设置,还有对报文内容的不熟悉造成了对数据包内容的判读和识别。
但经过查找资料慢慢掌握了一些基本的内容,从而得以完成实验。
六、思考题
为什么使用Sniffer可以查看到局域网上的所有网络连接?
答:
一个设备要向某一目标发送数据时,它是对以太网进行广播的。
一个连到以太网总线上的设备在任何时间里都在接受数据。
不过只是将属于自己的数据传给该计算机上的应用程序。
利用这一点,可以将一台计算机的网络连接设置为接受所有以太网总线上的数据,从而实现sniffer查看到局域网上的所有网络连接。
实验四黑雨软件破译邮箱密码
实验项目名称:
黑雨软件破译邮箱密码
实验项目性质:
验证型
所属课程名称:
《网络与信息安全》
实验计划学时:
2
一、实验目的
熟悉黑客破解邮箱的过程和方法
二、实验内容和要求
练习使用字典生成器产生备选密码
练习使用黑雨邮箱密码破解软件(请不要用于非法用途)
三、实验主要仪器设备和材料
1.计算机及操作系统:
PC机,WindowsXP;
2.黑雨软件,字典生成器软件
四、实验方法、步骤及结果测试
1、使用字典生成器产生备选密码文件
刚开始第一次选中了大量字符,结果组成的方式太多无法生成,后面根据密码选用了这8位,然后进行字典生成。
截图:
图1选中需要的字符
图2字典生成
4、使用黑雨软件对securitytest@邮箱破解,该邮箱密码已知为gdut1234
先尝试连接服务器,成功后再导入字典文件和设置用户,进行密码破解。
截图:
图3对126邮箱服务器连接尝试
图4对测试邮箱进行密码探测
五、实验中出现的问题及解决方案
这次实验出现的问题比较多,最终也以失败告终。
首先要关闭好所有的防火墙,不然软件会被当成病毒杀掉。
而且软件经常卡死,连接不上服务器(如图5所示)。
图5软件卡死
六、思考题
1、什么是字典破解?
答:
使用字典文件生成器身成的字典文件,使用某种破解软件对字典中的密码一个一个试,直到找到正确的密码,即破解成功,此种破解方法叫做字典破解。
该破解方法成功率不高,而且耗时多。
2、黑雨破解软件的缺陷是什么?
答:
在使用黑雨破解软件的过程中,我发现了该软件的一些问题:
缺陷一、该软件有时候在检测是否存在securitytest帐号时,会出现卡住,然后过一段时间后回复,但是显示该帐号可能不存在的提示。
缺陷二、在破解密码的过程中,验证一个字典文件中的当前字符串是否为securitytest帐号的密码,耗时比较多,虽然我只是使用1、2、3、4、g、d、u、t这8个字符去生成字典,已经达到了160M,更不用说是不知道密码位数、密码使用字符串的情况。
缺陷三、该软件在破解过程中有一个超时中止的时间设置,经常在破解密码破解到一半的时候就会出现服务器超时中断,使得破解失败。
3、你的破解是否成功,请分析成功或不成功的原因。
答:
我的破解最终以失败告终,主要是因为软件自身的不稳定,以及匹配穷举法耗时太大,经常卡住软件,或者超过最大次数,没能匹配出正确的密码。
七、注意事项
1、请不要用于非法用途,造成法律责任后果自负。
2、使用前关闭杀毒软件和防火墙
3、实验不一定能够成功,注意分析原因。