keytool和jarsigner

说明

在以前做applet(现在很少用)的时候,用到了java的密钥和数字证书管理工具keytool,jar签名和校验工具jarsigner,当时懵懵懂懂,现在读了一些文章后稍微清楚了一点点,所以把对于它们的一点个人理解记录下来。

keytool

keytool:它管理一个存储了私钥和验证相应公钥的与它们相关联的X.509 证书链的密钥库。密钥库中的一条证书(可以包含多条证书条目)可以导出为数字证书文件,导出的数字证书文件只包含主题信息和对应的公钥

在命令行中输入“keytool   –genkeypair”将自动使用默认的算法生成公钥和私钥,并以交互方式获得公钥持有者(证书持有者)的信息。

C:/>keytool -genkeypair
输入keystore密码:  
123456
您的名字与姓氏是什么?
[Unknown]:gjb.com
您的组织单位名称是什么?
[Unknown]:
您的组织名称是什么?
[Unknown]: 
您所在的城市或区域名称是什么?
[Unknown]:   
您所在的州或省份名称是什么?
[Unknown]:
该单位的两字母国家代码是什么
[Unknown]: 
等等

以上操作将生成一个公钥和一个私钥,这里并未指定使用何算法,将使用默认的DSA算法。

同时上述操作将创建一个数字证书,证书中包含了新生成的公钥和一个名字为“CN=gjb.com, OU=, O=, L=, ST=, C=”的主体(人或机构)的对应关系。其中“CN=gjb.com, OU=, O=, L=, ST=, C=”是X.500格式的全名,包含了主体的国家、州、城市、机构、单位和名字。这样,这个证书将证明相应的公钥是这个人或机构所拥有的。

以上生成的公钥、私钥和密钥库默认都保存在用户的主目录中创建一个默认的文件“.keystore”中。

由于“.keystore”中包含了私钥,所以是一个需要保密的文件,因此上述操作提示为该文件设置一个密码:“输入密钥库密码”,这里因为是第一次使用该密钥库,因此输入的密码“123456”将成为该默认的密钥库的密码(实际使用时应该设置复杂的口令)。以后再使用这个密钥库时必须提供这个口令才可以使用。

以上操作最后还提示“输入密钥密码”,这里“mykey”是默认的别名,使用该名字可以在密钥库“.keystore”中找到对应的公钥、私钥和证书。此处输入的密码是对应于该别名的私钥的密码,密钥库中每个别名可以使用不同的密码加以保护。密钥库中可以存放多个条目(公钥/私钥对和证书),它们在密钥库中以别名(alias)区分,默认别名是“mykey”。


例子:生成密钥库和导出证书

1、keytool -genkeypair -alias "a" -keyalg "RSA" -keystore "b.keystore" -validity 36500
2、keytool -export -alias a -keystore b.keystore -file c.crt

jarsigner 

jarsigner 工具用于两个目的:
为 Java 归档 (JAR) 文件签名
校验已签名的 JAR 文件的签名和完整性
数字签名是从一个实体(人、公司等)的某些数据(正被“签名”的数据)和私钥计算出来的位串。与手写的签名一样,数字签名有很多有用的特性:
其真实性可被校验,方法是使用与生成签名的私钥对应的公钥进行计算。
它不可能被伪造(假设私钥没有泄露)。
它是已签名数据的函数,因此不能被声明为其它数据的签名。
已签名的数据不能被修改;如果被修改了,签名将不再被校验为可信的。
为了给文件生成实体的签名,该实体首先必须与一对公/私钥相关联,以及一个或多个鉴别其公钥的证书。证书是来自一个实体的已被数字签署的声明,表示某个其它实体的公钥有特定值。
jarsigner 使用来自密钥仓库的密钥和证书信息为 JAR 文件生成数字签名。密钥仓库是私钥及其相关的 X.509 证书链(它鉴别相应公钥)的数据库。使用 keytool 实用程序来创建和管理密钥仓库。jarsigner 使用实体的私钥创建签名。

经签名的Jar包内包含了以下内容:

1、原Jar包内的class文件和资源文件签名文件 

2、META-INF/*.*SF:这是一个文本文件,包含原Jar包内的class文件和资源文件的Hash

3、签名块文件 META-INF/*.DSA:这是一个数据文件,包含签名者的 证书和数字签名。其中 证书包含了签名者的有关信息和 public key;数字签名是对 *.SF 文件内的 Hash 值使用 private key 加密得来

arsigner 的缺省行为是签名 JAR (或 zip)文件。使用 -verify 选项将其转换为校验已签名的 JAR 文件。


有问题可以参考这篇文章:http://blog.csdn.net/yangxt/article/details/1796965

你可能感兴趣的:(keytool和jarsigner)