毕业设计论文数字证书的系统化管理设计

上传人:仙*** 文档编号:71107196 上传时间:2022-04-06 格式:DOC 页数:44 大小:505.50KB
收藏 版权申诉 举报 下载
毕业设计论文数字证书的系统化管理设计_第1页
第1页 / 共44页
毕业设计论文数字证书的系统化管理设计_第2页
第2页 / 共44页
毕业设计论文数字证书的系统化管理设计_第3页
第3页 / 共44页
资源描述:

《毕业设计论文数字证书的系统化管理设计》由会员分享,可在线阅读,更多相关《毕业设计论文数字证书的系统化管理设计(44页珍藏版)》请在装配图网上搜索。

1、摘要Internet的广泛应用促使人们对网络安全的关注越来越深入,因此如何对网络通信中对收到的数据进行验证,保证网络交流的安全可靠性成为人们所关注的焦点。数字签名与认证技术正是基于这样一种背景下应运而生。PKI(Public Key Infrastructure 即公钥基础设施)技术可以有效的解决网络安全问题,其功能可归结为数据加密和数字认证两大功能。目前PKI较好的解决方案是数字证书。CA是PKI最重要也是最核心物组成部分,通常是用户团体所信任的第三方,如政府机构或金融机构。使用数字签名保证了数据身份的确定性、不可篡改性和不可否认性。数字证书的主要功能就是保存公钥和某个人或机构的对应关系。X

2、.509证书格式是应用广泛的一种数字证书格式,大多数的网络安全设施或电子交易过程中有广泛的应用。本设计从数字认证中心的构建出发,通过构建CA认证管理中心通过对数字证书的有效管理来实现对网络可信任身份的保证,确保网络通信的安全。关键词:网络安全,数字签名,数字认证中心,数字证书ABSTRACTThe extensive application of the Internet urges people to pay more and more attention to the network security, so how to verify the information that recei

3、ved through Internet to insure the security trustiness of the network communication becomes the focus of peoples attention. The technology of digital signature and digital certification occurs. PKI, public key infrastructure, could solve the issue of network security efficiently, which can make the

4、data encrypted and certificated. CA, certification authority, is the most important kernel of PKI, which is usually trusted by a large crowd as the third party, such as the government or finance institution. Digital certificate is a good idea to resolve the security problem and also for PKI.The usag

5、e of digital signature guaranteed the certainty, non-sophisticate and non- disavowal of the data. The main function of the digital certificate is to store the corresponding relation between the public key and some person or some institution. X509 is the most extensive format of digital certificate.

6、Many parts of network security infrastructure or electronic business have extensive application.The discourse starts from the setup of CA. I write a software named Center of CA Management, which ensures the authentic figure on the Internet through effective management of digital certificate.Key Word

7、s: Network security, Digital signature, CA, Digital certificate目录第一章概述11.1背景11.2 解决办法11.3我国数字认证中心(CA)的发展现状及存在的问题2第二章非对称加密原理42.1对称加密42.2非对称加密与消息认证42.2.1非对称加密42.2.2消息认证5第三章数字签名与公钥证书83.1数字签名83.2公钥证书83.2.1 问题的由来83.2.2解决办法93.2.3 X.509证书103.3 PKI(公钥基础设施)的简介113.3.1 PKI的定义113.3.2 PKI的组成123.3.3 PKI使用的技术123.3

8、.4 数字证书认证中心CA13第四章实现数字认证的总体设计154.1 CA的总体设计154.2证书管理模块设计174.3所做工作及开发工具介绍18第五章数字认证的详细设计195.1利用keytool.exe实现密钥库与证书的管理195.2 基于Java语言实现密钥库与证书的管理245.2.1 签发数字证书245.2.2 读取证书信息305.2.4 添加证书335.2.5 删除证书335.2.6 修改密钥库口令335.2.7 证书检验34第六章总结38第七章结束语39参考文献40第一章 概述1.1背景自20世纪90年代以来,计算机网络技术使得计算机应用得到进一步普及和发展,并在全球得以迅猛发展和

9、延伸,成为当代发展最为迅猛的科学技术,其应用几乎已深入到人类社会活动和生活的一切领域。但在计算机给人们的生活和工作带来极大方便的同时也带来了许多亟待解决的问题,大量敏感信息如何保护成为一个主要问题。随着网络技术的发展和Internet的不断普及,上网人数也越来越多,网络正以前所未有的速度渗透到人们的生活、工作和学习之中。而基于网络,特别是Internet的电子商务技术的发展,更是体现了网络对人们生活的巨大影响,真正实现了了足不出户,全球购物的梦想。在所有的电子交易系统环节中,最关键和最重要的因素是安全,包括交易方的身份认证和交易信息的安全传输等。随着军事信息网络的发展,网络安全也显得越来越重要

