ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:162.41KB ,
资源ID:3572911      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3572911.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(10年广东工业大学网络与信息安全数字证书资料.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

10年广东工业大学网络与信息安全数字证书资料.docx

1、10年广东工业大学网络与信息安全数字证书资料1数字证书的创建数字证书的主要功能是保存公钥和某个人或机构的对应关系,本节介绍几种数字证书的创建方法。它们都使用了keytool工具的-genkey参数。1.1 使用默认的密钥库和算法创建数字证书 实例说明本实例使用J2SDK提供的keytool工具用默认的密钥库和算法创建几个数字证书。运行程序keytool程序运行时加上命令行参数genkey即可。在命令行中输入“keytool genkey”将自动使用默认的算法生成公钥和私钥,并以交互方式获得公钥持有者的信息。其交互过程如下,其中带下划线的字符为用户键盘输入的内容,其他为系统提示的内容。C:key

2、tool -genkey输入keystore密码: 123456您的名字与姓氏是什么? Unknown: Xu Yingxiao1您的组织单位名称是什么? Unknown: Network Center您的组织名称是什么? Unknown: Shanghai University您所在的城市或区域名称是什么? Unknown: ZB您所在的州或省份名称是什么? Unknown: Shanghai该单位的两字母国家代码是什么 Unknown: CNCN=Xu Yingxiao1, OU=Network Center, O=Shanghai University, L=ZB, ST=Shangha

3、i, C=CN 正确吗? 否: 是输入的主密码 (如果和 keystore 密码相同,按回车): abcdefgC:如果使用中文操作系统,上述操作中输入的“是”不能用英文“yes”代替。如果没有DOS下的中文输入系统的话,可以在Windows的“记事本”中输入一个中文字符“是”,然后点击DOS窗口左上角的 图标,选择“编辑/粘贴”菜单,或直接点击窗口中的 工具将中文字符“是”粘贴到DOS窗口,如图5-1所示。图5-1 将中文字符粘贴到DOS窗口以上操作将生成一个公钥和一个私钥,这里并未指定使用何算法,将使用默认的DSA算法。同时上述操作将创建一个数字证书,证书中包含了新生成的公钥和一个名字为“

4、CN=Xu Yingxiao1, OU=Network Center, O=Shanghai University, L=ZB, ST=Shanghai, C=CN”的主体(人或机构)的对应关系。其中“CN=Xu Yingxiao1, OU=Network Center, O=Shanghai University, L=ZB, ST=Shanghai, C=CN”是X.500格式的全名,包含了主体的国家、州、城市、机构、单位和名字。这样,这个证书将证明相应的公钥是这个人或机构所拥有的。以上生成的公钥、私钥和证书都保存在用户的主目录中创建一个默认的文件“.keystore”中。如果使用的是Wi

5、ndow 98操作系统,用户的主目录是c:windows,在该目录下可以找到“.keystore”文件。如果是Windows 2000系统,用户主目录是c: Documents and Setting用户名。由于“.keystore”中包含了私钥,所以是一个需要保密的文件,因此上述操作提示为该文件设置一个密码:“输入keystore密码”,这里因为是第一次使用该密钥库,因此输入的密码“123456”将成为该默认的密钥库的密码(实际使用时应该设置复杂的口令)。以后再使用这个密钥库时必须提供这个口令才可以使用。以上操作最后还提示“输入的主密码”,这里“mykey”是默认的别名,使用该名字可以在密钥

6、库“.keystore”中找到对应的公钥、私钥和证书。此处输入的密码是对应于该别名的私钥的密码,密钥库中每个别名可以使用不同的密码加以保护。1.2 使用别名密钥库中可以存放多个条目(公钥/私钥对和证书),它们在密钥库中以别名(alias)区分。1.1小节在使用keytool工具时没有指定别名,因此系统使用了默认的别名mykey。如果再次运行“keytool genkey”,则系统将提示“keytool错误: java.lang.Exception: 没有创建键值对,别名 已经存在”,因此当密钥库中有多个公钥/私钥对和证书时,应该使用别名。 实例说明本实例使用J2SDK提供的keytool工具用

7、在默认的密钥库中利用别名增加多个证书。运行程序keytool程序运行时加上命令行参数alias即可。在命令行中输入“keytool genkey alias xuyingxiao2”将自动使用默认的算法生成别名为xuyingxiao2的公钥和私钥,并以交互方式获得公钥持有者的信息。其交互过程如下:C:keytool -genkey -alias xuyingxiao2输入keystore密码: 123456您的名字与姓氏是什么? Unknown: Xu Yingxiao2您的组织单位名称是什么? Unknown: Network Center您的组织名称是什么? Unknown: SHU您所在

8、的城市或区域名称是什么? Unknown: ZB您所在的州或省份名称是什么? Unknown: SH该单位的两字母国家代码是什么 Unknown: CNCN=Xu Yingxiao2, OU=Network Center, O=SHU, L=ZB, ST=SH, C=CN 正确吗? 否: 是输入的主密码 (如果和 keystore 密码相同,按回车):其中“输入keystore密码:”后面输入的内容必须和5.1.1小节相同的密码,否则将无法访问密钥库,并提示如下错误:“keytool错误: java.io.IOException: Keystore was tampered with, or

9、password was incorrect”,这是因为5.1.1小节已经为默认的密钥库设置了该密码,以后使用该密钥库都必须提供该密码。在“输入的主密码”的提示后这里不妨直接按“回车键”,这样该私钥将使用和密钥库相同的密码“123456”来保护。以上操作将在用户主目录的“.keystore”文件(如对于Windows 98用户是c:windows.keystore)中增加一对公钥和私钥(DSA算法),同时增加一个数字证书,证书中包含了新生成的公钥和一个名字为“CN=Xu Yingxiao2, OU=Network Center, O=Shanghai University, L=ZB, ST=

10、Shanghai, C=CN”的主体(人或机构)的对应关系。1.3 使用指定的算法和密钥库和有效期1.1和1.2小节中使用的是默认的算法和密钥库,本节介绍如何自己指定算法和密钥库。 实例说明本实例使用J2SDK提供的keytool工具用RSA算法和在指定的密钥库mykeystore中创建公钥/私钥对和证书。运行程序keytool的-keyalg参数可以指定密钥的算法,如果需要指定密钥的长度,可以再加上-keysize参数。密钥长度默认为1024位,使用DSA算法时,密钥长度必须在512到1024之间,并且是64的整数倍。Keytool的-keystore参数可以指定密钥库的名称。密钥库其实是存

11、放密钥和证书的文件,密钥库对应的文件如果不存在自动创建。-validity参数可以指定所创建的证书有效期是多少天。如在命令行中输入“keytool -genkey -alias mytest -keyalg RSA -keysize 1024 -keystore mykeystore -validity 4000”将使用RSA算法生成1024位的公钥/私钥对及整数,密钥长度为1024位,证书有效期为4000天。使用的密钥库为mykeystore文件。C:javach5keytool -genkey -alias mytest -keyalg RSA -keysize 1024 -keystor

12、e mykeystore -validity 4000输入keystore密码: wshr.ut您的名字与姓氏是什么? Unknown: Xu Yingxiao您的组织单位名称是什么? Unknown: Network Center您的组织名称是什么? Unknown: Shanghai University您所在的城市或区域名称是什么? Unknown: ZB您所在的州或省份名称是什么? Unknown: Shanghai该单位的两字母国家代码是什么 Unknown: CNCN=Xu Yingxiao, OU=Network Center, O=Shanghai University, L=

13、ZB, ST=Shanghai, C=CN 正确吗? 否: 是输入的主密码 (如果和 keystore 密码相同,按回车):C:javach5由于当前目录下没有mykeystore文件,因此以上操作将在当前目录建立文件名为mykeystore的文件,并提示输入一个密码加以保护:“输入keystore密码:”。因为这里使用的密钥库和1.1小节及1.2小节不是同一个文件,因此这里输入的密码和1.1小节及1.2小节没有必要一致,这里不妨设置为“wshr.ut”。这样,以后再使用这个密钥库文件时必须提供该密码。对其中的“输入的主密码”,这里不妨直接按回车键,这样mykeysotre文件中的mytest

14、条目将使用和密钥库相同的密码:“wshr.ut”。2数字证书的显示5.1节用各种方式创建了多个数字证书,本节使用各种方式显示这些数字证书的信息,它们有的使用keytool工具的-list参数,有的直接通过Java编程来实现。2.1 使用Keytool直接从密钥库显示条目信息 实例说明本实例使用J2SDK提供的keytool工具直接从密钥库中显示证书信息。运行程序keytool的命令行参数-list可以显示密钥库中的证书信息,如输入:keytool list则显示默认的密钥库中的证书信息。如下:C:javach5keytool -list输入keystore密码: 123456Keystore

15、类型: jksKeystore 提供者: SUN您的 keystore 包含 2 输入xuyingxiao2, 2002-11-22, keyEntry,认证指纹 (MD5): 65:C9:FD:8C:82:C7:36:E1:7C:D9:AD:9A:34:25:5C:71mykey, 2002-11-22, keyEntry,认证指纹 (MD5): BE:F1:9F:45:5F:4E:02:FF:94:83:39:73:E1:F5:59:9C程序开始要求输入密钥库的密码,在5.1.1小节我们已经为默认密钥库设置了密码“123456”,因此这里必须输入相同的密码才能使用密钥库。在1.1和1.2小

16、节我们已向默认的密钥库中添加了两个条目:mykey和xuyingxiao2,在此处的输出信息中可以看到这两个条目的名称、创建日期、条目类型(keyEntry,密钥条目)以及认证指纹。认证指纹其实是该条目的消息摘要。如果进一步使用-alias参数则可以显示指定的条目的信息,如:C:javach5keytool -list -alias xuyingxiao2输入keystore密码: 123456xuyingxiao2, 2002-11-22, keyEntry,认证指纹 (MD5): 65:C9:FD:8C:82:C7:36:E1:7C:D9:AD:9A:34:25:5C:71如果进一步使用-

17、keystore参数则可以显示指定的密钥库中的证书信息,如:C:javach5keytool -list -keystore mykeystore输入keystore密码: wshr.utKeystore 类型: jksKeystore 提供者: SUN您的 keystore 包含 2 输入mytest, 2002-12-5, keyEntry,认证指纹 (MD5): B2:DC:75:CD:60:B7:1E:7A:97:EE:E8:A4:31:D6:26:C6tmp, 2002-12-5, keyEntry,认证指纹 (MD5): 5C:FA:ED:8E:AE:30:1B:2B:CF:39:

18、ED:4D:6F:94:E1:6B2.2 使用Keytool直接从密钥库显示证书详细信息 实例说明本实例使用J2SDK提供的keytool工具直接从密钥库中显示证书的详细信息。运行程序2.1的各个命令加上-v参数可以显示证书的详细信息,如:C:javach5keytool -list -v -keystore lfkeystore -alias lf别名名称: lf创建日期: 2002-12-5输入类型:KeyEntry认证链长度: 1认证 1:Owner: CN=Liu Fang, OU=Packaging, O=Shanghai University, L=ZB, ST=Shanghai,

19、发照者: CN=Liu Fang, OU=Packaging, O=Shanghai University, L=ZB, ST=ShanghaCN序号: 3deec441有效期间: Thu Dec 05 11:13:05 CST 2002 至: Thu Jul 05 11:13:05 CST 2012认证指纹: MD5: 55:73:8D:16:05:E1:F8:5F:F8:25:C7:29:C3:D6:48:67 SHA1: 3F:75:6A:DC:E7:7B:32:64:C5:99:1E:CC:9B:9E:77:88:59:21:C2:33其中包含了发照者(签发者)、序号、有效期、MD5和

20、SHA1认证指纹等额外信息,其含义在本章后续内容中将涉及。2.3 使用Keytool将数字证书导出到文件 实例说明本实例使用J2SDK提供的keytool工具将指定的证书从密钥库导出为编码过和没编码过两种格式的文件。运行程序使用keytool的-export参数可以将别名指定的证书导出到文件,文件名通过-file参数指定。如输入如下命令:C:javach5keytool -export -alias xuyingxiao2 -file xuyingxiao2.cer输入keystore密码: 123456保存在文件中的认证 则将默认密钥库中的xuyingxiao2条目对应的证书导出到文件xuy

21、ingxiao2.cer中。由于命令行中没有用storepass给出密码,因此屏幕提示输入keystore密码。由于证书中不包含私钥,因此不需要条目的主密码。该操作完成后将在当前目录中创建xuyingxiao2.cer文件,该文件即是默认密钥库中的xuyingxiao2条目对应的证书,它包含了公钥和主体的对应关系,内容也可以公开。输入如下命令则可以指定密钥库:C:javach5keytool -export -alias lf -file lf.cer -keystore lfkeystore storepass wshr.ut保存在文件中的认证 该操作完成后将在当前目录中创建lf.cer文件

22、。 如果用文本编辑器打开xuyingxiao2.cer或lf.cer,将会发现它是二进制文件,有些内容无法显示,这不利于公布证书。在导出证书时加上-rfc参数则可以使用一种可打印的编码格式来保存证书。如:C:javach5 keytool -export -alias mytest -file mytest.cer -keystore mykeystore -storepass wshr.ut -rfc保存在文件中的认证 则当前目录下将增加一个文件mytest.cer,其内容是编码过的,可以在屏幕上显示、拷贝或打印。如图2所示。图2 编码后的证书内容2.4 在Windows中从文件显示证书 实

23、例说明本实例在Windows中直接显示2.3小节导出的证书文件。运行程序2.3小节导出的证书文件中,只要文件名以.cer为后缀,Windows操作系统就可以直接识别。如在Windows中双击lf.cer图标,将出现图5-3所示证书窗口。其中包含了证书的所有者、颁发者、有效期等信息,这些信息和5.2.4小节使用keytool显示出的信息一致。由于该证书是用自己的私钥对该证书进行数字签名的,即自己给自己签发的证书,因此窗口中显示警告信息:“该证书发行机构根证书没受信任”。在后续章节中将介绍证书的签发问题。图3 证书的常规信息点击图3的“详细资料”,可以看到证书的版本、序号、签名算法、颁发者、有效期

24、、主题(即全名)、公钥算法、拇印算法、拇印等信息。其中的拇印即认证指纹图4所示。图4 证书的详细信息同样,点击编码过的证书文件如mytest.cer可以看到类似信息。3 Java程序签发数字证书实例说明本实例假设已创建证书“Xu Yingxiao”和证书“Liu Fang”,使用证书“Xu Yingxiao”对证书“Liu Fang”进行签发,该实例使我们对CA是如何签发证书的有一个实际的了解。 编程思路:CA签发数字证书应该使用自己的私钥,CA自身的证书中并不包含私钥信息,因此需从密钥库mykeystore中提取。此外,由于被签发的证书还需要知道CA的名字,这可以从CA的证书中获得。签发证书

25、实际上是创建了一个新的证书,本实例使用J2SDK内部使用的sun.security.x509包中的X509CertImpl类来创建新的证书,该类的构造器中传入有关新的证书各种信息,主要信息来自被签发的lf.cer,只是对某些必须修改的信息如序列号、有效期、签发者等进行重新设置。最后使用X509CertImpl类的sign( )方法用CA的私钥进行签名。可以打印新的证书的信息,也可以将其保存在密钥库中。具体步骤如下:(1) 从密钥库读取CA的证书 FileInputStream in=new FileInputStream(name); KeyStore ks=KeyStore.getInsta

26、nce(JKS); ks.load(in,storepass); java.security.cert.Certificate c1=ks.getCertificate(alias);分析:这里name的值为“mykeystore”,alias的值为“mytest”。(2) 从密钥库读取CA的私钥PrivateKey caprk=(PrivateKey)ks.getKey(alias,cakeypass);分析:该步骤执行KeyStore对象的getKey( )方法,获取其参数对应的条目的私钥,保护私钥的口令也通过方法的参数传入。该口令必须和创建证书时所输入的“主密码”相同。所获得的私钥用于后

27、面的签名。(3) 从CA的证书中提取签发者信息 byte encod1=c1.getEncoded(); X509CertImpl cimp1=new X509CertImpl(encod1); X509CertInfo cinfo1=(X509CertInfo)cimp1.get(X509CertImpl.NAME+.+X509CertImpl.INFO); X500Name issuer=(X500Name)cinfo1.get(X509CertInfo.SUBJECT+.+CertificateIssuerName.DN_NAME);分析:首先提取CA的证书的编码,然后用该编码创建X50

28、9CertImpl类型的对象,通过该对象的get( )方法获取X509CertInfo类型的对象,该对象封装了证书的全部内容,最后通过该对象的get( )方法获得X500Name类型的签发者信息。这些类在J2SDK1.4的API文档中并无介绍,但可以直接使用。(4) 获取待签发的证书 CertificateFactory cf=CertificateFactory.getInstance(X.509); FileInputStream in2=new FileInputStream(args0); java.security.cert.Certificate c2=cf.generateCer

29、tificate(in2);分析:待签发的证书从导出的证书文件读取。(5) 从待签发的证书提取证书信息 byte encod2=c2.getEncoded(); X509CertImpl cimp2=new X509CertImpl(encod2); X509CertInfo cinfo2=(X509CertInfo)cimp2.get(X509CertImpl.NAME+.+X509CertImpl.INFO);分析: 新证书的主要信息来自待签发的证书,待签发的证书中这些信息主要封装在X509CertInfo对象中,所以和第3步类似,先提取待签发者的证书编码,然后创建X509CertImpl

30、类型的对象,最后通过该对象的get( )方法获取X509CertInfo类型的对象。以后就可以使用该对象创建新的证书了,再创建新证书之前,还需要使用其set( )方法对其中部分信息作一些必要的修改。(6) 设置新证书有效期 Date begindate =new Date();/30000 day Date enddate =new Date(begindate.getTime()+3000*24*60*60*1000L); CertificateValidity cv=new CertificateValidity(begindate,enddate); cinfo2.set(X509Cer

31、tInfo.VALIDITY,cv);分析:新证书的开始生效时间不妨从签发之时开始,因此首先使用new Date( )获取当前时间。新证书截止日期不能超过CA,作为测试,这里不妨设置截止日期为3000天以后,因此使用new Date( )再创建一个日期对象,其参数传入长整型的值,即在原先日期的基础上增加3000天的时间(毫秒数)。最后通过这两个日期创建CertificateValidity类型的对象,并把它作为参数传递给上一步得到的X509CertInfo对象的set()方法以设置有效期。(7) 设置新证书序列号 int sn=(int)(begindate.getTime()/1000); Certifi

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

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