6


安全性與 MIDlet 簽署

MIDP 2.0 (JSR 118) 包含以保護網域為基礎的全面性安全模型。MIDlet 套件安裝在保護網域中,並由保護網域來決定保護功能的存取權。MIDP 2.0 規格也包含使用公開金鑰加密,來檢驗與驗證 MIDlet 套件的建議方式。

如需確定的資訊,請參閱 MIDP 2.0 規格。如需使用 Sun JavaTM Wireless Toolkit for CLDC 的 MIDlet 簽署簡介,請閱讀「Understanding MIDP 2.0's Security Architecture」文章,該文章可在
http://developers.sun.com/techtopics/mobility/midp/articles/permissions/ 上取得

如需有關公開金鑰加密的詳細背景資料,請閱讀「MIDP Application Security 1: Design Concerns and Cryptography」文章,該文章可在
http://developers.sun.com/techtopics/mobility/midp/articles/security1/ 上取得

這一章描述 Sun JavaTM Wireless Toolkit for CLDC 中保護網域、權限與 MIDlet 簽署的支援。


6.1 權限

MIDlet 必須擁有執行機密性操作的權限,例如與網路連線。權限有特定的名稱,而且 MIDlet 套件可以透過 MIDlet 套件描述元中的屬性,指示是否需要某些權限種類。

您可以按一下 [設定] 按鈕,將這些權限屬性加入專案中。選取 [權限] 圖示。[MIDlet-Permissions] 方塊會顯示 MIDlet 必須擁有的權限,而 [MIDlet-Permissions-Opt] 方塊則包含可選的權限。

圖 6-1 MIDlet 套件權限

已選取左側 [權限] 圖示的「Tiny」專案的專案設定

若要在任一個方塊中新增權限,請按一下 [增加],並選擇要新增的權限。若要移除權限,請反白顯示該權限,再按一下 [移除]。


6.2 選取安全性策略

Sun JavaTM Wireless Toolkit for CLDC 支援由 JSR 185 (Java Technology for the Wireless Industry) 和 JSR 248 (Mobile Service Architecture,簡稱 MSA) 定義的安全性策略。在第 6.2.1 節, MSA 保護網域第 6.2.2 節, Java for the Wireless Toolkit Industry 保護網域詳細描述了保護網域。

若要選擇您想要模擬器使用的安全性策略,請選取 [編輯] > [偏好],並在 [種類] 清單中選取 [安全]。從 [安全性策略] 組合方塊中,選擇 [MSA] 或 [JTWI]。選取一個可用的安全性策略。

當您使用 [經由 OTA 執行] 時,您的封裝 MIDlet 套件直接安裝在模擬器中,而且放置在安裝時的保護網域中。模擬器使用公開金鑰加密,來決定安裝 MIDlet 套件的保護網域。

如果 MIDlet 套件未經過簽署,就會放置在預設保護網域。MSA 和 JTWI 的預設值不相同。請參閱 6.2.1 小節和 6.2.2 小節。如果 MIDlet 已經過簽署,則放置在與簽署金鑰憑證鏈的根憑證相關的保護網域。

例如,有一家假想的 Respectable Software 公司,想要發行加密簽署的 MIDlet 套件。Respectable Software 向 Super-Trustee (一家假想的憑證授權單位) 購買簽署金鑰組。Respectable Software 使用這個簽署金鑰來簽署 MIDlet 套件,並將憑證隨 MIDlet 套件一起發行。當 MIDlet 套件安裝在模擬器或裝置上時,實作會使用它自己的 Super-Trustee 根憑證來檢驗 Respectable 的憑證。然後使用 Respectable 的憑證檢驗 MIDlet 套件上的簽名。假定所有項目都通過檢查,裝置或模擬器就會將 MIDlet 套件安裝到與 Super-Trustee 根憑證相關的任何保護網域,很可能為 identified_third_party

工具組提供一些工具,可簽署 MIDlet 套件、管理金鑰及管理根憑證。

6.2.1 MSA 保護網域

工具組支援五個 MSA 的保護網域:

當您按 [執行] 按鈕,在模擬器中執行應用程式時,程式碼會預設在 unidentified_third_party 保護網域中執行。

6.2.2 Java for the Wireless Toolkit Industry 保護網域

Sun Java Wireless Toolkit 包含四個保護網域:

當您按 [執行] 按鈕,在模擬器中執行應用程式時,程式碼會預設在 untrusted 保護網域中執行。


6.3 簽署 MIDlet 套件

若要簽署 MIDlet 套件,您必須先封裝該套件 (選取 [專案] > [封裝]), 然後選擇 [專案] > [簽署]。就會顯示簽署視窗 (圖 6-2)。