10、。军队的各种活动高度依赖网络,必须保证信息传输的机密性、真实性、完整性和不可否认性,从而保证信息的安全传输,保密问题因而变得更加严峻起来。1.2 解决办法PKI(Public Key Infrastructure 即公钥基础设施)技术可以有效的解决网络安全问题,其功能可归结为数据加密和数字认证两大功能。PKI技术就是利用公钥理论和技术建立的提供信息安全服务的基础设施,是一种遵循标准的密钥管理平台,它能够为所有的网络应用透明的提供采用加密和数字签名等密码服务所必需的密钥和证书管理。PKI必须具有认证机关(即CA,Certification Authority认证中心)、证书库、密钥备份及恢复系统

11、、证书作废处理系统、客户端证书处理系统等基本成分,构建PKI也将围绕着这五大系统来构建。CA是PKI最重要也是最核心物组成部分,目前PKI较好的解决方案是数字证书。1.3我国数字认证中心(CA)的发展现状及存在的问题一、电子商务、电子政务对网络安全的要求,不仅推动着互联网交易秩序和交易环境的建设,同时也带来了巨大的商业利润。从1999年8月3日成立的我国第一家CA认证中心中国电信CA安全认证系统起,目前我国已有140多家CA认证机构,但大都不具备合法身份。从2004年8月8日中华人民共和国电子签名法颁布以后,已被信息产业部审批的合法CA机构已有22家。其中一些行业建成了自己的一套CA体系,如中

12、国金融认证中心(CFCA)、中国电信CA安全认证系统(CTCA)等;还有一些地区建立了区域性的CA体系,如北京数字证书认证中心(BJCA)、上海电子商务CA认证中心(SHECA)、广东省电子商务认证中心(CNCA)、云南省电子商务认证中心(CNCA)等。截至2006年底,我国22家CA机构已经累计发放数字证书546万张。与电子签名法实施一周年时发放数字证书260万张相比,一年的时间,数字证书的数目已经翻了一番,电子签名和电子认证服务正在为电子政务、电子商务乃至整个信息化的发展提供有力的安全保障。二、我国CA市场存在的问题(1)我国CA市场存在较严重的同质竞争。据信息产业部的不完全统计,目前我国

13、有CA认证机构140多家,并且还有增建的趋势,而国内电子商务市场对CA的需求远远小于这些CA认证机构的供给量。目前,过多的CA认证中心正在拼抢有限的市场规模,由于并不存在完全的不可替代性,所以这些CA机构都还处于同质竞争阶段。这种竞争的结果是各家认证中心都需要通过价格战占领市场,而过于低廉的费用,不但不能够保证基本的服务,其权威性也会受到质疑。最后CA企业没有动力去开发新的市场,整个行业就处于一种混乱、无序的状态。 (2)技术层面上并没有形成统一的标准,“互联互通”需要进一步加强。在技术层面上,由于受到美国出口限制的影响,国内的CA认证技术完全靠自己研发。又由于参与部门很多,导致标准不统一,既

14、有国际上的通行标准,又有自主研发的标准,即便是同样的标准,其核心内容也有所偏差,这导致交叉认证过程中出现“各自为政”的局面。到目前为止,国内尚未出台统一的PKI标准或相关的管理规范,也没有一个明确的CA管理机构。这种缺乏统一标准的态势必将造成多种技术标准共存的局面,也是目前我国众多CA中心各方割据、难以互通的一个主要原因。(3)CA认证还存在明显的地域性与行业性,重复建设现象严重,无法满足全社会电子商务发展的要求。在分布格局上,目前我国的CA机构还存在明显的地域性和行业性,CA建设仍处于一种无序状态。从国内CA建设开始至今,一直没有出台一个指导国内CA建设的总体规划和管理指南,使得CA建设目的

15、不明、性质不清、重复建设的现象还比较严重。(4)行业整体缺乏有效的监督规范,相关法律还不够健全。但随着电子签名法和电子认证服务管理办法的出台,我国电子商务的发展环境得到一定的改善。特别是电子签名法的实施,为国内众多的CA机构设定了门槛,对人员、设备等都做出了明确的规定。目前按照电子签名法的规定,信息产业部已批准了20多家CA机构,可以说开启了CA机构规范化、合法化的进程。但电子签名法还需要更进一步的实施规章和细则,这也是目前CA行业最需要解决的问题。第二章 非对称加密原理2.1对称加密在研究对非对称加密前,我们有必要先研究一下对称加密原理。与非对称加密相对应的是对称加密。顾名思义,对称式加密即

