代码签名的意义是什么,比如JAR文件?

21

为什么要像Java的JAR一样签署你的代码,既然每个人都可以使用jarsigner进行签名?

这种签名提供了哪些安全保障?

3个回答

17

签署JAR文件的目的是为了验证该文件未被篡改。一旦jar文件被签名,您可以验证该文件是否被其他人修改过。这确保该文件源自最初签署的人。如果有人在签名验证过程中修改了文件,则验证失败。您可以参考此文章了解有关如何使用公钥加密执行数字签名的详细信息。


5
当你签署一个jar文件时,你可以展示这是由签署的而不是其他人。
当你签署一个文档时也是同样的道理,只有你可以写下你的签名。其他人可以签署它,但他们会用他们自己的签名,而不是你的签名。
对于手写签名,技艺精湛的伪造者可以学习复制你的签名。使用数字签名,更难以制作副本,因为你需要得到该人的私钥。没有私钥,你无法制作出看起来像他们的签名。

5
签署jar文件将内容与特定证书关联起来。那么这个证书证明了什么?
如果证书的私钥被盗,那么证书就没有什么用处了。有一些防篡改设备可以保护私钥,但通常私钥会保存在开发者的计算机上,这些计算机可能没有得到很好的保护。
证书本身可能由知名的证书授权机构(CA)签署。因此,最终用户对内容的声明来源有一定的信心。验证证书密钥持有人是谁的程度不同。这导致了一场竞争,CAs简化程序以提供更低的价格。
即使是未经验证的证书,使用相同证书签署的不同内容显示出共同的来源。因此,如果您决定信任一个证书,您可以从同一来源接收更多内容,而无需信任其他人。

1
在上述大多数情况下,您指的是私钥而不是证书。 - user207421
@EJP证书是否包括私钥?信任的签名机制并不是我的专业领域。 - Tom Hawtin - tackline
1
您拥有一个包含公钥的公共证书和私钥。在Java密钥库中,私钥也被包装在证书中,但这只是一种实现细节,它从未以这种方式出现,您主要关心的是整个密钥库或(某种方式)私钥的盗窃。谈论证书的盗窃是没有意义的,因为它们是公开的。 - user207421
@EJP 意思明确。虽然我认为常用的说法是使用证书签名。 - Tom Hawtin - tackline
您提供带有签名的公共证书,以便进行验证;即,您提供公钥以便用于验证使用私钥创建的签名;并且您提供证书以建立身份。证书的丢失并不重要,因为它不包含私钥,所以窃贼无法使用它创建更多的签名,即伪造您的身份。 - user207421

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接