簡體   English   中英

為什么要簽署我的 JAR 文件?

[英]Why should I sign my JAR files?

為什么要簽署我的 JAR 文件?

我知道我需要對我的客戶端 JAR 文件(包含小程序)進行簽名,以便可以完成諸如文件系統訪問之類的特殊操作,並且不會顯示 Windows 底部令人討厭的部分,但為什么呢? 我是否需要對包含 Servlet 等的服務器端 JAR 文件進行簽名?

什么時候什么時候不簽署 JAR 的一些基本規則將不勝感激 - 謝謝!

簡短的回答 - 不要,除非您的公司政策強迫您這樣做。

長答案
簽署 jars 有效地告訴您的客戶“這是我做的,我保證它不會弄亂你的系統。如果是,來找我報復”。 這就是為什么從遠程服務器(applet/webstart)部署的客戶端解決方案中的簽名 jar 比非簽名解決方案享有更高的特權。

在服務器端解決方案上,您不必滿足 JVM 安全需求,這種保證只是為了讓您的客戶安心。
簽名 jar 的壞處是它們的加載速度比未簽名 jar 慢。 慢多少? 它受 CPU 限制,但我注意到加載時間增加了 100% 以上。 此外,補丁更難(您必須對 jar 重新簽名),類補丁是不可能的(單個包中的所有類必須具有相同的簽名源)並且拆分 jar 成為一件苦差事。 更不用說您的構建過程更長,並且適當的證書需要花錢(自簽名幾乎沒用)。

因此,除非您的公司政策強制您這樣做,否則不要在服務器端對 jar 進行簽名,並將常見的 jar 保持在簽名和非簽名版本中(簽名轉到客戶端部署,未簽名轉到服務器端代碼庫)。

一個很好的理由可能是,如果您從不希望任何人能夠潛入修改后的類以供您的代碼調用。

不幸的是,這包括你自己 :-D 所以這只有在你真的需要的時候才做。 檢查“密封罐”概念。

簽署一個 jar 文件,就像在其他上下文中使用證書一樣,這樣做是為了讓使用它的人知道它來自哪里。 人們可能相信 Chris Carruthers 不會編寫惡意代碼,因此他們願意允許您的小程序訪問他們的文件系統。 簽名給他們一些保證,罐子確實是由您創建的,而不是由冒名頂替者或他們不信任的人創建的。

在服務器端或庫 jars 的情況下,通常不需要向任何人提供這種保證。 如果它是您的服務器,那么您就知道您使用的是什么 jar 以及它們來自哪里,並且您可能相信自己的代碼不是惡意的。

在小程序方面:從 6u10 開始,Sun JRE 將警告橫幅替換為不那么突兀(來自 6u12,IIRC)警告三角形(必須支持異形和透明窗口)。 6u10 還允許通過 JNLP 服務 API 進行受控文件訪問。

最小權限原則說你不應該對你的 jar 文件的類進行簽名。 安全並不一定容易。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM