服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

给jar签名


  生产商业系统的开发者会购买证书来签名他们的jar,一般的开发者则可以用匿名证书来签名他们的jar。
为jar签名需要两个工具:你要用keytool来创建一个密匙,然后用jarsigner来用此密匙为jar签名。可以用同一个密匙来为一个公司或一个开发者的所有jar签名

为什么jar要被签名?当用户启动一个java network launching protocol (jnlp,java网络加载协议)文件或使用一个applet时,这个jnlp或applet请求系统提供超过一般的访问。例如,它可能有一个“文件|打开”菜单项用来装载一个.csv文件。进行这样的请求,就需要签名的jar。如果它是匿名的,系统会询问用户是否打算信任jar的签署者。

下面是一个使用keytool的例子。在实际应用中,请确保你用了可靠的的keypass和keystore的密码。后面为jar签名的时候你会需要它们。

〉 keytool -genkey -alias csv -keypass invasion:earth
输入keystore密码: harry:harrison
您的名字与姓氏是什么?
[unknown]: bayard
您的组织单位名称是什么?
[unknown]:
您的组织名称是什么?
[unknown]: generationjava.com
您所在的城市或区域名称是什么?
[unknown]: springfield
您所在的州或省份名称是什么?
[unknown]:
该单位的两字母国家代码是什么
[unknown]: us
〈cn=bayard, ou=unknown, o=generationjava.com, l=springfield, st=unknown, c=us〉正确吗?
[否]: 是

(译者注:原文为英文,此处为译者在中文环境下运行同一命令得到的控制台输出)
完成这一步骤后,keytool将在你的用户目录下产生一个名为.keystore的二进制文件。运行keytool -list将会列出在keystore中的条目。

〉keytool -list
输入keystore密码: harry:harrison

keystore 类型: jks
keystore 提供者: sun

您的keystore 包含 1 输入

csv, tue feb 05 22:49:44 est 2002, keyentry,
认证指纹(md5): e8:fc:38:e3:59:72:0a:86:7f:57:c0:d3:4c:8e:25:fc

(译者注:原文为英文,此处为译者在中文环境下运行同一命令得到的控制台输出)

获得这个密匙后,你只需要提供它的别名来用它为jar签名,这个别名是用keytool产生的。这一步用jarsigner工具来完成:

〉 jarsigner-verbose csv.jar csv
enter passphrase for keystore: harry:harrison
enter key password for csv: invasion:earth
updating: meta-inf/manifest.mf
adding: meta-inf/csv.sf
adding: meta-inf/csv.dsa
signing: com/generationjava/lang/numberw.class
signing: com/generationjava/io/csv.class
...略...还有许多类...
这一步添加了两个文件到你的jar中:meta-inf/csv.sf和meta-inf/csv.dsa。dsa文件包含一个二进制的密匙,而sf文件则包含了jar中所有类的一个列表,和每个文件的sha-1摘要,所以可以验证它们的真实性。

现在你的jar已经被签名了。运行jarsigner -verbose -verify csv.jar可以确定这个jar已经被成功签名,现在你可以更好地控制你的jnlp或applet的安全模型。

扫描关注微信公众号