java加密技术(十二) keytool命令

来源:互联网 发布:数据分析培训课程 编辑:程序博客网 时间:2024/05/30 13:43

Keytool是用于管理密钥和证书的工具,使用户和管理员能管理自己的公/私钥对以及相关的证书。Keytool主要用于认证服务和使用数字签名验证数据的完整性。J2SE复合包以命令行工具的形式提供Keytool,可用于创建Java密钥库(Java keystore,JKS)和Java加密扩展密钥库(Java Cryptographic Extensions Keystore,JCEKS)、生成并存储密钥及其相关的X.509v1证书、生成证书签发请求(Certificate Signing Requests,CSR)、导入并存储可信证书及维护密钥库项。
keytool工具使用X.509证书标准,而X.509证书标准则使用抽象语法标记1(Abstract Syntax Notation1,ASN.1)标准和明确编码规则(Definite Encoding Rules,DER)标准,其中前者用于描述证书数据,后者用于指定信息如何存储和传输。另外,X.509证书还使用X.500可辨别名称(Distinguished Name,DN)标准来描述持有者和颁发者字段的值。
下面介绍用Keytool工具执行的常见操作。
创建密钥库数据库。使用Keytool向不存在的密钥库添加新项时,将创建一个新的密钥库。当用户目录中没有指定的密钥库时,下列选项将自动创建一个密钥库:
ˉgenkey选项:用于生成公/私钥对。
ˉimport选项:用于导入可信证书。
ˉidentitydb:用于从JDK1.1中导入数据。
默认情况下,Keytool创建扩展名为.keystore的密钥库,并将其存储在用户的主目录中,但是也可以使用选项ˉkeystore来指定文件名。
生成公/私密钥对。使用Keytool生成公/私钥对时,每项都将包括一个私钥和与之相关的证书“链”,证书链中的第一个证书包含与私钥对应的公钥。
要生成公/私钥对并将其添加到密钥库中,可以使用命令keytoolˉgenkey。其中选项ˉgenkey创建公/私钥对,并将公钥封装到一个自签名证书中。下面的范例生成一个密钥对,并将公钥封装到一个X.509自签名证书中,再将该证书存储在一条只有一个元素的证书链上。在该命令中,还需要为密钥和密钥库指定密码、使用的算法(RSA)和别名,如范例3ˉ20所示。
范例3ˉ20 使用keytool生成密钥对

在范例3ˉ20所示的命令中,选项ˉgenkey用于生成密钥对,其他选项用于为命令提供支持。所生成的密钥对的别名为myalisa,密码为mykeypass。对于以后所有的命令和在操作访问密钥库中的这个密钥对时,必须提供别名和密码。可使用的其他选项如下:
ˉkeyalg:指定密钥使用的加密算法(如RSA)。还可以使用选项keysize指定密钥的长度,如果没有指定长度,那么keytool将使用默认值———1024位。
ˉkeypass:指定生成密钥的密码。
ˉkeystore:指定存储密钥的密钥库的名称(二进制文件),如果没有指定,那么将创建一个新的密钥库,并将其存储为.keystore文件。
ˉstorepass:指定访问密钥库的密码。密钥库创建后,要对其做任何修改都必须提供该密码,以便访问密钥库。
在执行这些命令和选项时,还将提示用户提供下列数据,以创建X.500可辨别名称的子项
范例3ˉ21是使用这些命令和选项而生成的输出。
范例3ˉ21 使用Keytool生成密钥对
在用户回答完全部问题后,keytool将生成密钥和证书,并将其存储在指定的密钥库文件中。
列出密钥库中的项。Keytool选项ˉlist用于列出密钥库中全部的项,以及查看与别名相关的项。范例3ˉ22中的命令列出了名为mykeystore的密钥库中全部的项,该命令还要求用户输入密钥库的密码。
范例3ˉ22 使用keytool列出Java密钥库中的项
为了显示别名所指定的密钥库项的内容,命令list可以输出证书的MD5指纹。如果指定了选项ˉv,则证书将以人类可读的格式显示;如果指定了选项ˉrfc,则将以Base64编码格式显示证书。范例3ˉ23所示的命令以人类可读的格式列出了别名为myalias的密钥库项的内容。
范例3ˉ23 使用keytool列出Java密钥库的内容
从密钥库中导出证书项。要进行可信交互,则客户端必须在密钥库中存储签名者的公钥 副本。为此,可以先将证书(包含公钥和签名者的信息)导出为二进制证书文件,然后再将 其作为可信证书导入客户端的密钥库。要将证书导出为二进制文件(参见范例3ˉ24),则需 要使用keytool的选项ˉexport和ˉfile,以下命令将密钥库mykeystore中别名为myalias的 证书项导出为文件mycertificate.cer。该命令也需要输入密钥库的密码。范例3ˉ24 从Jav a密钥库中导出证书

导入可信证书。Keytool选项ˉimport用于将可信证书导入密钥库,并将其同唯一的一个别名联系起来。如果客户端信任通信等对体的证书,并希望与其进行可信的客户端交互,则可以在客户端环境中导入可信证书。
将新证书导入密钥库时,keytool工具将验证该证书的完整性和真实性。为此,keytool工具将构建一条以该证书开始到颁发者的自签名证书结束的信任链。可信证书的列表将存储在cacerts文件中。
要将证书导入密钥库(参见范例3ˉ25),则需要提供标识证书项的唯一别名和密钥密码。例如,下面的命令从文件mycertificate.cer中将一个证书项导入到密钥库clientkeystore,并将该证书项标识为myclientalias,而密钥和密钥库的密码分别是clientkeypass和clientpass。最后,该命令将显示证书的持有者和颁发者的信息,并询问用户是否信任该证书:范例3ˉ25 向Java密钥库中导入可信证书


显示证书的信息。Keytool选项ˉprintcert用于显示已从密钥库中导出并存储为文件的证书的信息。由于证书的信息是以证书文件(.cer)的形式存储的,且不会导入密钥库,因此在执行该命令时,不需要指定相关的密钥库和密码。
范例3ˉ26给出了如何显示一个二进制证书文件的内容。
范例3ˉ26 显示证书内容
创建证书签发请求(CSR)。可以使用Keytool选项ˉcertreq来生成向CA申请证书的证书签发请求。在范例3ˉ27中,选项ˉcertreq创建了一个用于申请证书的CSR,并将其放在名为certreq file.csr的文件中。该文件将被发送到CA以进行验证。如果CA认为该证书有效,那么便生成证书应答并将其放在名为cert reply.cer的文件中。然后,CA将该文件返回请求方,其中包含对文件certreq file.csr所提交的证书签发请求的审核结果。
范例3ˉ27 创建证书签发请求
删除密钥库。要删除密钥库,可以使用操作系统的删除命令来删除该密钥库文件。
修改密钥库的密码。要修改密钥库的密码,可以使用keytool选项ˉstorepasswordˉnew来设置新密码(参见范例3ˉ28)。
范例3ˉ28 修改密钥库的密码
范例3ˉ28给出了如何将密钥库mykeystroe的密码mystorepass改为newstorepass。
0 0
原创粉丝点击