给JAR签名

来源:互联网 发布:不出门便知天下事英语 编辑:程序博客网 时间:2024/05/17 07:28
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
生产商业系统的开发者会购买证书来签名他们的JAR,一般的开发者则可以用匿名证书来签名他们的JAR<A TARGET="_top" HREF="http://ad.cn.doubleclick.net/click%3Bh=v2|3079|3|0|%2a|r%3B6693521%3B0-0%3B0%3B8647183%3B4252-1|1%3B3912994|3930890|1%3B%3B%7Efdr%3D6730219%3B0-0%3B0%3B6694709%3B31-1|1%3B3943835|3961731|1%3B%3B%3fhttp://www.oracle.com/go/?&Src=2527622&Act=36"></A>

JAR签名需要两个工具:你要用keytool来创建一个密匙,然后用JARSigner来用此密匙为JAR签名。可以用同一个密匙来为一个公司或一个开发者的所有JAR签名

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

下面是一个使用keytool的例子。在实际应用中,请确保你用了可靠的的keypasskeystore的密码。后面为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的安全模型。


 

<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
原创粉丝点击