探索 Eclipse 的外掛程式簽名機制

來源:互聯網
上載者:User

在為軟體安裝外掛程式時,安全性是一個很重要的問題。本文探索在 Eclipse 平台上使用的簽名技術,確定外掛程式的可信度。Eclipse 將外掛程式分為 5 類:簽名的、未簽名的、可信的、不可信的、到期的。通過本文學習如何在 Eclipse 和 IBM Lotus Expeditor(基於 Eclipse 的產品)中建立帶簽名的外掛程式。

本文介紹了 Eclipse 外掛程式簽名及其應用。此外,還介紹了 IBM Lotus Expeditor 客戶機供應系統(用於控制碼對本地或遠程 Eclipse 更新網站的訪問)所使用的測試策略。

簽名是 Eclipse 安全功能不可或缺的機制。在外掛程式下載期間,Eclipse 使用者可以驗證發布到更新網站上的 JAR 檔案簽名。這使使用者能夠獲得將要安裝的代碼的可靠資訊。該功能使使用者能夠識別代碼的發行者,以及驗證它在上傳到更新網站之後是否被修改過。IBM Lotus Expeditor/Lotus Notes 通過它的 Update Manager 組件使用這一安全機制,為使用者提供一個簽名檢查。

先決條件

為了從本文獲得最大的收益,您需要使用 Eclipse 開發環境和範例代碼。如果您還沒有 Eclipse,請下載:

Java 2 Standard Edition
可從 Sun Microsystems 獲得 Java 2 Standard Edition V5 或更新版本。
Eclipse
在 Eclipse Foundation 上可以找到 Eclipse 平台。如果要使用另一個測試平台,請下載 IBM Lotus Expeditor V6.1.x,但這是可選的。

查看 參考資料 小節擷取 Eclipse 和 Java JDK。從 下載 小節擷取範例代碼。


背景

Eclipse 外掛程式根據以下 5 種數位簽章進行分類:

未簽名外掛程式
預設情況下,Eclipse 產生的所有外掛程式都是未簽名的。
簽名外掛程式
對未簽名外掛程式進行簽名之後,它就變成簽名外掛程式。
可信外掛程式
如果一個簽名外掛程式使用的是可信簽名,Eclipse 運行時將信任該外掛程式。因此,它就是一個可信外掛程式。
不可信外掛程式
這種簽名外掛程式使用的是不可信簽名。
到期外掛程式
所有簽名外掛程式都有一個有效期間。外掛程式封裝在 JAR 檔案中並且帶有簽名,但用於為 JAR 檔案簽名的認證已經到期,這種外掛程式稱為到期外掛程式。

圖 1. 外掛程式的分類


實現和測試情境

學習如何使用 Eclipse、Keytool 和 Jarsigner 產生未簽名的、不可信的和到期的外掛程式,然後在 Eclipse 運行時和 IBM Lotus Expeditor 運行時中驗證它們。讓我們從一個未簽名外掛程式開始。

未簽名特性

預設情況下,由 IDE(比如 Eclipse)產生的外掛程式屬於未簽名外掛程式。例如,我們通過以下步驟建立一個未簽名外掛程式:

  1. 單擊 File > New > Project…> Plug-in Development > Plug-in project,然後單擊 Next。
  2. 在項目名欄位中輸入 HelloWorld,其他選擇預設設定,然後單擊 Next。
  3. 在隨後的 Plug-in Content 嚮導頁面中單擊 Next 按鈕。
  4. 選擇 HelloWorld 並在 Template 嚮導頁面中單擊 Finish 按鈕。
  5. 單擊 File > New > Project…> Plug-in Development > Feature project,接著單擊 Next。
  6. 在 Project name 欄位中輸入 HelloWorld.feature,其他採用預設設定,然後單擊 Next。
  7. 選擇剛才在 Referenced Plug-ins and Fragments 嚮導頁面中建立的 HelloWorld 外掛程式,然後單擊 Finish。
  8. 單擊 File > New > Project…> Plug-in Development > Update Site project,接著單擊 Next。
  9. 在項目名欄位中輸入 HelloWorld.updatesite,其他採用預設設定,然後單擊 Finish。
  10. 單擊 Add Feature… 按鈕,選擇 HelloWorld.feature,並單擊 OK。
  11. 單擊 Build 在本地檔案系統中產生更新網站檔案。
  12. 驗證剛才在工作空間中建立的更新網站。

