10年广东工业大学信息安全实验报告.docx
《10年广东工业大学信息安全实验报告.docx》由会员分享,可在线阅读,更多相关《10年广东工业大学信息安全实验报告.docx(20页珍藏版)》请在冰豆网上搜索。
![10年广东工业大学信息安全实验报告.docx](https://file1.bdocx.com/fileroot1/2023-4/21/8e141173-2501-4c3f-9ecb-1ffd46c8aa01/8e141173-2501-4c3f-9ecb-1ffd46c8aa011.gif)
10年广东工业大学信息安全实验报告
网络与信息安全实验报告
学院计算机学院
专业计算机科学与技术
班级级计科班
学号3107006484
姓名李红强
指导教师宋玮
2010年12月
实验一数字证书的创建
实验项目名称:
数字证书的创建
实验项目性质:
验证型
所属课程名称:
《网络与信息安全》
实验计划学时:
2
一、实验目的
1、理解数字证书的概念;
2、掌握创建数字证书的创建;
3、掌握数字证书的签发;
二、实验内容和要求
1、使用Java中Keytool工具创建数字证书
2、使用Keytool工具显示及导出数字证书
3、使用Java程序签发数字证书
三、实验主要仪器设备和材料
1.计算机及操作系统:
PC机,Windows2000/xp;
2.JDK1.5
四、实验方法、步骤及结果测试
创建两个数字证书:
使用别名、指定算法、密钥库和有效期的方式创建两个数字证书。
显示并且导出已创建的数字证书的内容。
签发数字证书。
1、创建数字证书:
实现代码及截图:
语句
C:
\Users\LHQ>"E:
\Users\LHQ\AppData\Local\Genuitec\Common\binary\com.sun.java.jre.win32.x86_1.5.0.011\bin"\keytool-genkey-aliasLHQ
输入keystore密码:
123456
您的名字与姓氏是什么?
[Unknown]:
LHQ
您的组织单位名称是什么?
[Unknown]:
NetworkCenter
您的组织名称是什么?
[Unknown]:
GDUT
您所在的城市或区域名称是什么?
[Unknown]:
GZ
您所在的州或省份名称是什么?
[Unknown]:
GD
该单位的两字母国家代码是什么
[Unknown]:
CN
CN=LHQ,OU=NetworkCenter,O=GDUT,L=GZ,ST=GD,C=CN正确吗?
[否]:
是
输入的主密码
(如果和keystore密码相同,按回车):
语句及执行结果截图显示
2、显示并且导出已创建的数字证书内容
(1)使用Keytool直接从密钥库显示证书详细信息
(2)使用Keytool将数字证书导出到文件
(3)在Windows中从文件显示证书
实现代码及截图:
语句
(1)
C:
\Users\LHQ>"E:
\Users\LHQ\AppData\Local\Genuitec\Common\binary\com.sun.java.jre.win32.x86_1.5.0.011\bin"\keytool-genkey-aliasmytest-keyalgRSA-keysize1024-keystoremykeystore-validity4000
输入keystore密码:
123456
您的名字与姓氏是什么?
[Unknown]:
LHQ
您的组织单位名称是什么?
[Unknown]:
NetworkCenter
您的组织名称是什么?
[Unknown]:
GDUT
您所在的城市或区域名称是什么?
[Unknown]:
GD
您所在的州或省份名称是什么?
[Unknown]:
GZ
该单位的两字母国家代码是什么
[Unknown]:
CN
CN=LHQ,OU=NetworkCenter,O=GDUT,L=GD,ST=GZ,C=CN正确吗?
[否]:
是
输入的主密码
(如果和keystore密码相同,按回车):
语句及执行结果截图显示
3、Java程序签发数字证书
实现代码及截图:
语句
importjava.io.*;
importjava.security.*;
importjava.security.cert.*;
importjava.util.*;
importjava.math.*;
importsun.security.x509.*;
publicclassSignCert{publicstaticvoidmain(Stringargs[])throwsException{
char[]storepass="123456".toCharArray();
char[]cakeypass="123456".toCharArray();
Stringalias="mytest";
Stringname="C:
\\Users\\LHQ\\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);
//Certoflf-----c2
CertificateFactorycf=CertificateFactory.getInstance("X.509");
FileInputStreamin2=newFileInputStream("C:
\\Users\\LHQ\\LHQ.cer");
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);
/*
PrivateKeyprk=(PrivateKey)ks.getKey("lf",
"wshr.ut".toCharArray());
java.security.cert.Certificate[]cchain={newcert};
ks.setKeyEntry("lf_signed",prk,
"newpass".toCharArray(),cchain);
*/
FileOutputStreamout=newFileOutputStream("newstore");
ks.store(out,"newpass".toCharArray());
out.close();
}
}
语句及执行结果截图显示
[
[
Version:
V1
Subject:
CN=LHQ,OU=NetworkCenter,O=GDUT,L=GZ,ST=GD,C=CN
SignatureAlgorithm:
MD5withRSA,OID=1.2.840.113549.1.1.4
Key:
SunDSAPublicKey
Parameters:
DSA
p:
fd7f53811d75122952df4a9c2eece4e7f611b7523cef4400c31e3f80b6512669
455d402251fb593d8d58fabfc5f5ba30f6cb9b556cd7813b801d346ff26660b7
6b9950a5a49f9fe8047b1022c24fbba9d7feb7c61bf83b57e7c6a8a6150f04fb
83f6d3c51ec3023554135a169132f675f3ae2b61d72aeff22203199dd14801c7
q:
9760508f15230bccb292b982a2eb840bf0581cf5
g:
f7e1a085d69b3ddecbbcab5c36b857b97994afbbfa3aea82f9574c0b3d078267
5159578ebad4594fe67107108180b449167123e84c281613b7cf09328cc8a6e1
3c167a8b547c8d28e0a3ae1e2bb3a675916ea37f0bfa213562f1fb627a01243b
cca4f1bea8519089a883dfe15ae59f06928b665e807b552564014c3bfecf492a
y:
c334096970f9b6ec805230e15dab8a81751158b25af371d40b03302360ca4f75
86df2086a3a2189b0e0a36c09c61e5c6a436c670f47b8e32f65d99201f6e095a
dbe73418481c83e60193ffb6450cec36cf6c5ba7c9a31510d4cd6cc2e8e0fa96
ab14c9157235d879c230093215528cee50d3478994fe437abeba6e9a763e17e9
Validity:
[From:
ThuDec3014:
25:
28CST2010,
To:
MonMar1814:
25:
28CST2019]
Issuer:
CN=LHQ,OU=NerworkCenter,O=GDUT,L=GD,ST=GZ,C=CN
SerialNumber:
[4d1c25d8]
]
Algorithm:
[MD5withRSA]
Signature:
0000:
0EF57B222CB27F32260B3AF2AD06F861...",..2&.:
....a
0010:
48678BAC2E9321EAC3C2BE898E6BB75EHg....!
......k.^
0020:
948A221BBFE30BF856ECA0299609F2B1..".....V..)....
0030:
BD842728A5B279D6C1E37B94230F7F49..'(..y.....#..I
0040:
4004A070E5CE3FB6CFB4CBB72969798C@..p..?
.....)iy.
0050:
7EB1734B33695D31987F99C9C270650A..sK3i]1.....pe.
0060:
0596EF9B74678B4A0756B41907650E76....tg.J.V...e.v
0070:
29BD8C4C6751E8B24BD13CB91F7771AF)..LgQ..K.<..wq.
]
五、实验中出现的问题及解决方案
六、思考题
1、数字证书的功能是什么?
答:
由于Internet网电子商务系统技术使在网上购物的顾客能够极其方便轻松地获得商家和企业的信息,但同时也增加了对某些敏感或有价值的数据被滥用的风险.为了保证互联网上电子交易及支付的安全性,保密性等,防范交易及支付过程中的欺诈行为,必须在网上建立一种信任机制。
这就要求参加电子商务的买方和卖方都必须拥有合法的身份,并且在网上能够有效无误的被进行验证。
数字证书是一种权威性的电子文档。
它提供了一种在Internet上验证您身份的方式,其作用类似于司机的驾驶执照或日常生活中的身份证。
它是由一个由权威机构----CA证书授权(CertificateAuthority)中心发行的,人们可以在互联网交往中用它来识别对方的身份。
当然在数字证书认证的过程中,证书认证中心(CA)作为权威的、公正的、可信赖的第三方,其作用是至关重要的。
数字证书也必须具有唯一性和可靠性。
为了达到这一目的,需要采用很多技术来实现。
通常,数字证书采用公钥体制,即利用一对互相匹配的密钥进行加密、解密。
每个用户自己设定一把特定的仅为本人所有的私有密钥(私钥),用它进行解密和签名;同时设定一把公共密钥(公钥)并由本人公开,为一组用户所共享,用于加密和验证签名。
当发送一份保密文件时,发送方使用接收方的公钥对数据加密,而接收方则使用自己的私钥解密,这样信息就可以安全无误地到达目的地了。
通过数字的手段保证加密过程是一个不可逆过程,即只有用私有密钥才能解密。
公开密钥技术解决了密钥发布的管理问题,用户可以公开其公开密钥,而保留其私有密钥。
2、keytool–genkey所产生证书的签发者是谁?
答:
证书认证中心(CA)
实验二SSL编程
实验项目名称:
SSL编程
实验项目性质:
验证型
所属课程名称:
《网络与信息安全》
实验计划学时:
2
一、实验目的
1、理解SSL的作用;
2、掌握SSL客户和服务器程序;
二、实验内容和要求
1、使用Java中的SSL编写SSL服务器程序
2、使用Java中的SSL编写SSL客户端程序
三、实验主要仪器设备和材料
1.计算机及操作系统:
PC机,Windows2000/xp;
2.JDK1.5
四、实验方法、步骤及结果测试
1、编写SSL服务器程序
实现代码及截图:
语句
import.*;
importjava.io.*;
import.ssl.*;
publicclassMySSLServer{
publicstaticvoidmain(Stringargs[])throwsException{
System.setProperty(".ssl.keyStore",
"C:
\\Users\\LHQ\\mykeystore");
System.setProperty(".ssl.keyStorePassword",
"123456");
SSLServerSocketFactoryssf=(SSLServerSocketFactory)
SSLServerSocketFactory.getDefault();
ServerSocketss=ssf.createServerSocket(5432);
System.out.println("Waitingforconnection...");
while(true){
Sockets=ss.accept();
PrintStreamout=newPrintStream(s.getOutputStream());
out.println("Hi");
out.close();
s.close();
}
}
}
语句及执行结果截图显示
Waitingforconnection...
2、编写SSL客户端程序
实现代码及截图:
语句
import.*;
importjava.io.*;
import.ssl.*;
publicclassMySSLClient{
publicstaticvoidmain(Stringargs[])throwsException{
System.setProperty(".ssl.trustStore",
"C:
\\Users\\LHQ\\mykeystore");
SSLSocketFactoryssf=
(SSLSocketFactory)SSLSocketFactory.getDefault();
Sockets=ssf.createSocket("127.0.0.1",5432);
BufferedReaderin=newBufferedReader(
newInputStreamReader(s.getInputStream()));
Stringx=in.readLine();
System.out.println(x);
in.close();
}
}
语句及执行结果截图显示
五、实验中出现的问题及解决方案
六、思考题
遇到问题:
实验1和2都是设计绝对路径的解决。
1、描述SSL的握手协议过程。
答:
为了便于更好的认识和理解SSL协议,这里着重介绍SSL协议的握手协议。
SSL协议既用到了公钥加密技术又用到了对称加密技术,对称加密技术虽然比公钥加密技术的速度快,可是公钥加密技术提供了更好的身份认证技术。
SSL的握手协议非常有效的让客户和服务器之间完成相互之间的身份认证,其主要过程如下:
①客户端的浏览器向服务器传送客户端SSL协议的版本号,加密算法的种类,产生的随机数,以及其他服务器和客户端之间通讯所需要的各种信息。
②服务器向客户端传送SSL协议的版本号,加密算法的种类,随机数以及其他相关信息,同时服务器还将向客户端传送自己的证书。
③客户利用服务器传过来的信息验证服务器的合法性,服务器的合法性包括:
证书是否过期,发行服务器证书的CA是否可靠,发行者证书的公钥能否正确解开服务器证书的“发行者的数字签名”,服务器证书上的域名是否和服务器的实际域名相匹配。
如果合法性验证没有通过,通讯将断开;如果合法性验证通过,将继续进行第四步。
④用户端随机产生一个用于后面通讯的“对称密码”,然后用服务器的公钥(服务器的公钥从步骤②中的服务器的证书中获得)对其加密,然后将加密后的“预主密码”传给服务器。
⑤如果服务器要求客户的身份认证(在握手过程中为可选),用户可以建立一个随机数然后对其进行数据签名,将这个含有签名的随机数和客户自己的证书以及加密过的“预主密码”一起传给服务器。
⑥如果服务器要求客户的身份认证,服务器必须检验客户证书和签名随机数的合法性,具体的合法性验证过程包括:
客户的证书使用日期是否有效,为客户提供证书的CA是否可靠,发行CA的公钥能否正确解开客户证书的发行CA的数字签名,检查客户的证书是否在证书废止列表(CRL)中。
检验如果没有通过,通讯立刻中断;如果验证通过,服务器将用自己的私钥解开加密的“预主密码”,然后执行一系列步骤来产生主通讯密码(客户端也将通过同样的方法产生相同的主通讯密码)。
⑦服务器和客户端用相同的主密码即“通话密码”,一个对称密钥用于SSL协议的安全数据通讯的加解密通讯。
同时在SSL通讯过程中还要完成数据通讯的完整性,防止数据通讯中的任何变化。
⑧客户端向服务器端发出信息,指明后面的数据通讯将使用的步骤⑦中的主密码为对称密钥,同时通知服务器客户端的握手过程结束。
⑨服务器向客户端发出信息,指明后面的数据通讯将使用的步骤⑦中的主密码为对称密钥,同时通知客户端服务器端的握手过程结束。
⑩SSL的握手部分结束,SSL安全通道的数据通讯开始,客户和服务器开始使用相同的对称密钥进行数据通讯,同时进行通讯完整性的检验。
2、SSL的握手协议过程是否体现在程序中?
说明分析过程。
答:
是在keystore中已经包含签名的具体信息,程序从签名中获得所使用的算法等来进行握手的协议认证。
实验三Sniffer网络嗅探器的使用
实验项目名称:
Sniffer网络嗅探器的使用
实验项目性质:
验证型
所属课程名称:
《网络与信息安全》
实验计划学时:
2
一、实验目的
通过Sniffer软件的使用,了解如何使用该软件对网络数据包进行分析;
二、实验内容和要求
捕获HTTP数据包,并进行分析,捕获的目标计算机为个人主机
三、实验主要仪器设备和材料
1.计算机及操作系统:
PC机,Wi