密码签名管理
在Java程序中Sun公司提供了两个管理加密签名的工具:keytool和jarsigner(JAR签名和验证工具)。jarsigner用于签名JAR文件,它用指定的符号连接指定的程序。keytool和jarsigner取代了JDK1.1中的javakey。第三个工具policytool在Java2中用于管理安全策略。
Jarsigner
同JDK一起发布的jarsigner应用程序完成两个功能:签名JAR文件,并校验JAR文件中的签名。JAR代表Java文档(Java Archive)。它实际上是一种支持签名的.zip文件。用jarsigner签名,就可以用证书保证文件内容的安全。
通常签名的JAR文件用于发布签名的Applet,但也可用于发布其他可信代码。一个软件开发人员可以分发签名的JAR文件,该文件直接从该开发人员那里获得,并且不会被第三方修改。
Applet通常被签名,以便授予一定特权,比如读写本地文件系统。
给JAR文件签名
1、打包jar的命令 jar cvf HelloWorld.jar HelloWorld.class
2、为该jar进行签名
- 生成密钥对(默认保存在用户目录的.keystore密钥库中)
keytool -genkey -alias mykey
- 给jar签名
jarsigner HelloWorld.jar mykey
3、校验jar文件 jarsigner -verify -verbose HelloWorld.jar
签名的JAR文件
一个JAR文件就是许多文件的简单集合。当一个JAR文件被签名,它就不再是原先JAR文件,而是它其中的部分或全部文件。也就是说签名的JAR文件不能保证其中所包括的所有东西是有用的。用Winzip之类工具可以在不破坏签名的情况下往签名的JAR文件中增加文件,而且修改其中的文件不会影响别的文件。签名必须保存在JAR文件中,并含有一些额外信息,如信息摘要、签名信息。这些信息用下述形式表示:
- 清单文件 META-INF\MANIFEST.MF(包括签名文件的名字和杂凑)
- 签名文件 META-INF\SIGNER.SF(包括清单中的摘要以及清单每个实体的摘要)
- 数字签名文件 META-INF\*.DSA(*.RSA)具体是哪一个取决于签名算法,它是.SF文件中使用PKCS#7格式的数字签名,这个文件使用二进制格式,所以是不可读的。