16、加密与解密时使用的密码是相同的。对称加密是在日常的生活中最常见的一种加密方式,例如我们对一篇Word文档加密与解密,用的即为对称加密方法。对称加密原理:明文 plaintext,加密算法 Encryption algorithm,密钥 K,密文 ciphertext,解密算法 Decryption algorithm。 如图2.1所示图2.1 对称加密方式2.2非对称加密与消息认证2.2.1非对称加密非对称加密即公钥密码,公钥加密算法是基于数学函数而不是对位的形式的简单操作。更为重要的是,与常规对称加密相比,公钥加密是非对称的,公钥加密使用两个不同的密钥(公钥与私钥),而对称密钥只使用一个密钥

17、。一个公开作为加密密钥,叫做公钥(Public Key);一个为用户专用,作为解密密钥,叫做私钥(Private Key),通信双方无须事先进行保密通信。要从公钥或密文分析出明文或私钥,在计算上是不可行的。以私钥作为加密密钥,公钥作为解密密钥,可以实现一个用户加密的消息可使多个用户解读,用于数字签名。通信双方A和B通过计算产生出一对密钥(公钥KU,私钥KR)。在知道公钥KU和待加密报文M的情况下,对于发送方A,很容易通过计算产生对应的密文:接收方B使用私有密钥计算解密所得的密文,以便恢复原来的报文:要求除A和B以外的其他人即使知道公钥KU,要确定私钥KR在计算上是不可行的。同时即便其他人即使知

18、道公钥KU和密文C,要想恢复原来的明文M在计算上也是不可行的,这些要求最终归结到设计一个单向陷门函数。如图2.2所示:Joy明文输入加密算法,如RSA等解密算法 明文输出Alice的私钥Bob的公钥环TedAliceMikeAlice的公钥密文传输图2.2 加密2.2.2消息认证消息认证:验证消息内容和消息源。l 第一种方法:利用常规加密的认证。仅仅简单地使用常规加密也可以进行消息认证。我们假设只有发送者和接收者共享一个密钥(这是完全合理的),那么只有真正的发送者才能够成功地为对方加密消息。此外,如果消息里带有错误检测码和序列,则接收者能够确认消息是否被篡改过和序列号是否正常。如果消息里还包含

19、时间戳,则接收者能够确认消息没有走出网络传输的正常延时。l 第二种方法:使用消息认证码。利用私钥产生一小块数据,并将其附到消息上。当A向B发送消息时,使用消息和密钥函数计算消息认证码:MACM = F ( K,M )。发送者把消息和消息认证码一起发出。接收者使用密钥K执行相同的计算产生消息认证码,把接收者的消息认证码和发送者的消息认证码比较,若匹配,则:(1)消息没有被篡改(2)消息来源是A(3)消息顺序正确 如图2.3所示:MACMAC算法K发送MAC算法比较K消息图2.3 使用消息认证码(MAC)实现消息认证这里,MAC算法推荐使用DES,DES可以生成加密形式的消息,密文的最后几个比特用

20、作MAC。l 第三种方法:使用意向散列函数。散列函数接收变长的消息M作为输入,生成定长的消息摘要H(M)作为输出。与MAC不同的是散列函数不需要密钥输入。常用的散列函数有:SHA、MD5、SHA-1等等。第三章 数字签名与公钥证书3.1数字签名如图3.1所示:图3.1 认证公钥加密还可以按另一种方式使用。假设Bob想给Alice发送消息。虽然这条消息的保密性并不重要,但是他想Alice能够确定这条消息确实是来自于他。当Alice收到密文时,她发现能够用Bob的公钥进行解密,从而确定这条消息确实是Bob加密的。因为没有其他人拥有Bob的私钥,所以其他任何人都不能创建由Bob的公钥能够解密的密文。

21、因此,整个加密的消息就成为一个数字签名(digital signature)。此外,由于没有Bob的私钥就不可能自发消息,所以数字签名不仅认证了消息源,它还保证了数据的完整性。3.2公钥证书3.2.1 问题的由来从字面上理解,公钥加密的意思就是公钥是公开的。所以,如果有某种广泛接受的公钥算法,如RSA,任何参与者都可以给其他参与者发送他的或她的公钥,或向群体广播自己的公钥。虽然这种方法非常方便,但是它也有个很大的缺点。任何人都可以伪造公共通告。即某用户可以伪装用户A向其他参与者发送公钥或者广播公钥。直到一段时间后用户A发觉了伪造并且警告其他参与者,伪装者在此之前都可以讲到试图发送给A的加密消息