圖 6-2 MIDlet 套件簽署視窗

已選取 localhost1 別名的 [簽署 MIDlet 套件] 視窗顯示 Java SE 金鑰詳細資訊

只要在 [別名清單] 中選取要使用的金鑰,再按一下 [簽署 MIDlet 套件] 按鈕 (綠色三角形) 即可。


6.4 管理金鑰

MIDlet 簽署視窗也可以用來管理金鑰。為了測試,您可以建立金鑰組,以簽署 MIDLet。若要在裝置上部署,必須向裝置能辨識的憑證授權單位取得簽署金鑰組。您也可以從既有的 Java SE 平台金鑰庫匯入金鑰。

6.4.1 建立新的金鑰組

若要建立全新的金鑰組,請按一下 [新增金鑰組]。工具組會提示您輸入金鑰別名及金鑰組的相關資訊。

圖 6-3 建立新的金鑰組

[新增金鑰組] 對話方塊提示輸入別名、一般名稱、組織單位、組織、縣/市、省/市和用兩個字母表示的國家/地區代碼

按一下 [建立] 之後,工具組會提示您選擇保護網域。您剛剛建立的金鑰組與保護網域之間的連線可能有些迂迴,但有充分的道理:

現在試想,如果安裝使用新金鑰簽署的 MIDlet 套件,會發生什麼狀況:

6.4.2 獲取真實金鑰

在 Sun JavaTM Wireless Toolkit for CLDC 環境中建立金鑰組和簽署 MIDlet 的能力,僅做為測試用途。當您在實際裝置上執行應用程式時,必須向裝置能辨識的憑證授權單位取得簽署金鑰組。

以真實金鑰簽署 MIDlet 套件的程序運作方式如下:

1. 產生新的金鑰組。

在 Sun JavaTM Wireless Toolkit for CLDC 中,可藉由在 MIDlet 簽署視窗中按下 [新增金鑰組] 達成,如上所述。

2. 產生一個憑證簽署請求 (Certificate Signing Request,CSR)。

a. 在簽署視窗中按下 [產生 CSR]。

b. 要改變 CSR 檔案的位置,輸入一個新的路徑或按下 [瀏覽] 並選擇一個新的檔案位置。

c. 按下 [建立] 以寫入 CSR 檔。

在 CSR 檔案寫完後,會顯示表示成功寫入的訊息。

3. 將 CSR 傳送到憑證授權單位 (CA)。

CA 需要您提供更多資訊以驗證您的身份。您也必須支付 CA 產生憑證的費用。

CA 確認您的身份並收到費用後,會傳送可驗證公開金鑰的憑證。

4. 在 MIDlet 簽署視窗中按下 [匯入憑證...],將憑證匯入 Sun JavaTM Wireless Toolkit for CLDC。

現在您就可以使用您的私密金鑰簽署 MIDlet 套件了。Sun JavaTM Wireless Toolkit for CLDC 將會處理將簽署及您的憑證存放至 MIDlet 套件的細節。

6.4.3 匯入現有的金鑰組

您可能想要將 Java SE 平台金鑰庫中的金鑰用於 MIDlet 簽署。在這種狀況下,您必須將簽署金鑰匯入 Sun JavaTM Wireless Toolkit for CLDC,讓您可以簽署您的 MIDlet 套件。若要從 MIDlet 簽署視窗執行此動作,請按一下 [匯入金鑰組]。選取包含 Java SE 平台金鑰庫的檔案。系統會提示您選取要匯入的金鑰組之別名,然後您僅需在此金鑰組匯入金鑰庫後,輸入金鑰組的別名以便識別即可。最後,您必須選取金鑰組根憑證的保護網域。

6.4.4 移除金鑰組

若要從 MIDlet 簽署視窗中移除金鑰組,請選取別名,並選擇 [動作] > [刪除選項]。


6.5 管理憑證

這一節描述如何使用 Sun JavaTM Wireless Toolkit for CLDC,管理模擬器的根憑證清單。

實際裝置具有類似的根憑證清單,但是使用者無法修改。當您想在實際裝置上部署應用程式時,您必須使用裝置上存在之根憑證的憑證授權單位所發出的簽署金鑰。否則,裝置將無法檢驗您的應用程式。

當您在部署應用程式時,工具組的憑證管理公用程式會提供便利的方式,讓您測試處理模擬器的根憑證清單。

選擇 [檔案] > [公用程式]。選取 [管理憑證],並按下 [啟動] 以開啟憑證管理員視窗。會顯示微金鑰庫 _main.mks。金鑰庫位於 appdb 目錄中。

