为什么要对 JAR 文件进行签名?

2022-09-01 01:07:35

为什么要对 JAR 文件进行签名?

我知道我需要对我的客户端JAR文件(包含小程序)进行签名,以便可以完成文件系统访问等特殊操作,并且不会显示窗口底部的烦人位,但为什么呢?我是否需要对包含 Servlet 等的服务器端 JAR 文件进行签名?

关于何时以及何时不签署JAR的一些基本规则将不胜感激 - 谢谢!


答案 1

简短的答案 - 不要,除非你的公司政策迫使你这样做。

长答案
签名罐有效地告诉你的客户“我做了这个,我保证它不会搞砸你的系统。如果是这样,请来找我报应”。这就是为什么从远程服务器(小程序/webstart)部署的客户端解决方案中的已签名jar比未签名的解决方案享有更高的特权。

在服务器端解决方案上,您不必安抚 JVM 安全需求,此保证仅让您的客户安心。
签名 jar 的坏处在于它们加载速度比未签名 jar 慢。慢多少?它是CPU密集型的,但我注意到加载时间增加了100%以上。此外,补丁更难(你必须对jar进行重新签名),类补丁是不可能的(单个包中的所有类必须具有相同的签名源),拆分jar成为一件苦差事。更不用说您的构建过程更长,并且适当的证书需要花钱(自签名几乎毫无用处)。

因此,除非你的公司策略强制你这样做,否则不要在服务器端对 jar 进行签名,并将常见 jar 保留在已签名和未签名的版本中(已签名的转到客户端部署,未签名的转到服务器端代码库)。


答案 2

一个很好的理由可能是,如果你从来不希望任何人能够偷偷进入被你的代码调用的修改类。

不幸的是,这包括你自己:-D因此,只有在您真正需要它时才能完成此操作。检查“密封罐”概念。


推荐