22、,并且使用假的公钥进行认证。3.2.2解决办法解决这种问题的方法是使用公钥证书。实际上,公钥证书由公钥加上公钥所有者的用户ID以及可信的第三方签名的整个数据块组成。通常,第三方就是用户团体所信任的认证中心(CA),如政府机构或金融机构。用户可通过安全渠道把他或她的公钥提交给这个CA,获取证书。然后用户就可以发布这个证书。任何需要该用户公钥的人都可以获取这个证书,并且通过所附的可信签名验证其有效性。如图3.2:图3.2 公钥证书的使用人们广泛接受的公钥证书格式是X.509标准。X.509证书应用于大多数的网络安全设施,包括IP安全、安全套接字层(SSL)、安全电子交易(SET)和S/MIME。3

23、.2.3 X.509证书X.509方案的核心是与每个用户相关联的公钥。这些用户证书是由可信任的认证中心(CA)创建的,并由CA或用户放在目录中。目录服务器本身不负责公钥的产生和认识功能;它只为用户获取证书提供一个容易访问的场所。证书的结构如图3.3所示:图3.3X509证书格式l 版本(version):区别连续版本中的证书格式,默认为版本。如果证书中有发放者唯一标识符(Issuer Unique Identifier)或者主体唯一标识符(Subject Unique Identifier),则说明此值一定为2。如果存在一个或多个扩展,则些值一定为3。l 序列号(serial number):

24、一个整数值,此值在发放证书的CA中唯一,且明确与此证书相关联。l 签名算法标识符(signature algorithm identifier):用于进行签名证书的算法和一切有关的参数。由于此信息在证书末尾的签名域中被重复,此域基本没有用处。l 发放者名称(issuer name):创建和签发该证书的CA的X.500名称。l 有效期(period of validity):包括两个日期:证书有效的最初日期和最晚日期。l 主体名称(subject name):此证书指向用户的名称。也就是说,此证书核实拥有相关私钥的主体的公钥。l 主体公钥信息(subjects public-key inform

25、ation):主体的公钥,加上一个表明此公钥用于何种加密算法的标识和任何相关参数。l 发放者唯一标识符(issuer unique identifier):一个可选的比特串域,在X.500名称被重用于不同实体中的情况下,它用来唯一确定发放证书的CA。l 主体唯一标识符(subject unique identifier):一个可选的比特串域,在X.500名称被重用于不同实体中的情况下,它用来唯一确定主体。l 扩展(extensions):一个和多个扩展域组成的集合。在版本3中加入扩展。l 签名(signature):包括了此证书的一切其他的域。它包含用CA的私钥加密过后其他域的散列码。此域包含

26、签名算法标识符。3.3 PKI(公钥基础设施)的简介3.3.1 PKI的定义RFC2822(Internet Security Glossary,网络安全术语表)将公钥基础设施(public-key infrastructure, PKI)定义为基于非对称密码体制的用来生成、管理、存储、分配和撤销数字证书的一套硬件、软件、人员、策略和过程,也就是说,PKI就是利用公钥理论和技术建立的提供安全服务的基础设施。其核心元素是数字证书,核心执行者是CA认证机构。PKI公钥基础设施的主要任务是在开放环境中为开放性业务提供数字签名服务。用户可利用PKI平台提供的服务进行安全的电子商务、电子政务和电子军务等

27、各种活动。开发一个PKI的主要是使安全、方便和高效获取公钥成为可能。公钥基础设施X.509(PKIX)工作组是建立一个基于X.509的、适用于在互联网上部署基于证书架构的正式(且一般)模型的背后推动力量。3.3.2 PKI的组成-公钥证书-策略管理机构(PMA) -认证机构(certification authority, CA) :证书的发放者,通常也是撤销证书列表的发放者。它还可能支持很多管理功能,虽然这些一般是由一个或多个注册中心代理的。-注册机构(RA) :一个可选的部分,它承担了很多从CA处继承的管理功能。经常将RA与端实体注册过程相关联起来,但是也可以协助许多其他领域的工作。-证书

28、管理机构(CMA) 证书存档(Repository) 证书作废列表(CRL)署名用户(Subscriber) 依赖方(Relying party) 最终用户(End User)3.3.3 PKI使用的技术l 消息摘要与消息认证码: MD5(128位)、SHA-1 (160 位) l 对称加密算法:DES AES l 非对称加密密码 :RSA ( 1024 位 ) 、Diffie-Hellman l 数字签名与数字信封 3.3.4 数字证书认证中心CACA作为电子交易中受信任的第三方,负责为电子商务环境中各个实体颁发数字证书,以证明各实体身份的真实性,并负责检验和管理证书;数字证书的用户拥有自己

29、的公钥/私钥对。证书中包含有证书主体的身份信息、其公钥数据、发证机构名称等,发证机构验证证书主体为合法注册实体后,就对上述信息进行数字签名,形成证书。 数字证书认证中心是整个网上电子交易安全的关键环节,是电子交易中信赖的基础。必须是所有合法注册用户所信赖的具有权威性、信赖性及公正性的第三方机构。概括地说,CA认证中心的功能主要有:证书发放、证书更新、证书撤销和证书验证。CA认证中心的一般流程如图3.4所示:图3.4 CA认证中心的一般流程图图3.4中各数字标注的流程解释如下:(1) 署名用户向证明机构(CA)提出数字证书申请。(2) CA验明署名用户身份,并签发数字证书。(3) CA将证书公布