通過以上的 12 個步驟,我們建立了一個 HelloWorld 範例外掛程式、一個 HelloWorld 特性,以及一個用來封裝它們的 HelloWorld 更新網站。

圖 2. 外掛程式的種類

我們使用 Eclipse Update Manager 通過以下步驟驗證它的身份:

  1. 單擊 Help > Software Update > Find and Install …。
  2. 選擇 Search for new feature to install 並單擊 Next。
  3. 單擊 New Local Site … 按鈕,導航到 HelloWorld 更新網站並單擊 OK。
  4. 單擊 Finish。

我們將收到一個 “unsigned feature” 通知,警告我們這個特性沒有簽名,並且無法驗證其提供者。

圖 3. 在 Eclipse 中驗證未簽名的外掛程式

如果使用相同的步驟安裝該外掛程式,IBM Lotus Expeditor(一個基於 Eclipse 的強大平台)也會顯示類似的警告訊息。使用者可以通過單擊選項按鈕選擇接受或拒絕該外掛程式,如下所示。

圖 4. 在 IBM Lotus Expeditor 中驗證未簽名外掛程式的測試情境

未簽名特性

代碼完整性的目標就是確定代碼在安裝之前未被修改。要實現這一目標,我們使用兩個工具 + 生產力:Keytool 和 Jarsigner。

Keytool 是一個用來管理密匙和認證的命令列工具。認證是指來自某一實體(比如,個人、公司、電腦和程式等)的數位簽章語句,它說明其他一些實體的公用密匙(或其他資訊)有一個特定的值。Keytool 當前處理 X.509 憑證。X.509 憑證包括 Version、Validity Period、Subject Name(普通名稱,組織部門,組織和國家)等。密匙和憑證存放區在 keystore 中,它實際上是一個檔案。它通過密碼保護私人密匙。

Jarsigner 是另一個用於為 JAR 檔案簽名並驗證簽名的工具 + 生產力。為了驗證 JAR 檔案中的數位簽章,Jarsigner 將擷取隨 JAR 檔案附帶的認證,然後根據特定的 keystore 檢查該認證的公用密匙是否可信。我們將在本文中使用 Jarsigner 的簽名和驗證功能。

首先,我們使用 Keytool 建立一個 keystore,它包含一對密匙(公用密匙和私人密匙)。發出以下命令。

清單 1. 建立一個 keystore

keytool -genkey -dname "cn=Li Xing Xing, ou=CDL, o=IBM, c=CN" -alias business -keypass  key123 -keystore C:/keystore/mykeystore -storepass store123 -validity 180

該命令完成以下任務:

  • 它在 C:/keystore 目錄中建立一個名為 mykeystore 的 keystore 檔案,並為它分配一個密碼 store123。keystore 的預設類型是 jks。
  • 它為一個實體產生公用/私人密匙對。該實體的普通名稱的 Distinguished Name 值是 “Li Xing Xing”,組織部門是 “CDL”,組織是 “IBM”,國家是 “CN”。密碼 key123 分配給私人密匙。keystore 中將包含一個名為 “business” 的實體。
  • 它使用預設的 DSA 密匙產生演算法,並建立兩個 1024 位(預設長度)的密匙。
  • 它使用預設的簽名演算法(SHA1 和 DSA)建立一個帶有自我簽名的認證,有效期間為 180 天。

相應地,將在目標檔案夾中建立一個名為 mykeystore 的檔案。

圖 5. 產生的 Mykeystore

