2009-06-09 50 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文件的類。安全並不一定容易。

僅顯示證書對話框不應被解釋爲意味着網頁的全部內容將被信任。

相關問題