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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

本文(keytool密钥和证书管理工具文档格式.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

keytool密钥和证书管理工具文档格式.docx

1、对所有的密钥仓库项(密钥项和可信任的证书项)的访问都要通过唯一的别名来进行。别名不区分大小写,即别名 Hugo 和 hugo 指的是同一密钥仓库项。当用 -genkey 命令来生成密钥对(公钥和私钥)或用 -import 命令来将证书或证书链加到可信任证书的清单中,以增加一个实体到密钥仓库中,必须指定了一个别名。后续 keytool 命令必须使用这一相同的别名来引用该实体。例如,假设您用别名 duke 生成了新的公钥/私钥密钥对并将公钥用以下命令打包到自签名证书中(参见证书链):keytool -genkey -alias duke -keypass dukekeypasswd这指定了一个初始

2、口令“dukekeypasswd”,接下来的命令都要使用该口令才能访问与别名 duke 相关联的私钥。以后如果您想更改 duke 的 私钥口令,可用类似下述的命令:keytool -keypasswd -alias duke -keypass dukekeypasswd -new newpass这将把口令从“dukekeypasswd”改为“newpass”。实际上,除非是作为测试目的或是在安全的系统上,否则不应在命令行或脚本中指定口令。如果没有在命令行上指定所要求的口令选项,您将会得到要求输入口令的提示。当在口令提示符下键入口令时,口令将被即时显示出来(键入什么就显示什么),因此,要小心,不

3、要当着任何人的面键入口令。密钥仓库位置每个 keytool 命令都有一个 -keystore 选项,用于指定 keytool 管理的密钥仓库的永久密钥仓库文件名称及其位置。缺省情况下,密钥仓库储存在用户宿主目录(由系统属性的“user.home”决定)中名为 .keystore 的文件中。在 Solaris 系统中“user.home”缺省为用户的宿主目录.密钥仓库的创建当用 -genkey、-import 或 -identitydb 命令向某个尚不存在的密钥仓库添加数据时,就创建了一个密钥仓库。具体地说,如果在 -keystore 选项中指定了一个并不存在的密钥仓库,则该密钥仓库将被创建。如

4、果不指定 -keystore 选项,则缺省密钥仓库将是宿主目录中名为keystore 的文件。如果该文件并不存在,则它将被创建。密钥仓库实现java.security 包中提供的 KeyStore 类为访问和修改密钥仓库中的信息提供了相当固定的接口。可以有多个不同的具体实现,其中每个实现都是对某个特定类型的密钥仓库的具体实现。目前,有两个命令行工具(keytool 和 jarsigner)以及一个名为 Policy Tool 的基于 GUI 的工具使用密钥仓库实现。由于密钥仓库是公用的,JDK 用户可利用它来编写其它的安全性应用程序。Sun Microsystems 公司提供了一个内置的缺省实

5、现。它利用名为“JKS” 的专用密钥仓库类型(格式),将密钥仓库实现为一个文件。它用个人口令保护每个私钥,也用口令(可能为另一个口令)保护整个密钥仓库的完整性。密钥仓库的实现基于提供者 (provider)。更具体地说,由密钥仓库所提供的应用程序接口是借助于“服务提供者接口”(SPI) 来实现的。也就是说,在 java.security 包中还有一个对应的抽KeystoreSpi 类,它定义了“提供者”必须实现的服务提供者接口方法。(术语“提供者”指的是一个或一组包,这个或这组包提供了一部份可由 Java 安全 API 访问的服务子集的具体实现。因此,要提供某个密钥仓库实现,客户机必须实现一个

6、“提供者”并实现 KeystoreSpi 子类,如如何为Java 加密体系结构实现 Provider 中所述。通过使用 KeyStore 类中提供的“getInstance”工厂方法,应用程序可从不同的提供者中挑选不同类型的密钥仓库实现。密钥仓库类型定义密钥仓库信息的存储和数据格式,以及用于保护密钥仓库中的私钥和密钥仓库自身完整性的算法。不同类型的密钥仓库实现是不兼容的。keytool 使用基于文件的密钥仓库实现 (它把在命令行中传递给它的密钥仓库位置当成文件名处理并将之转换为文件输入流,从该文件输入流中加载密钥仓库信息)。另一方面,jarsigner 和policytool 工具可从任何可用

7、 URL 指定的位置读取某个密钥仓库。对于 keytool 和 jarsigner,可在命令行用 -storetype 选项指定密钥仓库类型。对于 Policy Tool,可通过 “编辑”菜单中的“更改密钥仓库”命令来指定密钥仓库类型。如果没有明确指定一个密钥仓库类型,这些工具将只是根据安全属性文件中指定的 keystore.type 属性值来选择密钥仓库实现。安全属性文件名为 java.security,它位于 JDK 安全属性目录java.home/lib/security 中,其中 java.home 为 JDK 的安装目录。每个工具都先获取 keystore.type 的值,然后检查所

8、有当前已安装的提供者直到找到一个实现所要求类型的密钥仓库的实现为止。然后就使用该提供者的密钥仓库实现。KeyStore 类定义了一个名为 getDefaultType 的静态方法,它可让应用程序或 applet 检索keystore.type 属性的值。以下代码将创建缺省密钥仓库类型(此类型由 keystore.type 属性所指定。)的一个实例:KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType();缺省的密钥仓库类型是“jks”(这是由“SUN”提供者提供的密钥仓库实现的专用类型)。它在安全性属性文件中由下行进行

9、指定:keystore.type=jks要让工具使用不同于缺省类型的密钥仓库实现,可更改此行,指定不同的密钥仓库类型。 例如,如果您有一个这样的提供者包,它给出一个名为“pkcs12”的密钥仓库类型的密钥仓库实现,则可将上面那行改为:keystore.type=pkcs12注意:密钥仓库类型的命名中大小写无关紧要。例如,“JKS”将被认为是与“jks”相同的。支持的算法和密钥大小。keytool 允许用户指定任何注册了的加密服务提供者所提供的密钥对生成和签名算法。也就是说,各种命令中的 keyalg 和 sigalg 选项必须得到提供者的实现的支持。缺省的密钥对生成算法是“DSA ”。签名算法

10、是从所涉及私钥的算法推导来的:如果所涉及的私钥是“DSA”类型,则缺省的签名算法为“SHA1withDSA”,如果所涉及的私钥是“RSA”类型,则缺省的签名算法为“MD5withRSA”。在生成 DSA 密钥对时,密钥大小的范围必须在 512 到 1024 位之间,且必须是 64 的倍数。缺省的密钥大小为 1024 位。证书证书(也叫公钥证书)是来自某个实体(签发人)的经数字签名的声明,它声明另一实体(主体)的公钥(及其它信息)具有某一特定的值。下面详细解释本句中使用的主要术语:公钥是与特定实体相关联的数字。所有需要与该实体进行信任交互的人都应知道该数字。公钥用于校验签名。经数字签名如果某些数

11、据经数字签名,说明它们已与某一实体的“身份”存储在一起,而且证明该实体的签名知道这些数据。通过用该实体的私钥进行绘制,这些数据就是不可伪造的了。身份用于声明实体的一种手段。某些系统中,身份是公钥,而在另一些系统中则可以是 Unix UID、电子邮件地址或 X.509 特征名等等。签名所谓签名,就是用实体的(签名人,在证书中也称为签发人)私钥对某些数据进行计算。私钥是一些数字,每个数字都应仅被以该数字作为私钥的特定实体所知(即该数字应保密)。在所有公钥密码系统中,私钥和公钥均成对出现。在 DSA 等具体的公钥密码系统中,一个私钥只对应一个公钥。私钥用于计算签名。实体实体是您在某种程度上对其加以信

12、任的个人、组织、程序、计算机、企业、银行等。通常,公钥密码系统需要访问用户的公钥。在大型联网环境中,并不能确保通信实体之间已经预先建立起关系,也无法确保受信任的储存库与所用的公钥都存在。于是人们发明了证书作为公钥分配问题的解决办法。现在,认证机构 (CA) 可充当可信任的第三方。CA 是可信任的向其它实体签名(发放)证书的实体(例如企业)。由于 CA 受法律协议约束,因此可认为它们只提供可靠有效的证书。公共认证机构数量很多,例如 VeriSign、Thawte、Entrust 等等。您还可以使用诸如Netscape/Microsoft Certificate Servers 或 Entrust

13、 CA 等产品来自己运营认证机构。使用 keytool 可以显示、导入和导出证书。还可以产生自签名证书。keytool 目前处理 X.509 证书。keytool - 密钥和证书管理工具(二)X.509 证书X.509 标准规定了证书可以包含什么信息,并说明了记录信息的方法(数据格式)。除了签名外,所有 X.509 证书还包含以下数据:版本识别用于该证书的 X.509 标准的版本,该版本影响证书中所能指定的信息。迄今为止,已定义的版本有三个。keytool 可导入和导出 v1、v2 和 v3 版的证书。它只能生成 v1 版证书。序列号发放证书的实体有责任为证书指定序列号,以使其区别于该实体发放

14、的其它证书。此信息用途很多。例如,如果某一证书被撤消,其序列号将放到证书撤消清单 (CRL) 中。签名算法标识符用于标识 CA 签名证书时所用的算法。签发人名称签名证书的实体的 X.500 特征名。它通常为一个 CA。使用该证书意味着信任签名该证书的实体。有些情况下(例如根或顶层 CA 证书),签发人会签名自己的证书。有效期每个证书均只能在一个有限的时间段内有效。该有效期以起始日期和时间及终止日期和时间表示,可以短至几秒或长至一世纪。所选有效期取决于许多因素,例如用于签名证书的私钥的使用频率及愿为证书支付的金钱等。它是在没有危及相关私钥的条件下,实体可以依赖公钥值的预计时间。主体名证书可以识别

15、其公钥的实体名。此名称使用 X.500 标准,因此在Internet中应是唯一的。它是实体的 X.500 特征名 (DN),例如CN=Java Duke, OU=Java Software Division, O=Sun Microsystems Inc, C=US(这些指主体的通用名、组织单位、组织和国家。)主体公钥信息这是被命名实体的公钥,同时包括指定该密钥所属公钥密码系统的算法标识符及所有相关的密钥参数。X.509 1 版 1988 年发布,已得到广泛使用,是最常用的版本。X.509 2 版引入了主体和签发人唯一标识符的概念,以解决主体和/或签发人名称在一段时间后可能重复使用的问题。大多

16、数证书监视文档都极力建议不要重复使用主体或签发人名称,而且建议证书不要使用唯一标识符。版本 2 证书尚未得到广泛使用。X.509 3 版是最新的版本(1996 年)。它支持扩展的概念,因此任何人均可定义扩展并将其纳入证书中。现在常用的扩展包括:KeyUsage(仅限密钥用于特殊目的,例如“只签名”)和AlternativeNames(允许其它身份也与该公钥关联,例如 DNS 名、电子邮件地址、IP 地址)。扩展可标记为“极重要”,以表示该扩展应被检查并执行或使用。例如,如果某一证书将 KeyUsage 扩展标记为“极重要”,而且设置为“keyCertSign”,则在 SSL 通讯期间该证书出现

17、时将被拒绝,因为该证书扩展表示相关私钥应只用于签名证书,而不应该用于 SSL。证书中的所有数据均用两个名为 ASN.1/DER 的相关标准进行编码。抽象语法注释 1 (Abstract Syntax Notation 1) 描述数据。确定性编码规则 (Definite Encoding Rules) 描述储存和传输该数据的唯一方式。X.500 特征名X.500 特征名用于标识实体,例如 X.509 证书的 主体和签发人(签名人)域所命名的实体。keytool 支持以下的子组件:commonName - 个人常用名,例如“Susan Jones”organizationUnit - 小型组织(例

18、如部门或分部)的名称,例如“Purchasing”organizationName - 大型组织的名称,例如“ABCSystems, Inc.”country - 两个字母的国家代码,例如“CH” 当给出一个特征名字符串作为 -dname 选项的值时,例如 -genkey 或 -selfcert 命令中的该选项, 字符串必须为以下格式:CN=cName, OU=orgUnit, O=org, L=city, S=state, C=countryCode 其中所有的斜体字代表实际值而上面的关键字是以下缩写:CN=commonName OU=organizationUnit O=organizat

19、ionName L=localityName S=stateName C=country以下是特征名字符串样本:CN=Mark Smith, OU=JavaSoft, O=Sun, L=Cupertino, S=California, C=US以下是使用这一字符串的样本命令:keytool -genkey -dname CN=Mark Smith, OU=JavaSoft, O=Sun, L=Cupertino, S=California, C=US -alias mark大小写对关键字缩写无关紧要。例如,“CN”、“cn”和“Cn”都将被当作是一样的。但顺序是有关系的;每个子组件必须按设计好

20、的顺序出现。但是,不是所有子组件都必须有。可以只用一部分,例如:CN=Steve Meier, OU=SunSoft, O=Sun, C=US如果特征名字符串的值含有逗号,当在命令行指定该字符串时,逗号必须用“”字符来进行转义,如下所示:cn=peter schuster, o=Sun Microsystems, Inc., o=sun, c=us在命令行中指定特征名字符串是不必要的。如果某一命令需要指定特征名字符串,而在命令行中又未提供,则用户将得到每个子组件的提示。这种情况下,逗号不需要用“”来转义。Internet RFC 1421 证书编码标准证书常用 Internet RFC 142

21、1 标准中定义的可打印的编码格式来存储,而不是用其二进制编码来存储。这种证书格式,也称“Base 64 编码”,便于通过电子邮件或其它机制将证书导出到别的应用程序中。用 -import 和 -printcert 命令读入的证书可以是这种格式的编码或是二进制格式的编码。缺省情况下,-export 命令将以二进制编码格式输出证书,但如果指定了 -rfc 选项,则将以可打印的编码格式输出证书。缺省情况下,-list 命令打印证书的 MD5 指纹。而如果指定了 -v 选项,将以可读格式打印证书,如果指定了 -rfc 选项,将以可打印的编码格式输出证书。在其可打印的编码格式中,已编码证书的起始行是:-B

22、EGIN CERTIFICATE- 结束行是:-END CERTIFICATE- 证书链keytool 可创建和管理密钥仓库的“密钥”项,每个密钥项都含有私钥和相关证书“链”。链中的第一个证书含有与私钥对应的公钥。当第一次产生密钥时(参见 -genkey 命令),链中只含有一个元素,即自签名证书。自签名证书是一个这样的证书:其签发人(签名人)与主体(证书所认证的公钥所属的实体)相同。当调用 -genkey 命令来生成新的公钥/私钥对时,它同时也把公钥打包进自签名证书中。之后,当证书签名请求 (CSR) (参见 -certreq 命令)被生成并送至认证机构 (CA) 后,CA 的答复将被导入(参

23、见 -import),证书链将取代自签名证书。在链的底部是认证主体公钥的 CA 所发放的证书(答复)。链中下一个证书是用于认证 CA 公钥的证书。在许多情况下,这是个自签名证书(即来自认证其自身公钥的 CA 的证书)且是链中的最后一个证书。在其它情况下,CA 也许将返回证书链。这种情况下,链中底部的证书是相同的(由 CA 签名的证书,对密钥项的公钥进行认证),但链中第二个证书是由不同的 CA 所签名的,对您向其发送 CSR的 CA 的公钥进行认证。然后,链中的下一个证书将是对第二个 CA 的公钥进行认证的证书,以此类推,直至到达自签名的“根”证书为止。因此,链中的每个证书(从第一个以后)都对链

24、中前一个证书的签名人的公钥进行认证。许多 CA 只返回所发放的证书,而不支持链,特别是当层次结构较简单时(无中介 CA)。这种情况下,必须用储存在密钥仓库中的可信任的证书信息来建立证书链。另一种答复格式(由 PKCS#7 标准所定义)除了包含所签发的证书外,还支持证书链。两种答复格式都可由 keytool 处理。顶层(根)CA 证书是自签名的。但是,对根公钥的信任并非来自根证书本身(任何人都可用特征名来产生自签名证书!譬如说用 VeriSign 根 CA 的特征名), 而是来自报纸之类的其它来源。根 CA的公钥是广为人知的。它被储存在证书中的唯一原因是因为这是大多数工具所能理解的格式,因此这种

25、情况下的证书只是作为一种传输根 CA 的公钥用的“交通工具”。在将根 CA 证书加到您的密钥仓库中之前,应该先对它进行查看(用 -printcert 选项)并将所显示的指纹与已知的指纹(从报纸、根 CA 的网页等中获取)进行比较。keytool - 密钥和证书管理工具(三)导入证书要从一个文件中导入某个证书,可用 -import 命令,如下所示keytool -import -alias joe -file jcertfile.cer此样本命令导入文件 jcertfile.cer 中的证书并将其存储在由别名 joe 标识的密钥仓库项中。导入证书的两个理由如下:为将其添加到可信任的证书清单中,或

26、为导入因向 CA 提交证书签名请求(参见 -certreq 命令)而收到的来自该 CA 的认证答复。-alias 选项的值指明要进行何种类型的导入。如果数据库中存在别名,且该别名标识具有私钥的项,则将假定您要导入认证答复。keytool 将检查认证答复中的公钥是否与用别名储存的私钥相匹配,如果两者不同,则程序退出。如果别名标识另一种类型的密钥仓库项,则不导入该证书。如果该别名不存在,则它将被创建并与导入的证书关联。有关导入可信任证书的警告重要:将证书作为可信任的证书导入之前,请务必先仔细检查该证书!先查看一下(用 -printcert 命令,或用不带 -noprompt 选项的 -import

27、 命令),确保所显示的证书指纹与所预计的相匹配。例如,假设某人给您送来或用电子邮件发来一个证书,您将它放在名为/tmp/cert 的文件中。在将它加到可信任证书的清单中之前,可通过执行 -printcert 命令来查看它的指纹,如下所示:keytool -printcert -file /tmp/cert Owner: CN=ll, OU=ll, O=ll, L=ll, S=ll, C=ll Issuer: Serial Number: 59092b34 Valid from: Thu Sep 25 18:01:13 PDT 1997 until: Wed Dec 24 17:13 PST 1

28、997 Certificate Fingerprints: MD5: 11:81:AD:92:C8:E5:0E:A2:2E:D4:7A:D7:5F:07:6F SHA1: 20:B6:17:FA:EF:55:8A:D0:71:1F:E8:D6:9D:C0:37:13:5E:FE然后给向您发送证书的人打电话或用其它方式联系,将您将您所看到的指纹与他们所提供的比较。只有两者相等才可保证证书在传送途中没有被其它人(例如,攻击者)的证书所更换。如果发生了这样的攻击,而您未检查证书即将其导入,您就会信任攻击者所签名的任何东西(例如,一个含有恶意类文件的 JAR 文件)。并不要求在导入证书前执行 -printcert 命令,因为在将证书添加到密钥仓库中可信任证书的清单中之前,-import 命令将会打印出该证书的信息,并提示您进行校验。这时,您可选择中止导入操作。但是注意,只有在调用不带 -noprompt 选项的 -import 命令时才能这样做。如果给出了 -noprom

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

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