3.8一个代码签名示例

这些类型(Doer、Friend和Stranger)是为了说明访问控制的栈捡查机制而设计的。在本章后 面将给出一些栈检査的例子,那时读者就会理解设计它们的目的。

为了用Java 2 SDK 1.2中的jarsigner工具对JAR文件进行签名,keystore文件中必须存储签名者的公钥/私钥对,这个文件用来存储已命名的、受密码保护的密钥。Java 2 SDK 1.2中的keytool程序可用来生成新的密钥对,将这个密钥对和一个名称(或别名)相关联,并且用密码将它们保护起来。这个别名在每一个keystore文件中都是独立的,它用于在一个特定的keystore文件中 识别一个特定的密钥对。要访问或者修改包含在keystore文件中的密钥对的信息,必须要有这个密钥对的密码。

这个访问控制的例子需要在security/ex2目录下的名为ivjmiceys的keystore文件,这个文件中包含别名为“friend"和“stranger"的两个密钥对。在security/cx2目录下运行下面的命令,将为别名friend产生密码为friend4life的密钥对。在这个过程中,它将生成一个名为ijvmkeys的keystore文件:

keytool -genkey -alias friend -keypass friend4life
-validity 10000 -keystore ijvmkeys

在这个keytool命令中,-validity 10000这个命令行参数说明了这个名密钥对将在10000天之内有效,相当于27年多,这个时间应该足够长的。当命令运行时,它将产生—个keystore密码,在对这个keystore文件进行任意访问或修改时都需要这个keystore密码。赋给ijvmkeys的密码是“ijvm2ed”。

既然现在keystore文件ijvmkeys包含了friend和stranger的密钥对,而且JAR文件friend.jar和 stranger.jar包含了合适的class文件,JAR文件就可以被最终签名了。在example/ext目录下执行下面的jarsigner命令,将用friend的私钥对包含在friend .jar文件中的class文件进行签名:

jarsigner -keystore ijvmkeys -storepass ijvn2ed -keypass frlend41ife friend.jar friend

 

posted @ 2019-12-03 20:35  mongotea  阅读(201)  评论(0编辑  收藏  举报