2009-06-09 58 views
40

我为什么要签署我的JAR文件?我为什么要签署我的JAR文件?

我知道我需要签署我的客户端JAR文件(包含Applets),以便像文件系统访问这样的特殊事情可以完成,并且让窗口底部的烦人位不显示,但为什么其他?我是否需要签署包含Servlets等的服务器端JAR文件?

有关何时何时不签名JAR的一些基本规则将不胜感激 - 谢谢!

+0

http:// stackoverflow的副本。com/questions/3327020 /什么是签署代码类的jar包? – Dan 2012-01-21 16:51:07

回答

36

简短的回答 - 不要,除非你的公司政策强制你。

长的回答
签名罐子有效地告诉你的顾客“我做到了这一点,我保证它不会搞乱你的系统,如果有的话,来找我报仇”。这就是为什么从远程服务器(applets/webstart)部署的客户端解决方案中的已签名罐子享有比未签署解决方案更高的特权。

在服务器端解决方案中,您无需安抚JVM安全需求,这一保证仅供客户安心使用。
签名瓶子的坏处是它们的加载速度比未签名的瓶子慢。慢多少?它受CPU限制,但我注意到加载时间增加了100%以上。而且,补丁更难(你必须重新签名jar),class-patches是不可能的(一个包中的所有类都必须具有相同的签名源),并且拆分jar变成一件杂事。更不用说你的构建过程更长,并且正确的证书花钱(自签名旁边没用)。

所以,除非你的公司政策强制你,不要在服务器端签名jar,并且保持签名和非签名版本中的常见jar(签名转到客户端部署,非签名转到服务器端代码库)。

+0

为什么它受CPU限制?我认为检查CRL是一项在线行为,很大程度上取决于互联网连接速度,可能主要集中在那里的延迟。 – 2015-03-16 13:53:31

0

签名jar文件就像在其他上下文中使用证书一样完成,以便使用它的人知道它来自哪里。人们可能会相信Chris Carruthers不会编写恶意代码,因此他们愿意允许您的小程序访问其文件系统。签名给了他们一定的保证,这个罐子真的是你创造的,而不是由冒名顶替者或他们不信任的人创造的。

对于服务器端或库罐,通常不需要为任何人提供这种保证。如果它是你的服务器,那么你知道你使用的是什么,以及它们来自哪里,并且你可能相信你自己的代码不是恶意的。

2

一个很好的理由可能是,如果你从来不想让任何人能够潜入你的代码调用的模拟类中。

不幸的是,包括你自己:-D所以这只是如果你真的需要它。检查“密封罐”的概念。

1

在小程序方面:从6月10日起,Sun JRE用更少突兀的(来自6u12,IIRC)警告三角(用于支撑形状和透明窗口)替换警告标语。 6u10还允许通过JNLP服务API进行受控文件访问。

最小权限原则说你不应该签署你的jar文件的类。安全并不一定容易。

仅显示证书对话框不应被解释为意味着网页的全部内容将被信任。