appdb 目錄也包含 keystore.ksserverkeystore.ks。Java ME 平台憑證管理員無法開啟 *.ks 檔案,但是如第 6.5.2 節, 匯入憑證所述,您可以從這些金鑰庫匯入憑證。

圖 6-4 憑證管理員

[Java ME 平台憑證管理員] 在左側顯示憑證清單,在右側顯示 Java ME 金鑰詳細資訊。

視窗左側 [憑證清單] 的每一行分別顯示一個憑證。當您按一下憑證時,其詳細資訊會顯示在視窗右側,還會顯示與憑證相關聯的保護網域。

6.5.1 啟用和停用憑證

憑證可以啟用也可以停用。如果您想讓憑證暫時不可用卻又不想從金鑰庫移除,這是很方便的功能。若要啟用或停用憑證,請在清單中選取它,並按下 [啟用/停用憑證]。工具組會要求您確認動作。選擇 [是] 以繼續。

6.5.2 匯入憑證

您可以從憑證檔案或從 Java SE 平台金鑰庫檔案匯入憑證。

若要從檔案匯入憑證,請在憑證管理員視窗中按一下 [匯入憑證]。找到憑證檔案後,選擇與憑證相關的保護網域。

若要從 Java SE 平台金鑰庫匯入憑證,請在憑證管理員視窗中選擇 [動作] > [匯入 Java SE 憑證]。首先,選擇憑證的保護網域。然後選取金鑰庫檔案,並輸入金鑰庫密碼。最後,選取要匯入的憑證別名。

6.5.3 移除憑證

若要從清單中移除憑證,請選取憑證,選擇 [動作] > [刪除選項]。


6.6 支援 USB 加密碟

USB 加密碟為公開與私密金鑰和憑證提供可攜帶且受密碼保護的儲存方式。Java SE PKCS#11 原生介面可存取的 USB 加密碟,需具有與 PKCS#11 相容的原生驅動程式。安裝此驅動程式後,PKCS#11 程式庫即包含於其中。在 Windows 中,此程式庫為 win32 DLL。

本小節提供在 Windows 平台中安裝和使用 USB 加密碟的範例說明。



備註 - 不支援 Linux,因為尚未使用 Linux 驅動程式對 USB 加密碟進行全面測試。如果有與 PKCS#11 相容的原生驅動程式,則 USB 加密碟也許能用在 Linux 中。



本小節其餘部分逐步介紹 USB 加密碟支援所需的安裝和設定程序。

6.6.1 安裝 USB 加密碟驅動程式

關閉所有應用程式。

1. 請至 http://downloads.geotrust.com/TCSPIKEY0407203016.exe

2. [檔案下載] 對話方塊開啟時,按一下 [儲存]。

記下儲存該可執行檔的目錄。

3. 選取該可執行檔,然後連按兩下該可執行檔案開始 Crypto Token 安裝。

遵循安裝提示。插入加密碟以便完成安裝。

4. Windows 新增硬體精靈啟動。

遵循指示接受所有預設動作。

5. 精靈結束後,選取 [是] 以重新啟動電腦。


procedure icon  重設 USB 加密碟密碼

此步驟僅對新 USB 加密碟有效。所有 USB 加密碟均隨附有預設的密碼︰PASSWORD (全大寫)。您應重設此密碼。

1. 在 Windows 工作列上按一下 [開始]。選取 [所有程式] > [GeoTrust Token] > [iKey 2000 Series Software] > [PassPhrase Utility]。

2. 按一下 [更新密碼]。

在輸入新密碼前,系統會提示您輸入「舊密碼」。

3. 重設密碼。

GeoTrust 和 Cingular 建議您將密碼設為至少八個混合字元的組合。


procedure icon  管理 USB 加密碟

請至 GeoTrust 驅動程式安裝目錄。執行 CIPUtils.exe 以管理 USB 加密碟的內容。

6.6.2 使用 USB 加密碟

[簽署 MIDlet 套件] 對話方塊提供了 USB 加密碟的存取權。連接 USB 加密碟並安裝了驅動程式後,請選取 [檔案] > [載入金鑰庫] > [來自 USB 加密碟] (或鍵入 Ctrl -T)。如果 USB 加密碟是受密碼保護的,則系統會提示您輸入一個密碼。正確載入加密碟後,即會列出所有的別名和金鑰詳細資訊。然後,您便可如第 6.3 節, 簽署 MIDlet 套件所述選取金鑰並使用它們進行簽署。

嘗試從 USB 加密碟載入金鑰庫時可能會看到錯誤訊息。