Java虚拟机体系结构 - JAR包的签名与认证

来源:互联网 发布:淘宝信誉查询客户达 编辑:程序博客网 时间:2024/06/17 01:38

       要对一段代码作担保或者签名,必须首先生成一个公钥/私钥对。用户应该保管那把私钥而把公钥对外公开,然后将要签名的class文件和其它文件放到一个JAR文件中,使用工具jarsigner对整个JAR文件签名。

数字签名的第一步是单向散列(详见图1-1);输入(jar文件)和散列的组合并不安全,因为黑客可以方便地将输入和散列一起替换掉,为了防止这种情况,必须在发送前,用私钥对散列进行加密(加密只对散列进行而不是整个JAR)。


图1-1 对一个Jar文件数字签名

在产生散列值并用私钥对它签名后,随后需要将这个加密后的散列值加到同一个JAR文件(签名后的JAR文件还包含了最初产生这个散列的文件以及签名后的散列)。

        但是公钥的发布应该采取哪种通信方式才能保证不被篡改或者偷偷替换了?为了解决公钥发布的困难,建立了许多证书机构来为这些公钥做担保。发布公钥的机构可以申请证书机构对其公钥进行签名,最终得到的数字序列被称为证书,发布公钥的机构可以发布他的证书而不是他的公钥。当你获得证书以后,可以通过证书机构发布的公钥对证书进行解密从而得到发布公钥机构的公钥。这种证书模式使得黑客可以替换公钥的可能性更小了,因为黑客必须得到证书机构的私钥(伪造证书需要私钥)。

        最后,对JAR文件签名后,必须保证不要让那些意图不轨的人得到你的私钥,也就是说,你必须记住keystore的密码并确保你的keystore文件不被丢失;而且要让使用你JAR包的人得到你的公钥(为了确保发布的公钥的安全性,可以去认证机构申请证书)。

举例:

产生密钥对:keytool –genkey–alias friend –keypass friend4life –validity 1000 –keystore ijvmkeys    //为别名friend产生friend4life的密钥对,这个过程将生成一个名为ijvmkeys的keystore文件,而密钥对就存放在其中,对该文件访问或修改时都需要这个keystore密码(ijvm2ed)。

对JAR文件签名:jarsigner –keystore ijvmkeys –storepass ijvm2ed–keypass friend4life friend.jar friend

 

0 0
原创粉丝点击