清单1.签名JAR中的Manifest和signature文件
Contents of signature file META-INF/MANIFEST.MF
Manifest-Version: 1.0
Created-By:1.3.0(Sun Microsystems Inc.)
Name: Sample.java
SHA1-Digest: 3DdYW8INICtyG8ZarHlFxX0W6g=
Name: Sample.class
SHA1-Digest: YJ5yQHBZ3SsTNcHJFqUkfWEmI=
Contents of signature file META-INF/JAMES.SF
Signature-Version: 1.0
SHA1-Digest-Manifest: HBstZOJBuuTJ6QMIdB90T8sjaOM=
Created-By:1.3.0(Sun Microsystems Inc.)
Name: Sample.java
SHA1-Digest: qipMDrkurQcKwnyIlI3Jtrnia8Q=
Name: Sample.class
SHA1-Digest: pT2DYby8QXPcCzv2NwpLxd8p4G4=
数字签名
一个数字签名是.SF签名文件的已签名版本。数字签名文件是二进制文件,并且与.SF文件有相同的文件名,但是扩展名不同。根据数字签名的类型-- RSA、DSA或者PGP --以及用于签名JAR的证书类型而有不同的扩展名。
Keystore
要签名一个JAR文件,必须首先有一个私钥。私钥及其相关的公钥证书存储在名为keystores的、有密码保护的中。JDK包含创建和修改keystores的工具。keystore中的每一个密钥都可以用一个别名标识,它通常是拥有这个密钥的签名者的名字。
所有keystore项(密钥和信任的证书项)都是用唯一别名访问的。别名是在用keytool -genkey命令生成密钥对(公钥和私钥)并在keystore中添加项时指定的。之后的keytool命令必须使用同样的别名引用这一项。
例如,要用别名“james”生成一个新的公钥/私钥对并将公钥包装到自签名的证书中,要使用下述命令:
这个命令序列指定了一个初始密码“jamespass”,后续的命令在访问keystore “jamesKeyStore”中与别名“james”相关联的私钥时,就需要这个密码。如果keystore“jamesKeyStore”不存在,则keytool会自动创建它。
jarsigner工具
jarsigner工具使用keystore生成或者验证JAR文件的数字签名。
假设像上述例子那样创建了keystore “jamesKeyStore”,并且它包含一个别名为“james”的密钥,可以用下面的命令签名一个JAR文件:
这个命令用密码“jamesKeyStorePass”从名为“jamesKeyStore”的keystore中提出别名为“james”、密码为“jamespass”的密钥,并对Sample.jar文件签名、创建一个签名的JAR -- SSample.jar。
jarsigner工具还可以验证一个签名的JAR文件,这种操作比签名JAR文件要简单得多,只需执行以下命令:
如果签名的JAR文件没有被篡改过,那么jarsigner工具就会告诉您JAR通过验证了。否则,它会抛出一个SecurityException,表明哪些文件没有通过验证。
还可以用java.util.jar和java.security API以编程方式签名JAR(有关细节参阅)。也可以使用像Netscape Object Signing Tool这样的工具。
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/ruanjian/article-41868-5.html
现在国内投资环境是这样的
生产加工和运输流程啊