密钥和证书管理工具

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

陕西省数字证书认证中心()88313237、88317495、88311561转118第1页共25页keytool-密钥和证书管理工具陕西省数字证书认证中心陕西省数字证书认证中心()88313237、88317495、88311561转118第2页共25页keytool-密钥和证书管理工具keytool-密钥和证书管理工具管理由私钥和认证相关公钥的X.509证书链组成的密钥仓库(数据库)。还管理来自可信任实体的证书。结构keytool[命令]说明keytool是个密钥和证书管理工具。它使用户能够管理自己的公钥/私钥对及相关证书,用于(通过数字签名)自我认证(用户向别的用户/服务认证自己)或数据完整性以及认证服务。它还允许用户储存他们的通信对等者的公钥(以证书形式)。证书是来自一个实体(个人、公司等)的经数字签名的声明,它声明某些其它实体的公钥(及其它信息)具有某一的特定值(参见证书)。当数据被数字化签名后,校验签名即可检查数据的完整性和真实性。完整性的意思是数据没有被修改或损坏过,真实性的意思是数据的确是来自声称创建了该数据和对它进行了签名的实体。keytool将密钥和证书储存在一个所谓的密钥仓库中。缺省的密钥仓库实现将密钥仓库实现为一个文件。它用口令来保护私钥。jarsigner工具利用密钥仓库中的信息来产生或校验Java存档(JAR)文件的数字签名(JAR文件将类文件、图象、声音和/或其它数字化数据打包在一个文件中)。jarsigner用JAR文件所附带的证书(包含于JAR文件的签名块文件中)来校验JAR文件的数字签名,然后检查该证书的公钥是否“可信任”,即是否包括在指定的密钥仓库中。请注意:keytool和jarsigner工具完全取代了JDK1.1中提供的javakey工具。这些新工具所提供的功能比javakey提供的多,包括能够用口令来保护密钥仓库和私钥,以及除了能够生成签名外还可以校验它们。新的密钥仓库体系结构取代了javakey所创建和管理的身份数据库。可以利用-identitydbkeytool命令将信息从身份数据库导入密钥仓库。密钥仓库项在密钥仓库中有两种不同类型的项:陕西省数字证书认证中心()88313237、88317495、88311561转118第3页共25页密钥项-每项存放极为敏感的加密密钥信息,这种信息以一种受保护的格式储存以防止未授权的访问。通常,储存在这类项中的密钥是机密密钥,或是伴有用于认证相应公钥用的证书“链”的私钥。keytool和jarsigner工具只处理后一类型的项,即私钥及其关联的证书链。可信任的证书项-每项包含一个属于另一团体的公钥证书。它之所以叫做“可信任的证书”,是因为密钥仓库的拥有者相信证书中的公钥确实属于证书“主体”(拥有者)识别的身份。证书签发人通过对证书签名来保证这点。密钥仓库使用的别名对所有的密钥仓库项(密钥项和可信任的证书项)的访问都要通过唯一的别名来进行。别名不区分大小写,即别名Hugo和hugo指的是同一密钥仓库项。当用-genkey命令来生成密钥对(公钥和私钥)或用-import命令来将证书或证书链加到可信任证书的清单中,以增加一个实体到密钥仓库中,必须指定了一个别名。后续keytool命令必须使用这一相同的别名来引用该实体。例如,假设您用别名duke生成了新的公钥/私钥密钥对并将公钥用以下命令打包到自签名证书中(参见证书链):keytool-genkey-aliasduke-keypassdukekeypasswd这指定了一个初始口令“dukekeypasswd”,接下来的命令都要使用该口令才能访问与别名duke相关联的私钥。以后如果您想更改duke的私钥口令,可用类似下述的命令:keytool-keypasswd-aliasduke-keypassdukekeypasswd-newnewpass这将把口令从“dukekeypasswd”改为“newpass”。请注意:实际上,除非是作为测试目的或是在安全的系统上,否则不应在命令行或脚本中指定口令。如果没有在命令行上指定所要求的口令选项,您将会得到要求输入口令的提示。当在口令提示符下键入口令时,口令将被即时显示出来(键入什么就显示什么),因此,要小心,不要当着任何人的面键入口令。密钥仓库位置每个keytool命令都有一个-keystore选项,用于指定keytool管理的密钥仓库的永久密钥仓库文件名称及其位置。缺省情况下,密钥仓库储存在用户宿主目录(由系统属性的“user.home”决定)中名为.keystore的文件中。在Solaris系统中“user.home”缺省为用户的宿主目录。陕西省数字证书认证中心()88313237、88317495、88311561转118第4页共25页密钥仓库的创建当用-genkey、-import或-identitydb命令向某个尚不存在的密钥仓库添加数据时,就创建了一个密钥仓库。具体地说,如果在-keystore选项中指定了一个并不存在的密钥仓库,则该密钥仓库将被创建。如果不指定-keystore选项,则缺省密钥仓库将是宿主目录中名为.keystore的文件。如果该文件并不存在,则它将被创建。密钥仓库实现java.security包中提供的KeyStore类为访问和修改密钥仓库中的信息提供了相当固定的接口。可以有多个不同的具体实现,其中每个实现都是对某个特定类型的密钥仓库的具体实现。目前,有两个命令行工具(keytool和jarsigner)以及一个名为PolicyTool的基于GUI的工具使用密钥仓库实现。由于密钥仓库是公用的,JDK用户可利用它来编写其它的安全性应用程序。SunMicrosystems公司提供了一个内置的缺省实现。它利用名为“JKS”的专用密钥仓库类型(格式),将密钥仓库实现为一个文件。它用个人口令保护每个私钥,也用口令(可能为另一个口令)保护整个密钥仓库的完整性。密钥仓库的实现基于提供者(provider)。更具体地说,由密钥仓库所提供的应用程序接口是借助于“服务提供者接口”(SPI)来实现的。也就是说,在java.security包中还有一个对应的抽象KeystoreSpi类,它定义了“提供者”必须实现的服务提供者接口方法。(术语“提供者”指的是一个或一组包,这个或这组包提供了一部份可由Java安全API访问的服务子集的具体实现。因此,要提供某个密钥仓库实现,客户机必须实现一个“提供者”并实现KeystoreSpi子类,如如何为Java加密体系结构实现Provider中所述。通过使用KeyStore类中提供的“getInstance”工厂方法,应用程序可从不同的提供者中挑选不同类型的密钥仓库实现。密钥仓库类型定义密钥仓库信息的存储和数据格式,以及用于保护密钥仓库中的私钥和密钥仓库自身完整性的算法。不同类型的密钥仓库实现是不兼容的。keytool使用基于文件的密钥仓库实现(它把在命令行中传递给它的密钥仓库位置当成文件名处理并将之转换为文件输入流,从该文件输入流中加载密钥仓库信息)。另一方面,jarsigner和policytool工具可从任何可用URL指定的位置读取某个密钥仓库。对于keytool和jarsigner,可在命令行用-storetype选项指定密钥仓库类型。对于PolicyTool,可通过“编辑”菜单中的“更改密钥仓库”命令来指定密钥仓库类型。陕西省数字证书认证中心()88313237、88317495、88311561转118第5页共25页如果没有明确指定一个密钥仓库类型,这些工具将只是根据安全属性文件中指定的keystore.type属性值来选择密钥仓库实现。安全属性文件名为java.security,它位于JDK安全属性目录java.home/lib/security中,其中java.home为JDK的安装目录。每个工具都先获取keystore.type的值,然后检查所有当前已安装的提供者直到找到一个实现所要求类型的密钥仓库的实现为止。然后就使用该提供者的密钥仓库实现。KeyStore类定义了一个名为getDefaultType的静态方法,它可让应用程序或applet检索keystore.type属性的值。以下代码将创建缺省密钥仓库类型(此类型由keystore.type属性所指定。)的一个实例:KeyStorekeyStore=KeyStore.getInstance(KeyStore.getDefaultType());缺省的密钥仓库类型是“jks”(这是由“SUN”提供者提供的密钥仓库实现的专用类型)。它在安全性属性文件中由下行进行指定:keystore.type=jks要让工具使用不同于缺省类型的密钥仓库实现,可更改此行,指定不同的密钥仓库类型。例如,如果您有一个这样的提供者包,它给出一个名为“pkcs12”的密钥仓库类型的密钥仓库实现,则可将上面那行改为:keystore.type=pkcs12注意:密钥仓库类型的命名中大小写无关紧要。例如,“JKS”将被认为是与“jks”相同的。支持的算法和密钥大小keytool允许用户指定任何注册了的加密服务提供者所提供的密钥对生成和签名算法。也就是说,各种命令中的keyalg和sigalg选项必须得到提供者的实现的支持。缺省的密钥对生成算法是“DSA”。签名算法是从所涉及私钥的算法推导来的:如果所涉及的私钥是“DSA”类型,则缺省的签名算法为“SHA1withDSA”,如果所涉及的私钥是“RSA”类型,则缺省的签名算法为“MD5withRSA”。在生成DSA密钥对时,密钥大小的范围必须在512到1024位之间,且必须是64的倍数。缺省的密钥大小为1024位。证书证书(也叫公钥证书)是来自某个实体(签发人)的经数字签名的声明,它声明另一实体(主体)的公钥(及其它信息)具有某一特定的值。陕西省数字证书认证中心()88313237、88317495、88311561转118第6页共25页下面详细解释本句中使用的主要术语:公钥是与特定实体相关联的数字。所有需要与该实体进行信任交互的人都应知道该数字。公钥用于校验签名。经数字签名如果某些数据经数字签名,说明它们已与某一实体的“身份”存储在一起,而且证明该实体的签名知道这些数据。通过用该实体的私钥进行绘制,这些数据就是不可伪造的了。身份用于声明实体的一种手段。某些系统中,身份是公钥,而在另一些系统中则可以是UnixUID、电子邮件地址或X.509特征名等等。签名所谓签名,就是用实体的(签名人,在证书中也称为签发人)私钥对某些数据进行计算。私钥是一些数字,每个数字都应仅被以该数字作为私钥的特定实体所知(即该数字应保密)。在所有公钥密码系统中,私钥和公钥均成对出现。在DSA等具体的公钥密码系统中,一个私钥只对应一个公钥。私钥用于计算签名。实体实体是您在某种程度上对其加以信任的个人、组织、程序、计算机、企业、银行等。通常,公钥密码系统需要访问用户的公钥。在大型联网环境中,并不能确保通信实体之间已经预先建立起关系,也无法确保受信任的储存库与所用的公钥都存在。于是人们发明了证书作为公钥分配问题的解决办法。现在,认证机构(CA)可充当可信任的第三方。CA是可信任的向其它实体签名(发放)证书的实体(例如企业)。由于CA受法律协议约束,因此可认为它们只提供可靠有效的证书。公共认证机构数量很多,例如VeriSign、Thawte、Entrust等等。您还可以使用诸如Netscape/MicrosoftCertificateServers或EntrustCA等产品来自己运营认证机构。使用keytool可以显示、导入和导出证书。还可以产生自签名证书。keytool目前处理X.509证书

1 / 25
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功