建立一個帶有自我簽名的認證之後,我們將通過下面的 Jarsigner 命令使用它為 feature.jar 和 plugin.jar 簽名,如清單 2 和清單 3 所示。在這裡,我們以 jarsigner [options] jar-file alias 命令格式使用 Jarsigner 的簽名功能。我們在選項欄位中提供 keystore 檔案的位置、keystore 密碼和私人密匙密碼。

清單 2. 為特性 JAR 檔案簽名

jarsigner -keystore C:/keystore/mykeystore -storepass store123 -keypass key123  C:/workspace/HelloWorld.update/features/HelloWorld.feature_1.0.0.jar business

清單 3. 為外掛程式 JAR 檔案簽名

jarsigner -keystore C:/keystore/mykeystore -storepass store123 -keypass key123 C:/workspace/HelloWorld.update/plugins/HelloWorld.feature_1.0.0.jar business

因為有效期間為 180 天,所以您將收到 6 個月後簽署憑證將到期的警告。 6 和圖 7 中的最後一行所示。

圖 6. 為特性 JAR 檔案簽名時收到的警告

圖 7. 為外掛程式 JAR 檔案簽名時收到的警告

通過運行以上兩個命令,特性 JAR 檔案和外掛程式 JAR 檔案會發生什麼變化呢?在 HelloWorld.feature_1.0.0.jar 和 HelloWorld_1.0.0.jar 中開啟 META-INF 檔案夾,您將看到添加了兩個檔案 — 即 BUSINESS.SF 和 BUSINESS.DSA, 8 所示。

圖 8. META-INF 檔案夾中的 BUSINESS.DSA 和 BUSINESS.SF

事實上,未簽名和簽名外掛程式的區別就是多了這兩個檔案:.SF 和 .DSA。我們先探討 BUSINESS.SF 檔案。這是 JAR 檔案的簽名檔案,它內部的資訊根據 RFC822 標準以名稱值對的形式顯示。簽名者由帶有副檔名 .SF 的簽名檔案表示。主要部分的條目 x-Digest-Manifest-Main-Attributes(x 是摘要演算法,比如 SHA1)包含資訊清單檔的主要屬性的摘要值。比如以 Base64 表示的嵌入式資料,這是一種使用 Internet 加密和傳輸 8 位位元組的流行技術。表 1 列出了特性 JAR 檔案和外掛程式 JAR 檔案中的 BUSINESS.SF 檔案的樣本內容,包括版本、簽名演算法、JVM 和摘要資訊。

表 1. 特性 JAR 檔案和外掛程式 JAR 檔案中的 BUSINESS.SF 檔案

特性 JAR 外掛程式 JAR
Signature-Version: 1.0
SHA1-Digest-Manifest-Main-Attributes: wo/L6RyS5cmXUyjSULsCmbi//pc=
Created-By: 1.5.0 (IBM Corporation)
SHA1-Digest-Manifest: Hw4sDi+lK9Lk+yxEsiIBU4k8fdQ=

Name: feature.xml
SHA1-Digest: OOwzec1mVb8PGpLLjSy52QfDiR4=

Signature-Version: 1.0
SHA1-Digest-Manifest-Main-Attributes: Njf5Vhqe3paGaU+YpcW3RRd+nCg=
Created-By: 1.5.0 (IBM Corporation)
SHA1-Digest-Manifest: 2I/i8WO/wARcxqiOcs1ukjmquhA=

Name: helloworld/Activator.class
SHA1-Digest: fHk5c6yYAWPNvgZYLAENX/00axE=

BUSINESS.DSA 檔案正好相反,它是一個更加複雜的二進位簽名檔案。這個簽名塊檔案儲存體相應的簽名檔案的數位簽章。如您所見,BUSINESS.DSA 檔案和 BUSINESS.SF 檔案使用相同的基底檔案名稱,但副檔名不同。實際上,還可以選擇 .RSA 和 .PGP 作為二進位簽名檔案的副檔名,這取決於所使用的演算法。圖 9 顯示了 BUSINESS.DSA 中包含的內容,以及使用文文書處理器(我們使用 UltraEdit)轉換後的一些可讀資訊。這意味著您可以看到一些文字字串,比如 “CN”、“IBM”、“Lotus Expeditor” 和 “Li Xing Xing”。但是不能看到完整的資訊。這就是簽名的奇妙之處。