30、到证书库中。(4) 署名用户对电子信件数字签名作为发送认证,确保信件完整性,不可否认性,并发送给依赖方。(5) 依赖方接收信件,用署名用户的公钥验证数字签名,并到证书库查明署名用户证书的状态和有效性。(6) 证书库返回证书检查结果。第四章 实现数字认证的总体设计4.1 CA的总体设计CA是整个PKI的核心,主要职责是颁发证书、验证用户身份的真实性。本文所设计并实现的网络认证中心分为密钥库的管理与证书的管理。CA的层次如图4.1所示:图4.1CA层次图密钥库是秘密密钥、公开/私有密钥对和证明公开密钥有效性的证书的容器。如图4.2所示:图4.2 密钥库密钥库包含两种项目:(1) 密钥项目保存秘密密

31、钥或公开/私有密钥对(和验证公开密钥的证书链)。密钥项目可以签名对象和提供验证签名的证书。(2) 信任证书项目保存另一方的公开密钥证书。将公开密钥证书放在密钥库中后,就可以信任这个证书属于证书中指定的主体/拥有者。可以用信任证书项目验证从第三方收到的信息。密钥库可以有多个密钥项目和多个信任证书项目。例如,可以有多个公开/私有密钥对(以密钥项目形式出现)用于工作、个人关系、购物和银行,可以有同事、朋友、家人和熟人的信任证书项目。密钥库中的每个项目与惟一别名相关联。这个别名是表示密钥项目的字符串(如“Personal email”或“Code signing”)或与信任证书相关的实体名(“Jaso

32、n”或“Emily”)。如图4.3显示了别名在密钥库中的方法。图4.3 密钥库中的每个项目与惟一别名相关联密钥库的管理有以下方面:(1) 新建密钥库(2) 开启密钥库(3) 修改密钥库口令(4) 密钥库的备份(即另存为)4.2证书管理模块设计证书管理模块实现对证书的添加、删除及密码管理相关功能。CA对数字证书的管理有以下几个方面:(1) 新建证书(2) 证书的读取(显示证书的详细信息)(3) 向密钥库中添加证书(4) 在密钥库中删除证书(5) 列出密钥库中所有证书条目(6) 用指定公钥对应的私钥签发证书(7) 证书日期的检验(8) 证书有效性的检验(9) 证书吊销人们广泛接受的公钥证书格式是X

33、.509标准。X.509应用于大多数的网络安全设施,包括IP安全、安全电子交易等等。最常用的证书格式为X.509v3。可以使用J2SDK提供的keytool工具创建证书。4.3所做工作及开发工具介绍本设计主要利用Java安全性编程,在JBuilder开发环境中开发小型软件以实现模拟相关安全功能的目的。所做工作主要有以下方面:(1) 对称加密与非对称加密原理、消息认证、数字签名、公钥证书、PKI的介绍。(2) 数字认证的总体设计。(3) 用Java语言实现数字认证中心对证书及密钥库的管理。JBuilder2005 Enterprise是Borland公司开发的Java集成开发平台IDE,可应用于

34、各种Java的应用程序的开发。随着Java语言的流行,越来越的开发者青睐这个可视化的Java应用开发工具。使用它进行Java应用开发,可以极大地加快生手的学习速度,缩短高手的软件开发时间,是广大Java程序员最喜爱的开发工具之一。JBuilder2005 Enterprise集成了软件开发、高度、部署、管理等工具,极大地提高了项目的开发速度。Keytool工具:Keytool是JavaSDK引入的,用于管理密钥和证书,提供java.security.KeyStore类的实现方法,可支持下列功能:密钥对生成、管理密钥项目、管理信任证书项目、JDK1.1标识数据库导入、生成证书签名请求、口令管理等

35、。第五章 数字认证的详细设计5.1利用keytool.exe实现密钥库与证书的管理Keytool是Java2 SDK引入的,用于管理密钥与证书,提供java.security.KeyStore类的实现方法,可支持下列功能:l 密钥对生成生成公开与私有密钥对(即密钥项目)和生成公开密钥的X.509v自签名证书。证书存放为单元素证书链。l 管理密钥项目可以生成、导入、导出列表和删除密钥项目。l 管理信任证书项目可以生成、导入、导出列表和删除证书与证书链。l JDK1.1标识数据库导入可以导入JDK1.1使用的标识数据库。l 生成证书签名请求(CSR)可以生成证书签名请求,提交到证书机构。l 口令管

36、理可以用口令保护私有密钥或整个密钥库。口令可以通过keytool命令改变。l 帮助提供命令汇总,帮助用户。keytool管理的密钥库包含两种项目:密钥项目与信任证书项目。密钥项目包含用口令(加密)保护的秘密或私有密钥。私有密钥和对应于相关公开密钥的证书链放在一起。信任证书项目是非密钥库拥有者的公开密钥证书。密钥库拥有者信任证书中这个公开密钥为证书中指定的身份。利用keytool.exe创建数字证书Java中的keytool.exe可以用来创建数字证书,所有的数字证书是以一条一条(采用别名区别)的形式存入证书库的中,证书库中的一条证书包含该条证书的私钥,公钥和对应的数字证书的信息。证书库中的一条

37、证书可以导出数字证书文件,数字证书文件只包括主体信息和对应的公钥。每一个证书库(keystore)是一个文件组成,它有访问密码,在首次创建时,它会自动生成证书库,并要求指定访问证书库的密码在创建证书的的时候,需要填写证书的一些信息和证书对应的私钥密码。这些信息包括 :CN=xx, OU=xx, O=xx, L=xx, ST=xx, C=xx,它们的意思是: CN(Common Name名字与姓氏) OU(Organization Unit组织单位名称) O(Organization组织名称) L(Locality城市或区域名称) ST(State州或省份名称) C(Country国家名称) 可

38、以采用交互式让工具提示输入以上信息,也可以采用参数-dname CN=xx, OU=xx, O=xx, L=xx, ST=xx, C=xx 来自动创建。例:如下所示一句采用交互式创建一个证书,指定证书库为 CALib,创建别名为abnerCA的一条证书,它指定用RSA算法生成,且指定密钥长度为1024,证书有效期为3650天: j2sdk1.4.1_01mykeystorekeytool -genkey -alias abnerCA -keyalg RSA -keysize 1024 -keystore CALib -validity 3650。如图5.1所示:图5.1创建证书最后一步,我们输

39、入的是 CN,代表中国的缩写,也可以直接输入“中国”两个字。显示证书库中所有证书,命令:keytool list keystore CALib。如图5.2所示:图5.2显示证书库中所有证书显示证书信息例:显示CALib证书库中别名为abnerCA的证书的信息: keytool -list alias abnerCA -keystore CALib。如图5.3所示:图5.3显示证书信息显示证书的详细信息( -v参数)。命令: keytool -list -v -alias abnerCA -keystore CALib。如图5.4所示:图5.4显示证书的详细信息将证书导出到证书文件 命令:key

40、tool -export -alias abnerCA -file abnerCA.cer -keystore CALib将把证书库 CALib中别名为abnerCA的证书导出到abnerCA.cer证书文件中,它包含证书主体的信息及证书的公钥,不包括私钥,所以是可以公开的。上面导出的证书文件是以二进制编码文件,无法用文本编辑器正确显示,因此不利用公布证书,可以加上 -rfc参数以一种可打印的编者编码输出。 如: keytool -export -alias abnerCA -file abnerCA.cer -keystore CALib -storepass 111111 rfc 这个命令

41、在命令行中指定了证书库的访问密码,同时指定以可查看编码的方式输出。 用记事本打开如图5.5所示:图5.5查看证书编码通过证书文件查看证书的信息。命令:keytool printcert file abnerCA.cer可以查看证书文件的信息。 如图5.6所示:图5.6通过证书文件查看证书的信息也可以在 Windows下双击产生的证书文件直接查看。如图5.7所示: 图5.7Windows下证书信息证书条目的删除命令keytool -delete -alias abnerCA -keystore CALib 。这条命令将 CALib库中的abnerCA这一条证书删除了。 证书条目口令的修改 命令k

42、eytool keypasswd alias abnerCA keystore CALib可以以交互的方式修改 CALib证书库中的条目为abnerCA的证书,将别名为abnerCA的条目原来密码222222修改为333333。如图5.8所示: 图5.8证书口令修改以非交互式的方式修改库中别名为 abnerCA的证书的密码为新密码444444。命令行中的333333是指该条证书的原密码,111111是指证书库的密码:Keytool keypasswd alias abnerCA keypass 333333 new 444444 storepass 111111 keystore CALib

43、。此时,别名为abnerCA的证书密码为:444444。5.2 基于Java语言实现密钥库与证书的管理首先进入程序运行主界面,从系统中选择已经建好的密钥库CALib,输入密码加载后开启密钥库。如图5.9所示:图5.9 开启密钥库5.2.1 签发数字证书我们在上面创建好了数字证书,但这些数字证书还没有经过权威 CA的证实(即签名)。一般情况下,我们需要将这些证书发送给权威的CA,并申请其签名以确认数字证书让客户信任。 下面我们将模仿自己是一个权威的数字证书认证机构 CA,这个机构将采用自己的私钥来签发其它的证书。这个签发过程是这样的:我们自己是CA,我们自己有一个自签的数字证书存入数字证书库中。

