欢迎进入Java社区论坛,与200万技术人员互动交流 >>进入
C:\java\ch5>keytool genkey alias mytest keyalg RSA keysize 1024 keystore mykeystore validity 4000
输入keystore密码: wshr.ut
您的名字与姓氏是什么?
[Unknown]: Liao Weimin
您的组织单位名称是什么?
[Unknown]: Network Center
您的组织名称是什么?
[Unknown]: Guangzhou University
您所在的城市或区域名称是什么?
[Unknown]: ZB
您所在的州或省份名称是什么?
[Unknown]: Guangzhou
该单位的两字母国家代码是什么
[Unknown]: CN
CN=Liao Weimin, OU=Network Center, O=Guangzhou University, L=ZB, ST=Guangzhou, C=CN 正确吗?
[否]: 是
输入的主密码
(如果和 keystore 密码相同,按回车):
C:\java\ch5>
由于当前目录下没有mykeystore文件,因此以上操作将在当前目录建立文件名为mykeystore的文件,并提示输入一个密码加以保护:“输入keystore密码:”。因为这里使用的密钥库和1.1.1小节及1.1.2小节不是同一个文件,因此这里输入的密码和1.1.1小节及1.1.2小节没有必要一致,这里不妨设置为“wshr.ut”。这样,以后再使用这个密钥库文件时必须提供该密码。
对其中的“输入的主密码”,这里不妨直接按回车键,这样mykeysotre文件中的mytest条目将使用和密钥库相同的密码:“wshr.ut”。
1.2.1 使用Keytool将数字证书导出到文件
★ 实例说明
本实例使用J2SDK提供的keytool工具将指定的证书从密钥库导出为编码过和没编码过两种格式的文件。
★运行程序
使用keytool的export参数可以将别名指定的证书导出到文件,文件名通过file参数指定。如输入如下命令:
C:\java\ch5>keytool export alias liaoweimin2 -file liaoweimin2.cer
输入keystore密码: 123456
保存在文件中的认证
则将默认密钥库中的liaoweimin2条目对应的证书导出到文件liaoweimin2.cer中。由于命令行中没有用storepass给出密码,因此屏幕提示输入keystore密码。由于证书中不包含私钥,因此不需要条目的主密码。
该操作完成后将在当前目录中创建liaoweimin2.cer文件,该文件即是默认密钥库中的liaoweimin2条目对应的证书,它包含了公钥和主体的对应关系,内容也可以公开。
输入如下命令则可以指定密钥库:
C:\java\ch5>keytool export alias lf file lf.cer keystore lfkeystore ?storepass wshr.ut
保存在文件中的认证
该操作完成后将在当前目录中创建lf.cer文件。
如果用文本编辑器打开liaoweimin2.cer或lf.cer,将会发现它是二进制文件,有些内容无法显示,这不利于公布证书。在导出证书时加上-rfc参数则可以使用一种可打印的编码格式来保存证书。如:
C:\java\ch5> keytool export alias mytest file mytest.cer keystore mykeystore -storepass wshr.ut -rfc
保存在文件中的认证
则当前目录下将增加一个文件mytest.cer,其内容是编码过的,可以在屏幕上显示、拷贝或打印。如图5-2所示。(打印内容不同)
1.2.2 使用Keytool从文件中显示证书
★ 实例说明
本实例使用J2SDK提供的keytool工具将1.2.3小节导出的证书文件显示出来。
★运行程序
使用keytool的printcert参数可以将1.2.3小节导出到证书文件详细内容显示出来,文件名称通过file参数指定。如:
C:\java\ch5>keytool printcert file lf.cer
(见自己的屏幕)
对编码过的证书可以同样显示,如:
C:\java\ch5>keytool printcert file mytest.cer
(见自己的屏幕)
1.2.3 在Windows中从文件显示证书
★ 实例说明
本实例在Windows中直接显示1.2.1小节导出的证书文件。
★运行程序
1.2.3小节导出的证书文件中,只要文件名以.cer为后缀,Windows操作系统就可以直接识别。如在Windows中双击lf.cer图标,将出现窗口。其中包含了证书的所有者、颁发者、有效期等信息,这些信息和使用keytool显示出的信息一致。
由于该证书是用自己的私钥对该证书进行数字签名的,即自己给自己签发的证书,因此窗口中显示警告信息:“该证书发行机构根证书没受信任”。
假设您用 jarsigner 工具来签名 Java 归档 (JAR) 文件。需要使用这一文件的客户机将认证您的签名。
认证签名的一种方法是先将您的公钥证书作为“可信任”项导入它们的密钥仓库中。您可以将证书导出并将其提供给客户机。例如,假设项的别名为“mykey”,您可以用以下命令将您的证书导出到名为 MJ.cer 的文件中:
keytool -export -alias mykey -file MJ.cer
有了该证书以及已被签名的 JAR 文件,客户机就可以用 jarsigner 工具来认证您的签名。
更改特征名但保留密钥对
假设,譬如说因为您换了部门或搬到另一个城市去了而改变了您的特征名。如果愿意,您仍然可以使用您先前使用的公钥/私钥对而只对特征名进行更新。例如,假设您的名字叫 Susan Miller,并用别名 sMiller 和以下的特征名创建了初始密钥项:
”cn=Susan Miller, ou=Finance Department, o=BlueSoft, c=us”
假设您从财务部门换到了会计部门。您仍然可使用先前所生成的公钥/私钥对,而用以下方法对特征名进行更新。首先,复制您的密钥项:
keytool -keyclone -alias sMiller -dest sMillerNew
(您将得到要求输入密钥仓库口令和初始密钥口令及目标密钥口令的提示,因为在命令行没有提供这些信息。)现在,您需要更改与复制项关联的证书链以使链中的第一个证书使用您的新特征名。先用相应名称生成自签名证书:
keytool -selfcert -alias sMillerNew
-dname “cn=Susan Miller, ou=Accounting Department, o=BlueSoft, c=us”
然后根据该新证书中的信息生成证书签名请求:
keytool -certreq -alias sMillerNew
当您得到 CA 认证答复后,将其导入:
keytool -import -alias sMillerNew -file VSSMillerNew.cer
导入认证答复后,您也许会要删除使用旧特征名的初始密钥项:
keytool -delete -alias sMiller
将认证后的CA根证书导入密钥库,以便于用这个公钥证书来进行认证签名其它的证书:
keytool -import -trustcacerts -alias zhky -keystore tu.jks -file xtl.cer
[1][2]
不论你在什么时候开始,重要的是开始之後就不要停止