圖 9. BUSINESS.DSA 內容

在安裝外掛程式 JAR 檔案之前,我們可以使用 jarsigner -verify 命令驗證它的簽名。針對帶簽名的外掛程式 JAR 檔案發出以下命令,並擷取響應。 10 所示。-verbose 和 –certs 選項將在驗證期間顯示詳細的輸出和認證。

清單 4. 使用 Jarsigner 命令驗證帶簽名的外掛程式 JAR 檔案

jarsigner -keystore C:/keystore/mykeystore –storepass store123 –verify –verbose–certs C:/workspace/HelloWorld.update/plugins/HelloWorld_1.0.0.jar

圖 10. 使用 Jarsigner 命令驗證外掛程式簽名

當您使用 Jarsigner 的命令進行驗證時,它將列出並驗證 HelloWorld_1.0.0.jar 檔案中的簽名的基本資料和到期資訊。

現在,嘗試通過帶簽名的外掛程式安裝嵌入的更新網站。您將收到通知 “You are about to install a signed feature”,並且顯示自我簽署憑證的詳細資料。 11 所示。

圖 11. 在 Eclipse 中驗證帶簽名外掛程式的測試情境

與未簽名外掛程式相比,使用者更傾向於信任帶簽名的外掛程式。當這樣的簽名外掛程式安裝到 IBM Lotus Expeditor 之後,將彈出一個類似的警告視窗,提醒使用者有 3 種處理方式可供選擇。

圖 12. 在 IBM Lotus Expeditor 中驗證帶簽名外掛程式的測試情境

如果您單擊 View Certificate Details…,將列出認證詳細資料 — Version、Issued by、Issued to 和 Signature Algorithm, 13 所示。IBM Lotus Expeditor 提供更多的資訊以鼓勵使用者信任該外掛程式。

圖 13. 簽名外掛程式中的簽署憑證的詳細內容

帶有到期簽名的特性

根據圖 11 中提供的資訊,我們知道自我簽署憑證的有效期間是 02-13-2009。如果將我們的作業系統時間更改為 02-14-2009( 14 所示),該簽名外掛程式將因為 “EXPIRED CERTIFICATE” 而到期。

圖 14. 更改作業系統的系統時間

現在,我們可以使用一個 Jarsigner 命令驗證簽名,其結果是外掛程式帶有簽名,但已經到期。請注意圖 15 中的最後一個句子。

圖 15. 通過 Jarsigner 命令驗證外掛程式的到期簽名

如果使用更新管理器將這個外掛程式安裝到 Eclipse 運行時,Eclipse 將通知您外掛程式帶有簽名,但已經到期, 16 所示。這是因為 Eclipse 檢測到作業系統的當前日期(02-14-2009)已經超出有效期間的範圍(02-13-2009).因此,反白 “EXPIRED CERTIFICATE”,警告使用者存在潛在風險。儘管外掛程式的簽名已經到期,使用者仍然可以單擊 Install 或 Install All 按鈕安裝外掛程式。這取決於使用者。

圖 16. 在 Eclipse 中驗證到期外掛程式的測試情境

圖 17 展示了針對該外掛程式的類似的到期認證通知。當將這樣的外掛程式安裝到 IBM Lotus Expeditor 時,將彈出這個通知。

圖 17. 在 IBM Lotus Expeditor 中驗證到期外掛程式的測試情境


結束語

Eclipse IDE 和 IBM Lotus Expeditor 有效地將簽名安全機制應用到它們的供應子系統中,從而在將外掛程式部署到終端使用者案頭時增強它的安全性。本文探索外掛程式簽名機制的要點,包括外掛程式的分類、建立和驗證策略。本文介紹的範例外掛程式(未簽名的、簽名的和到期的)適用於其他需要安全驗證的基於 Eclipse 的產品。(

 

 

備忘:本文轉載自:http://www.linuxeden.com/html/sysadmin/20081225/63260.html

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.