發布日期 : 2/28/2005 | 更新日期 : 2/28/2005
James Pratt
Microsoft
適用于:
Microsoft® Windows® Powered Smartphone 2002
Windows Mobile™ 2003 software for Smartphones
Windows Mobile 2003 Second Edition software for Smartphones
Microsoft ActiveSync®
Microsoft Visual Studio® .NET 2003
Microsoft eMbedded Visual C++® version 3.0
Microsoft eMbedded Visual C++ version 4.0
摘要:本文介紹應用程序開發人員必須了解的有關 Smartphone 應用程序安全模型的內容、以及當某款基于 Windows Mobile 的 Smartphone 推向市場時移動運營商所擁有的不同策略選擇。
本頁內容
摘要
應用程序安全背景
代碼簽名實踐
小結
附錄 A:受保護的注冊表項
附錄 B:特權 API 列表
摘要
Microsoft™ 基于 Windows Mobile 的 Smartphone 是根據數字代碼簽名實現應用程序安全模型的。希望以基于 Windows Mobile 的 Smartphone 為目標的應用程序開發人員需要了解 Smartphone 應用程序安全模型、以及當某款基于 Windows Mobile 的 Smartphone 推向市場時移動運營商所擁有的不同策略選擇。
如果您是一位了解構建 Pocket PC 或 Smartphone 應用程序的 Smartphone 開發人員,并且還在構建 Pocket PC 和/或 Smartphone 安裝包 (.cab),本文將提供您所需的一切,以幫助您了解 Smartphone 應用程序安全模型、特權與非特權應用程序的不同之處、如何確定您的應用程序是否需要特權信任、如何配置進行 Smartphone 開發的開發環境,以及如何通過代碼簽名供應商進行應用程序簽名。
應用程序安全背景
Mobile2Market FAQ 提供了一個非常不錯的針對應用程序安全與代碼簽名的高級指南。在閱讀本文之前,您可能希望閱讀 Mobile2Market FAQ,以便為您提供有價值的背景知識。
數字代碼簽名
數字代碼簽名是一種驗證數字內容來源的方式。在 Windows Mobile 領域中,有時會將它與徽標認證混淆。徽標認證是驗證某個 Windows Mobile 應用程序是否符合一組實現 Windows Mobile 應用程序的指導原則的過程。當前的指導原則可以在 Mobile2Market 站點上找到。經過認證的應用程序在應用程序中和它的包裝上都標有“Designed for Windows Mobile”徽標。“Designed for Windows Mobile”徽標不擔保應用程序是由它聲明的軟件供應商構建的,也不擔保如果它由該軟件供應商構建,它沒有在軟件供應商發出它和您接收到它的這段時間內遭到惡意篡改。而代碼簽名確實提供了這些擔保。
讓人感到不解的是,數字代碼簽名既使用數字證書,又有一個單獨的徽標認證程序。其實,這兩者有完全不同的目的和目標。
究竟為什么要進行數字代碼簽名?
數字代碼簽名不是基于 Windows Mobile 的 Smartphone 所獨有的。每次 Microsoft® Internet Explorer 詢問您是否希望安裝 Active X® 控件,然后詢問您是否希望“信任來自 X 公司的內容”時,應用程序是在要求您決定是否信任內容提供商。Internet Explorer 斷言相關的包在簽名后沒有更改過。如果您信任該來源,那么您就可以信任該應用程序,因為它來源于一個經過驗證的源。代碼簽名將驗證數字內容的來源以及自從它簽名后沒有更改過的事實。
用于 Smartphone 的 Windows Mobile 軟件的應用程序安全
通過禁止用戶從一個未知源安裝應用程序,基于 Windows Mobile 的 Smartphone 應用程序安全可以幫助保護最終用戶的 Smartphone 設備的完整性。
應用程序安全是一種通過代碼簽名實施的策略決策。在移動運營商將電話推向市場之前,他們會做出策略決策。移動運營商在任何時候都可以更改策略決策。
基于 Windows Mobile 的 Smartphone 實現了周邊安全和運行時安全。周邊安全控件可以安裝 在設備上。運行時安全控件可以在設備上執行。例如,您只需安裝一種鈴聲或一個主屏幕,然而您需要安裝并執行一個應用程序。如果您創建內容并安裝在沒有包含任何可執行組件的設備上,則您只需考慮周邊安全。如果您在創建一些可執行的東西(例如應用程序或組件),那么您需要考慮周邊安全和運行時安全。
Smartphone 包含三個不同的證書存儲區:一個非特權執行信任存儲區、一個特權執行信任存儲區和一個安裝信任存儲區。證書存儲區包含安裝在電話上的數字證書的公共部分。證書的公共版可以用來驗證應用程序的數字簽名,但不能用來對應用程序進行簽名。
什么時候我需要擁有超越非特權執行模式的特權?
大多數應用程序只需要非特權執行模式,例如游戲和有助于提高工作效率的個人應用程序。如果您計劃在應用程序中完成以下某件事情,您可能需要特權執行模式,因此應當使用特權證書進行簽名:
-
修改系統注冊表項(參閱附錄 A)
-
訪問 SMS 子系統(SmsXXX 函數)
-
進行或截獲電話呼叫并訪問其他的 exTAPI API
-
訪問 SIM 管理子系統(SimXXX 函數)
-
直接通過無線電接口層訪問無線電設備(不通過 Smartphone SDK 提供)
-
使用低級系統 API,例如 Kernel IOControl
-
編寫用來插入到系統進程或者特權進程的組件,例如 DLL。一個常見的例子是 Microsoft ActiveSync® 服務提供程序,它作為設備端 ActiveSync 應用程序應歸類為特權應用程序。
注 附錄 B 包含了需要特權訪問的 API 列表。
特權與非特權執行模式
Smartphone 應用程序安全模型的設計很靈活,可以滿足各種移動運營商的網絡的需要。特權與非特權應用程序的概念指的是給定應用程序訪問設備上的功能和 API 的權限級別:
-
特權信任應用程序可以完全訪問系統和 API。在特權證書存儲區進行證書簽名的應用程序以這種執行特權運行。
-
非特權信任應用程序可以有限訪問系統和 API。在非特權證書存儲區進行證書簽名的應用程序以這種執行特權運行。
-
不受信任應用程序不允許加載到 Smartphone 并且不能訪問系統或 API。
由運營商選擇 Smartphone 安全策略。這種策略可能允許不受信任的應用程序以非特權訪問模式運行,也可能需要對應用程序進行數字簽名。下一節討論安全策略矩陣。
什么是可能的安全策略?
對于安裝應用程序(周邊安全),運營商的策略選擇很簡單:
-
允許安裝未經簽名的安裝包
-
不允許安裝未經簽名的安裝包
在 Smartphone 2003 中,有另外一種模式,這種模式詢問用戶是否希望安裝應用程序。
對于執行應用程序(運行時安全),移動運營商必須選擇是否允許應用程序或組件以特權和非特權信任模式運行。下表顯示了需要通過其進行簽名才能運行的證書類型(取決于策略)。在 Smartphone 2002 中:
策略
|
執行模式
|
執行模式
|
|
非特權
|
特權
|
不受限制
|
無
|
無
|
標準
|
無
|
需要運營商特權證書
|
受限
|
需要 Mobile2Market 非特權證書
|
需要運營商特權證書
|
基于 Windows Mobile 2003 的 Smartphone 還可以支持提示模式。運營商不是簡單地否認用戶安裝或運行應用程序的能力,而是可以通過指定提示模式來推遲針對用戶的決策。在這種情況中,系統會提示并詢問用戶是否允許運行或安裝應用程序。執行策略如下:
策略
|
執行模式
|
執行模式
|
|
非特權
|
特權
|
不受限制
|
無
|
無
|
標準
|
需要 Mobile2Market 非特權證書(提示模式一樣)
|
需要 Mobile2Market 或運營商特權證書
|
受限
|
需要 Mobile2Market 非特權證書
|
需要 Mobile2Market 或運營商特權證書
|
如果您訪問 Mobile2Market Build Applications 頁,則可以找到主流移動運營商所采用的安全策略決策。
代碼簽名實踐
作為一名軟件開發人員,在開發代碼和部署應用程序的過程中,代碼簽名會對您產生影響。在開發過程中,您需要了解如何用證書配置仿真程序或設備來支持開發。當您想要部署應用程序時,您需要了解如何對應用程序進行數字簽名、需要對哪些組件進行簽名,以及如何對這些組件進行簽名。
在開始開發 Smartphone 應用程序之前,您需要準備您的 Smartphone 設備和開發環境。對于 Smartphone 2002,您將了解如何配置 eMbedded Visual C++® 3.0 以及如何選擇是否使用特權或非特權證書進行簽名。對于 Smartphone 2003,您將了解如何配置 eMbedded Visual C++ 4.0 和 Microsoft Visual Studio® .NET 2003,以便使它們使用一套相同的證書,從而簡化開發過程。
Smartphone 2002 和 2003 的共同配置步驟
對于 Smartphone 2002 和 Smartphone 2003,您需要使用 SDK 工具目錄的命令提示來執行一些配置步驟。如果您已經在默認的位置安裝了這些工具,則工具的目錄為:
平臺
|
工具目錄
|
Smartphone 2002
|
C:\Windows CE Tools\wce300\Smartphone 2002\tools
|
Smartphone 2003
|
C:\Program Files\Windows CE Tools\wce420\SMARTPHONE 2003\Tools
|
按照下面這些步驟打開命令提示,并將目錄切換到工具目錄:
-
單擊 Start 菜單,然后單擊 Run(或者按下 Windows 徽標鍵和 R)。Run 對話框打開。
-
在編輯字段中鍵入 cmd,然后按下 ENTER 鍵。命令窗口打開。
圖 1. 打開命令窗口
-
將目錄切換到上面特定于平臺的工具目錄。鍵入 cd <tools path>,然后按下 ENTER 鍵。
圖 2. 將目錄切換到特定于平臺的工具目錄
創建開發證書
Smartphone 2002 和 2003 SDK 附帶有稱為 spdps 的工具,該工具可用于創建特權開發人員證書,以便對設備端開發工具進行簽名,并將該證書提供給 Smartphone 和 Smartphone 仿真程序。應當單獨對 Smartphone 2002 和 Smartphone 2003 運行 spdps 命令,以確保仿真程序配置有適當的證書和對您的調試工具進行簽名。
spdps 工具安裝在 SDK 工具目錄中。按照前面的步驟打開命令提示,并將目錄切換到適當的工具目錄:
平臺
|
工具名稱
|
工具目錄
|
Smartphone 2002
|
sp2002dps
|
C:\Windows CE Tools\wce300\Smartphone 2002\tools
|
Smartphone 2003
|
spdps
|
C:\Program Files\Windows CE Tools\wce420\SMARTPHONE 2003\Tools
|
現在用 /create 與 /device 參數運行前表中指定的工具;例如,鍵入“sp2002dps /create /device”,<ENTER> 將會運行 Smartphone 2002 的工具。在發出該命令之前,您必須將設備連接到 PC 和已建立的 ActiveSync 連接中。
圖 3 顯示的是您期望看到的情形。
圖 3. 按下 ENTER 返回特定于平臺的工具的結果
我們在這里做的是對所有的設備端開發組件、遠程工具和具有本地創建證書的調試器進行簽名。這些工具需要對設備進行特權訪問,因此我們將本地創建的證書“推”到了設備的特權執行信任存儲區,這樣設備將允許組件以特權進程運行。
有些移動運營商可能選擇不支持即裝即用開發的設備配置。在這種情況下,您將會看到下面的錯誤:
圖 4. 選擇不支持即裝即用開發的設備配置會返回一個錯誤
如果您的電話不支持即裝即用開發,您需要聯系移動運營商,看看他們是否提供配置電話的服務,這樣您可以為其進行開發。例如,他們可能在 Web 上有一個開發人員計劃,您可以加入并能夠進行電話開發。
如果您在多個電話上進行開發,則您可以使用 spdps /device 命令將開發證書“推”到每個電話中。在這種情況下,您只需要使用 /device 參數。
圖 5. 使用一個參數
當您使用不帶 /create 開關的 /device 時,實用工具會要求您選擇一種證書。
圖 6. 選擇一種證書
當 eVC 第一次以 Smartphone 設備為目標時,會自動創建“<username> Default Development Certificate”。可以通過 spdps /create 創建“Smartphone Privileged Development Certificate for <username>”。在這種情況下,我們希望選擇“Smartphone Privileged Development Certificate for <username>”以“推”到設備中。該過程完成后,您將會看到一個同前面一樣的成功屏幕。
切記,如果您硬重置電話或者電池完全沒電,您需要通過重復這些步驟來重新配置電話。
Smartphone 2002 的特定配置步驟
對于 Smartphone 2002,您只能使用 eMbedded Visual C++ 3.0 來開發應用程序。采用上面提及的步驟,您可以在設備的特權和非特權證書存儲區上創建一個已知的證書。這將會幫助您確定您的應用程序是否需要進行特權或非特權簽名。這種方法重點在于通過仿真程序配置實際的 Smartphone 設備。仿真程序配備有開放式安全策略,這使得您能夠開發任何類型的應用程序。由于運營商選擇他們自己的安全策略,因此只有在您作為開發人員面對設備時才需要知道您使用哪一種證書進行簽名。
Smartphone 2003 的特定配置步驟
您可以使用兩種工具來為 Smartphone 2003 開發應用程序。前面的步驟已經配置好設備,這樣 eMbedded Visual C++ 4.0 就可以將應用程序部署到設備和仿真程序并進行調試。Smartphone 2003 SDK 附帶有特權和非特權開發證書。這些證書已經加載到了仿真程序特權和非特權證書存儲區中。Visual Studio .NET 2003 使用非特權證書作為默認的證書。這部分重點在于配置您的設備,以便可以使用這些證書,這樣您所有的工具和仿真程序就都有一套一致的證書。
將測試證書添加到個人證書存儲區
首先,您必須在您的開發 PC 上將 SDK 工具目錄附帶的證書添加到個人證書存儲區中。這些證書文件稱為 TestCert_Privileged.pfx and TestCert_UnPrivileged.pfx。為了將各個證書安裝到個人證書存儲區中,您需要:
-
在 Explorer 中雙擊 .pfx 文件。
-
單擊“Next”。
-
再次單擊“Next”。
-
再次單擊“Next”— 證書沒有密碼。
-
選擇“Automatically select cert store”,然后單擊“Next”。
-
單擊“Finish”。
將證書提供給設備
一旦您將證書添加到個人證書存儲區,您就需要將它們添加到設備。這里您需要使用 rapiconfig 工具。Smartphone 2003 SDK 附帶有將這些證書添加到適當設備證書存儲區中的配置文件。使用前面給出的指導打開命令提示,并切換到 SDK 工具目錄。類型:
rapiconfig /p sdktestcerts.xml <press enter>
您應看到:
圖 7. 使用 rapiconfig 工具切換目錄
配置 eMbedded Visual C++ 4.0 項目
現在您的設備包含了 SDK 測試證書。最后一步是更新 eMbedded Visual C++ 4.0 項目,這樣在部署它時它使用非特權測試證書來對應用程序進行簽名。在 eMbedded Visual C++ 4.0 中:
-
轉到 Project,然后選擇“Settings”。
-
滾動到最右側的選項卡“Security”(參見步驟 7 中的注釋)。
-
只選中頂部的復選框(對該應用程序進行簽名)。
-
按下上面的“Browse”按鈕。
-
選擇稱為“Smartphone 2003 Unprivileged Test Signing Authority”的證書,然后單擊“OK”。
-
取消選中“Configure device to trust signed applications”復選框。
注 我們已經將證書提供到我們希望它們位于其中的存儲區;因此我們不希望工具再次提供它們。通過取消選中該框,我們可以防止錯誤的證書進入到錯誤的存儲區中。
-
單擊“OK”。
注 Security 選項卡僅出現在 Smartphone 項目中。確保主 IDE 中的目標平臺設置為 Smartphone 而不是 Pocket PC。即使您創建的是一個 Smartphone 項目,eMbedded Visual C++ 4.0 有時也會默認選擇 Pocket PC,而不是 Smartphone。
配置 Visual Studio .NET 2003
Visual Studio 默認情況下,.NET 2003 使用 Smartphone 2003 SDK 所附帶的證書。用適當的證書配置設備的步驟就是完成配置 Visual Studio .NET 2003 以自動用非特權證書對應用程序進行簽名所需的步驟。
如果您確定您的 Visual Studio .NET 2003 應用程序需要進行特權簽名,您就需要使用稱為“Smartphone 2003 Privileged Test Signing Authority”的特權測試證書對應用程序組件(.exe 與 .dll)進行手動簽名。您可以使用 signcode 工具來做到這一點。signcode 工具的使用在為部署進行應用程序簽名 一節中進行介紹。
注 這使得您能夠通過從設備啟動可執行文件來運行 一個需要特權信任的應用程序。然而,如果您從開發環境運行或調試應用程序,它將會使用非特權證書再次對應用程序進行簽名。
考慮特權訪問的開發
訪問特權注冊表項
您可以打開和瀏覽特權注冊表項和值,但是您不能創建、修改,或者刪除項或值。所有的注冊表訪問函數都返回一個 LONG 值。當您試圖對一個要求特權訪問的項執行創建、修改或刪除時,返回值將為 ERROR_ACCESS_DENIED (0x05)。一定要檢查這些注冊表函數返回值并得體地失敗!
在附錄 A 中有一個特權注冊表項列表。
調用特權 API
如果您的應用程序中某個 API 失敗,那可能是您調用了一個特權 API 而沒有以特權信任模式運行。在這種情況下,函數調用會失敗。每個函數指示它失敗的方式是不同的,一般是通過一些返回值來指示。這本身不足以指示調用失敗,因為您需要以特權信任模式運行。
如果由于您需要特權信任而懷疑某個函數調用失敗,您可以調用 GetLastError 函數。如果返回值為 0x05 (ERROR_ACCESS_DENIED),則表明為了使用該函數您可能需要以特權信任模式運行。
參閱說明由于需要特權簽名而引發問題時如何進行經驗測試的章節。
在附錄 B 中有一個特權 API 列表。
編寫 DLL 與其他的組件
對于一個可執行文件來說,從其他的可執行組件(例如 DLL)加載功能是很常見的。通常,這是以運行時或者鏈接時加載函數的形式進行。有些標準的 Smartphone 應用程序允許通過編寫實現特定功能的 DLL 來擴展其自身,例如 ActiveSync、Inbox 和 Home Screen。
當某個 Smartphone 可執行文件試圖加載另一個組件時,系統要檢查可執行文件的特權級別。如果它發現組件的信任級別低,它就不允許加載該組件。
幾乎所有的系統可執行文件都是以特權信任模式運行的,記住這一點尤為重要。
對于 Smartphone 2002,試圖將一個非特權組件加載到一個特權進程中將會失敗而且系統不會給出任何提示。例如,您可能會試圖創建一個 ActiveSync 服務提供程序。雖然您已經正確地在桌面和設備上安裝了組件,而在桌面端,服務提供程序以 ActiveSync 選項的形式出現,當您試圖進行同步時,沒有傳輸數據,因為您的組件從來就沒有加載到設備端。根據經驗,任何插入到系統應用程序的組件都需要用特權證書進行簽名。
對于 Smartphone 2003,試圖將非特權組件加載到一個特權進程中的結果取決于安全策略。如有運營商允許提示模式,則系統會提示用戶并請求決定是否加載組件。詢問用戶:
This program needs a component from an unknown source that may not be trustworthy.
Do you want to load this component?
如果運營商不支持提示模式,則該行為與 Smartphone 2002 的一樣。
如果由于它需要特權簽名而使我的應用程序或組件失敗,我應如何進行經驗測試?
如果您遵循了前面的配置指導,您的開發環境應當配置成自動用一個已知的非特權證書對應用程序進行簽名。如果您遵循了這些配置指導并認為應用程序或組件可能需要特權簽名,則您可以進行經驗測試,方法是用您知道的設備特權存儲區中的一個特權證書來進行簽名。假定您已經利用前面的指導配置了環境,您可以通過以下步驟來幫助識別與安全有關的失敗。
eMbedded Visual C++ 3.0 與 4.0
對于 eMbedded Visual C++ 系列,您需要在項目設置中更改用來進行應用程序或組件簽名的證書。取決于您使用的是 eMbedded Visual C++ 3.0 還是 4.0£¬您需要進行稍有點不同的選擇。
注 由于 Smartphone 2002 仿真程序附帶有開放式安全策略,所以您不能使用仿真程序來對 Smartphone 2002 執行這種測試。
eVC 版本
|
證書名稱
|
3.0
|
<username> 的 Smartphone 特權開發證書
|
4.0
|
Smartphone 2003 特權測試簽名頒發機構
|
-
轉到 Project 并選擇 Settings。
-
滾動到最右側的選項卡 Security(參見步驟 7 中的注釋)。
-
只選中上面的復選框(對該應用程序進行簽名)
-
按下上面的 Browse 按鈕。
-
從上表選擇證書。
-
取消選中“Configure device to trust signed applications”復選框。
注 我們已經將證書提供到了我們希望它們位于其中的存儲區;因此我們不希望工具再次提供它們。通過取消選中該框,我們可以防止錯誤的證書進入到錯誤的存儲區中。
-
單擊“OK”。
注Security 選項卡僅出現在 Smartphone 項目中。確保主 IDE 中的目標平臺設置為 Smartphone 而不是 Pocket PC。即使您創建的是一個 Smartphone 項目,eMbedded Visual C++ 4.0 有時會默認選擇 Pocket PC,而不是Smartphone。
如果您現在重新構建所有的 應用程序或組件,則會使用一個特權證書進行簽名。如果您的應用程序或組件現在像您所期望的那樣開始正常工作,應用程序就需要進行特權簽名。
Visual Studio .NET 2003
用 Visual Studio .NET 2003測試稍有不同。在這種情況下,您需要使用 signcode 工具來對組件進行手動簽名,然后嘗試部署它們。關于使用 signcode 的指導在本文檔的為部署進行應用程序簽名 一節中。您需要選擇 Smartphone 2003 特權測試簽名頒發機構 證書來對應用程序或組件進行簽名。切記,Visual Studio .NET 2003 只支持 Smartphone 2003。
查詢 Smartphone 的證書存儲區中有哪些證書
Smartphone 2003 和 Smartphone 2002 SDK 都附帶有一個稱為 rapiconfig 的工具。rapiconfig 允許您對電話上的證書存儲區進行查詢。2002 和 2003 SDK 都附帶有一個名為 querystore.xml 的示例文件。您可以使用該文檔來確切地查詢電話在其特權、非特權以及安裝存儲區中有哪些證書。您將學會如何做到這些,包括:
-
為特權、非特權以及安裝存儲區創建適當的 .xml 文件。
-
使用 rapiconfig 獲取電話信息。
-
識別電話是否為開發而鎖定。
創建查詢文件
模板 querystore.xml 如下所示:
<!-- Sample XML to query a certificate store -->
<wap-provisioningdoc>
<characteristic type="CertificateStore">
<characteristic-query type="{Enter certificate store name over here}" />
</characteristic>
</wap-provisioningdoc>
您需要創建該文檔的三個名為 querystore_priv.xml、querystore_unpriv.xml 和 querystore_spc.xml 的副本。名稱并不重要;然而,在整個示例中我們將要使用這些名稱。在 SDK 工具目錄中制作 querystore.xml 的多個副本,這樣它們就可以更容易地與命令行工具 rapiconfig 一起使用。
您可以使用記事本、喜愛的文本或 XML 編輯器來編輯這些文件。
對于_
|
替換_
|
使用_
|
Querystore_unpriv.xml
|
{在此輸入證書存儲區的名稱}
|
非特權執行信任 Authorities
|
Querystore_priv.xml
|
{在此輸入證書存儲區的名稱}
|
特權執行信任 Authorities
|
Querystore_spc.xml
|
{在此輸入證書存儲區的名稱}
|
SPC
|
Using RAPIConfig
請參閱“配置開發環境”一節,打開 SDK 工具目錄中的命令提示。rapiconfig 工具的工作方式對于 2002 和 2003 有點不同。2002 版輸出在屏幕上;而 2003 版輸出到一個文件。下面的指令將產生三個 .xml 文件。每個 .xml 文件都包含有某個特定存儲區中的證書列表。
Smartphone 2002
rapiconfig /p querystore_unpriv.xml > unpriv_certs.xml <press enter>
rapiconfig /p querystore_priv.xml > priv_certs.xml <press enter>
rapiconfig /p querystore_spc.xml > spc_certs.xml <press enter>
Smartphone 2003
rapiconfig /p querystore_unpriv.xml <press enter>
copy rapiconfigout.xml priv_certs.xml
rapiconfig /p querystore_priv.xml <press enter>
copy rapiconfigout.xml priv_certs.xml
rapiconfig /p querystore_spc.xml <press enter>
copy rapiconfigout.xml spc_certs.xml
您現在有三個文件,每個都包含有某個證書存儲區中的證書列表:
文件
|
證書列表_
|
priv_certs.xml
|
特權存儲區
|
priv_certs.xml
|
非特權存儲區
|
spc_certs.xml
|
安裝存儲區
|
如果您從 rapiconfig 獲得一條錯誤消息,您應當檢查下一部分。
如果由于開發您的 Smartphone 被鎖定,將會發生什么情況?
運營商可以控制的電話安全的一個方面就是開發人員是否能夠從他們的開發機器連接到電話。如果運營商選擇了受限的策略,您將會接收到一條錯誤消息:
Config failed (0x80070005): Access is denied
如果是這種情況,您就需要聯系運營商,弄清楚他們是否為開發人員制定了一個允許您根據他們的特定電話硬件進行開發的計劃。
注 如果 .xml 文件中有錯誤,您也會接收到一條拒絕訪問錯誤消息;但是錯誤號將為 0x80042004。
為部署進行應用程序簽名
要對應用程序進行簽名,您需要獲得受一個或多個目標電話信任的數字證書。該數字證書的信任級別必須達到運行所需的執行特權;也就是說,如果需要特權信任執行,則需用特權證書進行簽名。如果只需要非特權信任執行,則需用非特權證書進行簽名。對于大多數應用程序來說,非特權信任執行足夠了。
獲得證書
Mobile2Market 在所有附帶基于 Windows Mobile 的 Smartphones 的非特權存儲區中都有證書。為了對應用程序進行簽名,以便使其在各種手機中工作,我們建議您從 Mobile2Market Participate Now 一節中的一個參與證書供應商處購買證書。
從這些供應商處獲得的證書通常是不受電話信任的。您必須使用此證書來對應用程序進行簽名,然后將經過簽名的應用程序提交給(通常通過 Web 接口)您的證書供應商。然后,該證書供應商會讓一個自動進程用 Smartphone 信任的證書對應用程序進行簽名,并為您提供一個下載該應用程序的鏈接。完成這些后,該供應商就可以驗證您的身份,從而幫助維護電話信任證書的完整性。
該證書通常附帶有包含所需 PIN 代碼的物理 USB 設備。供應商會給您發送如何裝配的指導。
對應用程序和安裝程序進行簽名
一旦您已經完成開發并獲得證書,就可以通過 5 個簡單的步驟來創建經過簽名的應用程序:
-
可以用從一個 Mobile2Market 證書供應商處購買的證書來對應用程序的可執行組件(.exe 和 .dll)進行簽名。下面是關于如何完成這些的指導。
-
通過 Web 接口將經過簽名的應用程序組件提交給證書供應商。聯系您的證書供應商以獲得具體指導。受電話信任的證書簽名的一個或多個文件將返回給您。
-
將這些組件構建到安裝包 (.cab) 文件中。
-
使用從某個 Mobile2Market 證書供應商處購買的證書對 .cab 文件進行簽名。本文后面的部分有關于如何這樣做的指導。
-
通過 Web 接口將經過簽名的 .cab 文件提交給您的證書供應商。聯系您的證書供應商以獲得具體指導。經過簽名的 .cab 文件將返回給您。
然后,可以將該 .cab 文件安裝在所有基于 Windows Mobile 的 Smartphone 上。該應用程序無需提示即可自己運行。
為了對 .exe、.dll 或 .cab 文件進行簽名,您需要使用 signcode.exe 工具,對于 Smartphone 2002 和 Smartphone 2003,該工具都安裝在 Tools 目錄中。這兩種工具完全相同。運行該工具時,系統將呈現一個向導。
圖 8. 打開數字簽名向導
單擊 Next,系統將詢問您想要對哪個文件進行簽名。您必須為每個要簽名的組件(即為每個 .exe 和 .dll 以及您最終的 .cab 文件)運行一次該工具。可以看到我已經從我的項目的 ARMRel 目錄中選擇了 Signing Demo.exe。
圖 9. 在數字簽名向導中選擇文件
單擊 Next 后,系統將詢問您是想要 Typical 設置還是 Advanced 設置;選擇 Typical。下一屏讓您選擇簽名所使用的證書。選擇 Select From Store,然后,個人證書存儲區中將為您呈現一個證書列表。您要使用的不是我們現在已經用完的本地創建的證書,而是從供應商處購買的證書。
注 用 codesign 簽名不會用完包含提供程序的簽名事件。只有在通過供應商的 Web 站點將本地簽名的應用程序提交給他們時,才會使用簽名事件。
圖 10. 選擇簽名證書
您應該很容易就能夠識別您的 Mobile2Market 證書,因為 Issued By 字段和您從中購買證書的公司名相同。例如,我選擇了 Geotrust 證書。一旦單擊了 OK,就可以單擊 Next。
下一屏將詢問可選的描述數據;您可以單擊 Next。您也不需要添加時間戳,所以可單擊時間戳屏幕上的 Next。
現在,您已經成功地導航了該向導。單擊 Finish,系統會對您的 .exe、.dll 或 .cab 進行簽名。現在,您已準備好將組件提交給您的簽名供應商。請參考供應商的指導來完成這些,但一般情況下一定要登錄他們的 Web 站點,通常要使用他們發送的 USB 證書來驗證身份。一旦登錄,您就可以上載組件,并將這些組件用受 Smartphone 信任的證書進行簽名。
對需要特權訪問的應用程序進行簽名
對于某些安全策略,運營商擁有特權證書存儲區中的證書。如果確定需要特權執行信任,那么您就需與您的運營商聯系,通常通過他們的開發人員計劃來確定如何用該證書對您的應用程序進行簽名。
注 運營商可以自行決定是否為您提供該項服務。
小結
Smartphone 應用程序安全策略和代碼簽名開始時可能會讓人畏縮,似乎很復雜。而實際上它非常簡單,通過本文,您現在可以了解 Smartphone 的不同證書存儲區、如何將證書放置在這些存儲區中,以及在開始部署時如何確保用正確的證書來對應用程序進行簽名。使用這些簡單的方法,可以確保您用正確的信任級別來對應用程序進行簽名。
如果您有關于本文內容的任何反饋,請發送郵件到 wmsecfbk@microsoft.com。
附錄 A:受保護的注冊表項
注冊表項
|
HKEY_LOCAL_MACHINE\Comm
HKEY_LOCAL_MACHINE\Drivers
HKEY_LOCAL_MACHINE\HARDWARE
HKEY_LOCAL_MACHINE\SYSTEM
HKEY_LOCAL_MACHINE\Init
HKEY_LOCAL_MACHINE\Security
HKEY_LOCAL_MACHINE\WDMDrivers
HKEY_LOCAL_MACHINE\Services
HKEY CLASSES_ROOT (device specific)
|
附錄 B:特權 API 列表
組件
|
API
|
Public
|
SetInterruptEvent
SetSystemMemoryDivision
CESetThreadPriority
CeSetThreadQuantum
ForcePageout
VirtualCopy
LockPages
UnlockPages
SetProcPermissions
SetKMode
ReadProcessMemory
WriteProcessMemory
SetCleanRebootFlag
PowerOffSystem
DebugActiveProcess
CreateProcess(僅 DEBUG_ONLY_THIS_PROCESS 和 DEBUG_PROCESS 調試標志)
KernelIOControl
|
擴展的電話應用程序接口 (ExTAPI)
|
lineRegister
lineSetCallBarringPassword
lineSetCallBarringState
lineUnregister
lineSetPreferredOperator
lineSetEquipmentState
lineGetGeneralInfo
lineManageCalls
lineSetGprsClass
lineGetNumberCalls
lineSetHSCSDState
lineGetUSSD
lineSendUSSD
lineSetSendCallerIDState
lineSetCallWaitingState
|
SIM 管理器
|
simUnlockPhone
simSetLockingStatus
simGetSmsStorageStatus
simChangeLockingPassword
simReadMessage
simWriteMessage
simDeleteMessage
simReadRecord
simWriteRecord
simGetRecordInfo
|
短消息服務
|
SmsSetMessageNotification
SmsClearMessageNotification
SmsReceiveAllMessagesFromSIM
SmsSetSMSC
|
連接管理器
|
ConnMgrProviderMessage
|
Critical Process Monitor (CPM)
|
CPMRegister (Reboot)
CPMShutdown
CPMStatus
CPMRegisterTest
|
無線電接口層
|
全部 RIL API
注 RIL API 所需的信任級別可通過將下列注冊表項的值從 2 更改為 1 而得以修改: [HKEY_LOCAL_MACHINE\Security\Policy\APIs\RILGSM] @="2"
|