为什么要签署我的JAR文件?
我知道我需要签署我的客户端JAR文件(包含Applet),以便可以完成文件系统访问等特殊操作,以便窗口底部的烦人位不会显示,但为什么还要显示?我是否需要签署包含Servlet等的服务器端JAR文件?
关于何时以及何时不签署JAR的一些基本规则将不胜感激 - 谢谢!
答案 0 :(得分:40)
简短的回答 - 不要,除非你的公司政策强迫你。
答案很长 签署罐子有效地告诉你的客户“我做了这个,我保证它不会搞砸你的系统。如果确实如此,请来找我报复”。这就是为什么从远程服务器(applets / webstart)部署的客户端解决方案中的签名jar比非签名解决方案享有更高的权限。
在服务器端解决方案中,您无需安抚JVM安全需求,此保证仅供您的客户放心使用。
签名罐子的坏处是它们的加载速度比无符号罐子慢。慢多少?它受CPU限制,但我注意到加载时间增加了100%以上。此外,补丁更难(您必须重新签署jar),类补丁是不可能的(单个包中的所有类必须具有相同的签名源)并且拆分jar变成一件苦差事。更不用说你的构建过程更长,而且正确的证书需要花钱(自签名是无用的)。
因此,除非您的公司政策强制要求,否则不要在服务器端签名罐子,并将常见的罐子保存在签名和非签名版本中(签名转到客户端部署,非签名转到服务器 - 代码库)。
答案 1 :(得分:2)
一个很好的理由可能是,如果你从未希望任何人能够潜入修改过的类来被你的代码调用。
不幸的是,包括你自己:-D所以只有你真的需要它才能做到这一点。检查“密封罐”的概念。
答案 2 :(得分:1)
签署一个jar文件,就像在其他环境中使用证书一样,这样就可以让使用它的人知道它来自哪里。人们可能相信Chris Carruthers不会编写恶意代码,所以他们愿意允许你的applet访问他们的文件系统。签名给了他们保证罐子真的是由你创造的,而不是由冒名顶替者或他们不信任的人创造的。
对于服务器端或库坛,通常不需要向任何人提供这种保证。如果它是你的服务器,那么你就知道你正在使用什么罐子以及它们来自哪里,你可能相信你自己的代码不是恶意的。
答案 3 :(得分:1)
就applet而言:从6u10开始,Sun JRE用不那么突兀(来自6u12,IIRC)警告三角形(支持形状和透明窗口所必需)替换警告横幅。 6u10还允许通过JNLP服务API进行受控文件访问。
最小特权原则说你不应该签署jar文件的类。安全性并不一定容易。
简单地显示证书对话框不应被解释为意味着要信任网页的全部内容。