44、在数字证书库中的这个我们的CA数字证书,它含有私钥,公钥和我们这个CA的主体信息。下面这一个指令可以创建一个CA的自签的数字证书: keytool genkey dname CN=空军工程大学,OU=空军工程大学,O=空军工程大学,L=西安市,ST=陕西省,C=中国 alias missionCA keyalg RSA keysize 1024 keystore CALib keypass missionca storepass 111111 validity 3650。上面,我们在 CALib这个数字证书库中创建了一个别名为:missionCA、有效期为3650天、算法为RSA且密钥长度为1

45、024的数字证书,这条证书的私钥密码为:missionca,证书库的访问密码为:111111。这条别名为missionCA的证书代表我们自己的权威CA即:空军工程大学这个权威CA。以后我们将用这个证书来签名其它的数字证书。现在我要给自己申请一个数字证书,我可以这么做:先在数字证书库中创建一条证书:keytool genkey dname CN=高征,OU=空军工程大学,O=空军工程大学,L=西安市,ST=陕西省,C=中国 alias gaozheng keyalg RSA keysize 1024 keystore CALib keypass gaozheng storepass 111111

46、validity 3650。这样创建了一个别名为 gaozheng私钥为gaozheng的数字证书,我们可以将它导出为cer文件(见前)。 接着,我们可以用上一步生成的 CA的自签证书来签名我这个数字证书了。核心代码及注释如下: 存放CA证书和被签证书的证书库的访问密码:char storepass = 111111.toCharArray();char cakeypass = missionca.toCharArray();CA证书在证书库中的别名,这个CA的证书用来签名其它的证书:String alias = mission;存放CA证书和被签证书的证书库的名字:String name =

47、 CALib;新证书库的名字:String newLib = SignedLib;设置新库的访问密码:char newLibPass = signedlib.toCharArray();被签证书的证书文件名:String cerFileName = gaozheng.cer; 被签证书的有效期,以年为单位,以当前时间开始计算:int n =3;定义证书序列号可自己定义:int sn = 200806001;签名后新产生的被签过名的证书在库中的别名:String afteraliasName = gaozheng_Signed;装载证书库:FileInputStream in = new Fil

48、eInputStream(name);KeyStore ks = KeyStore.getInstance(JKS);ks.load(in,storepass);从证书库中读出签发者(CA)的证书:java.security.cert.Certificate cl = ks.getCertificate(alias);根据别名和证书密码读出CA证书的私钥:PrivateKey privateKey = (PrivateKey)ks.getKey(alias,cakeypass);in.close();从证书库中读出的签发者(CA)的证书中提取签发者的信息:byte encodl = cl.ge

49、tEncoded();根据证书的编码创建X509CertImpl类型的对象:X509CertImpl cimpl = new X509CertImpl(encodl);根据上面的对象获得X509CertInfo类型的对象,该对象封装了证书的全部内容:X509CertInfo cinfo_first=(X509CertImpl.NAME+.+X509CertImpl.INFO);然后获得X500Name类型的签发者信息:X500Name issuer = (X500Name)cinfo_first.get(X509CertInfo.SUBJECT+.+CertificateIssuerName.

50、DN_NAME);从导出的cer文件中获取获取待签发的证书:CertificateFactory cf = CertificateFactory.getInstance(X.509);FileInputStream in2 = new FileInputStream(cerFileName);生成需要被签的证书:java.security.cert.Certificate c2 = cf.generateCertificate(in2);in2.close();byte encod2 = c2.getEncoded();获得被签证书的详细内容,然后根据这个证书生成新证书:X509CertImp

51、l cimp2 = new X509CertImpl(encod2);X509CertInfo info_second=(X509CertInfo)cimp2.get(X509CertImpl.NAME+.+X509CertImpl.INFO);设置新证书的有效期,使之为当前向后n年有效,新证书的截止日期不能超过CA证书的有效日期:Date beginDate = new Date();Calendar cal = Calendar.getInstance();cal.setTime(beginDate);cal.add(Calendar.YEAR,n);Date endDate = cal.

52、getTime();CertificateValidity cv = new CertificateValidity(beginDate,endDate);cinfo_second.set(X509CertInfo.VALIDITY,cv);设置新证书的序列号:CertificateSerialNumber csn = new CertificateSerialNumber(sn);cinfo_second.set(X509CertInfo.SERIAL_NUMBER,csn);设置新证书的签发者:cinfo_second.set(X509CertInfo.ISSUER+.+Certifica

53、teIssuerName.DN_NAME, issuer);设置新证书的算法,指定CA签名该证书所使用的算法为md5WithRSA:AlgorithmId algorithm =new AlgorithmId(AlgorithmId.md5WithRSAEncryption_oid);cinfo_second.set(CertificateAlgorithmId.NAME+.+CertificateAlgorithmId.ALGORITHM,algorithm);创建新的签名后的证书:X509CertImpl newcert = new X509CertImpl(cinfo_second);使

54、用CA证书的私钥进行签名,签名使用的算法为MD5WithRSA:newcert.sign(privateKey,MD5WithRSA);把新证书存入新密钥库:ks.setCertificateEntry(afteraliasName,newcert);FileOutputStream out = new FileOutputStream(newLib);存入新库signedLib,并设置新库的库访问密码:ks.store(out,newLibPass);out.close();程序运行界面如图5.10所示:图5.10签发证书我们将新增的证书导出为.cer文件(导出方法见前)。 至此,我们己经用

55、 CA的证书以我们的数字证书签名了。在windows中,双击导出的gaozheng_Signend.cer文件,图中证书信息一栏显示“不能验证该证书”,原因是因为,我们的这个数字证书的签发者missionCA证书没有安装到系统中。我们可以将证书库中别名为missionCA的自签数字证书导出为.cer文件,然后安装到系统中。再次查双击看此证书如图5.11所示:图 5.11受系统信任证书到此,我们己经获得了一个由我们自己的 CA签名颁发的个人数字证书。并且将我们自己的CA证书安装到系统中成为系统信任的根证书。于是,以后只要是由我们的这个CA证书签名颁发的数字证书都会受到系统的信任。 5.2.2 读

56、取证书信息(1) 从文件中读取证书信息:生成X.509证书类型的 CertificateFactory 对象:CertificateFactory cf = CertificateFactory.getInstance(X.509);从文件中创建输入流:FileInputStream in = new FileInputStream(gaozheng.cer);生成一个证书对象并使用从输入流 in中读取的数据对它进行初始化:java.security.cert.Certificate c = cf.generateCertificate(in);java.security.cert.X509C

57、ertificate t=(X509Certificate) c;System.out.println( 证书信息:n + c.toString();(2) 从keystore中读取证书信息:密钥库密码:String pass = 111111 ;等读证书别名String alias=gaozheng;FileInputStream in = in = new FileInputStream( CALib );生成JKS密钥库:KeyStore ks = ks = KeyStore.getInstance(JKS);载入密钥库对象的输入流与密码:ks.load(in,pass.toCharAr

58、ray();创建alias的证书对象java.security.cert.Certificate c = c = ks.getCertificate(alias);java.security.cert.X509Certificate t=(X509Certificate) c;System.out.println( 证书信息:n + c.toString();5.2.3 列出密钥库中所有证书密钥库密码:String storepass = 111111 ;FileInputStream in = new FileInputStream( CALib );KeyStore ks = KeySto

59、re.getInstance( JKS );加载密钥库ks.load(in,storepass.toCharArray();返回密钥库所有证书对象到枚举对象e:Enumeration e = ks.aliases();测试此枚举是否包含更多的元素,如果此枚举对象至少还有一个可提供的元素,则使用nextElement()方法返回此枚举的下一个元素:while( e.hasMoreElements()System.out.println(e.nextElement();程序运行如图5.12、5.13所示:图5.12显示所有证书图5.13 显示所选证书信息5.2.4 添加证书创建给定别名相关联的证书

60、链:Certificate cchain =ks.getCertificateChain(chen);返回与给定别名相关联的密钥,使用给定密码来恢复它:Key pk=(Key)ks.getKey(chen,111111.toCharArray();将给定的密钥分配给给定的别名,即在密钥库中添加新的证书chen_new:ks.setKeyEntry(chen_new,pk,222222.toCharArray(), cchain);5.2.5 删除证书判断密钥库中是否包含指定别名的证书条目,ks为KeyStore对象:if(ks.containsAlias( chen )删除别名对应的条目:ks

61、.deleteEntry( chen ); else System.out.println(该条目不存在);创建向CALib文件中写入数据的输出文件流:FileOutputStream output = new FileOutputStream( CALib);将keystore对象内容重新写入文件:ks.store(output,storepass.toCharArray();output.close();5.2.6 修改密钥库口令创建JKS密钥库:KeyStore ks=KeyStore.getInstance(JKS);密钥库旧口令:char oldPass=222222.toCharArray();密钥库新口令:char newPass=111111.toCharArray();创建输入流:FileInputStream in=new FileInputStream(CALib);向密钥库中载入输入流及密钥:ks.loa

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!