乍一看,在 Windows 中對驅動程式進行簽署似乎是只有高級開發人員才能做的事情,但如果您使用 設備、自訂驅動程式或測試環境遲早你會遇到這個要求。在現代系統中,尤其是在 64 位元系統中,Windows 不再信任任何試圖偷偷進入核心的二進位檔案:它需要有效的數位簽章、像 SHA2 這樣的現代演算法,而且在許多情況下,還需要通過微軟的認證。
接下來,我們將冷靜地探討簽署控制器究竟意味著什麼,以及兩者之間有哪些差異。 核心模式和使用者模式它對 64 位元 Windows 7、8、8.1 和 10 有何影響,SignTool 或 Visual Studio 等工具扮演什麼角色,以及對於開發環境(測試或自簽名憑證)和使用受信任機構頒發的憑證的公共發布版本,您有哪些選擇。
Windows 中的驅動程式簽署是什麼?為什麼它是強制性的?
Windows 中的驅動程式簽章涉及關聯一個驅動程式。 驅動程式包的數位簽名 (二進位檔案、INF 檔案、目錄等)是為了確保兩件事:一是檔案自建立以來未被任何人篡改;二是檔案確實來自指定的發布者(軟體提供者或製造商)。 硬件).
實際上,在安裝 Windows 裝置期間,這些數位簽章用於: 驗證包裹的完整性 以及發布者的身分。如果資訊不符(例如簽章損壞、憑證不受信任、雜湊值錯誤等),系統將顯示警告、阻止安裝或直接拒絕載入驅動程式。
從 Windows Vista 64 位元系統開始,尤其是在 Windows 7、8、8.1 和 10 x64 系統中,核心模式安全策略非常明確:任何將在核心中執行的驅動程式 必須正式簽署。否則,驅動程式將無法加載,設備可能無法運行,如果強制加載無效的二進位文件,甚至可能出現藍色畫面。
當您決定向微軟申請驅動程式認證時,您可以將其提交至 Windows 硬體品質實驗室 (WHQL) 驗證流程。如果驅動程式套件通過認證測試,微軟將授予其認證。 官方 WHQL 簽名這不僅提高了信任度和相容性,而且還允許您透過以下方式分發驅動程式: Windows更新 以及微軟支援的其他分銷管道。
需要注意的是,從 Windows 10 版本 1507 開始,所有透過 Microsoft 硬體開發中心簽署的驅動程式都使用 進行簽署。 SHA2 作為一種哈希演算法SHA1 在這些場景中已經過時了,混合使用舊憑證可能會導致問題,尤其是在較新的系統上。

核心模式和使用者模式下的驅動程式簽章有何不同
在 Windows 系統中,運行的驅動程式 核心模式和使用者模式雖然兩種環境下的簽章策略並不完全相同,但隨著作業系統版本的更新,簽章策略往往會變得更加嚴格。
核心模式驅動程式最為敏感,因為它們運行在系統核心中,並擁有對記憶體和硬體的特權存取權。在 64 位元版本的 Windows Vista 及更高版本中,這些驅動程式 它們需要簽名 為了能夠充電。此限制與系統穩定性和防護直接相關。 惡意軟件 它試圖以低濃度注入。
另一方面,以使用者模式運作的驅動程式(例如,許多印表機驅動程式和附加元件)最初並不受如此嚴格的約束。事實上,在舊版的 Windows 系統中, 這並非絕對要求。 這些驅動程式需要簽名。然而,出於安全考慮,微軟一直建議對驅動程式進行簽名,而且自 Windows 8 起,某些類型的用戶驅動程式在某些情況下必須進行簽名。
一個典型的例子:安裝在 x64 電腦上的印表機驅動程式通常會在安裝過程中顯示對話框,要求使用者確認。實際上,該軟體包 必須妥善簽署。 這樣安裝工作就可以繼續進行,不會有阻塞或重大安全警報。
整體思路是,雖然使用者模式下並非普遍要求,但微軟正日益推動這項要求。 所有與驅動程式相關的軟體都必須簽名對它們進行簽名可以可靠地驗證它們的創建者,檢測篡改,並降低惡意元件偽裝成合法控制器潛入的風險。
不同 Windows 版本中的簽章要求與 SHA 演算法
最棘手的問題之一是Windows版本與雜湊演算法(例如…)之間的兼容性。 SHA1 和 SHA2許多開發人員會遇到這樣的情況:驅動程式在一個系統上可以運行,但在另一個系統上卻不行,而這很大程度上要歸咎於簽章策略的改變。
在較舊的系統中,例如 64 位元 Windows 7 或 8,使用基於 SHA1 的憑證和簽章很常見,儘管微軟已經發出警告: SHA1 在安全性方面有不足之處。隨著 Windows 8.1 和 10 的發展,SHA2 已成為程式碼和驅動程式簽署的標準。
實際上,一些製造商選擇透過嵌入由微軟以外的實體頒發的雙重憑證(SHA1 和 SHA2)來對核心模式二進位進行簽署。這些雙重簽名的二進位檔案在某些情況下, 它們在 Windows 10 之前的版本中無法載入。在某些 Windows 10 系統上,它們甚至會導致嚴重的崩潰或藍色畫面死機。
為了緩解這些問題,微軟發布了特定的修補程式,例如更新 KB 3081436。在受影響的系統上安裝此更新可以修復與某些 SHA2 簽章驅動程式的不相容性,並提供一個清單。 參考 SHA 哈希值 在該支援文章的“更多資訊 - 文件哈希信息”部分。
如果您要分發需要在多個 Windows 版本上運行的驅動程序,那麼審查以下內容至關重要: 每個版本的簽名要求 微軟對此有詳細說明。其中明確規定了哪些演算法有效、如何處理向後相容性以及哪些簽章組合(目錄簽章、嵌入式二進位簽章、交叉憑證等)被官方接受。
使用者模式驅動程式簽章:建議與資源
雖然核心通常最受關注,但用戶模式驅動程式簽名也同樣值得關注。微軟最初並沒有嚴格執行這項規定,但後來確實… 強烈建議注意安全 該系統能夠增強最終用戶的信心。
用戶模式驅動程式的簽章基本上執行與核心模式相同的功能: 標識控制器提供者 (製造商、獨立軟體供應商等)並確認軟體包自簽名以來未被修改。例如,當使用者在 x64 電腦上安裝具有使用者模式驅動程式的印表機時,安裝精靈可能會顯示對話框,詢問發布者是否受信任。如果簽章有效且憑證屬於受認可的實體,則安裝過程會更加順利,警告資訊也會大幅減少。
微軟提供了一系列文件和教程,深入探討了簽名過程,其中許多最初是為核心模式設計的,但也適用於使用者模式。主要文章關於 駕駛員簽名 核心模式程式碼簽署教學中的子主題「如何對核心模組進行版本簽名」是理解 Windows 程式碼簽章一般邏輯的良好起點。
此外,Windows 驅動程式工具包 (WDK) 安裝程式包含一個名為「說明檔案」的檔案。 自簽名自述文件.htm,位於目錄中 自簽名本文檔說明如何產生測試憑證以及如何在開發過程中使用它們,這在您尚未受信任的根憑證授權單位所頒發的憑證時尤其有用。
總而言之,雖然在某些情況下,用戶模式驅動程式在技術上可以無需簽名即可運行,但應將其視為強制性要求。這是出於安全性、品牌形像以及與 Windows 安裝精靈相容性的考量。 簽下司機是最明智的做法。.
使用 SignTool 在 Windows 7 和 8 中對核心模式驅動程式進行簽名
在使用 64 位元 Windows 7 和 8 時,對核心模式驅動程式進行簽署的最常見方法之一是使用命令列工具。 命令 簽名工具該實用程式包含在 Windows SDK 中,可用於對檔案進行簽名和驗證現有簽名,並提供多種選項以適應不同的場景。
一些最重要的選項 SignTool 的功能如下:
- /交流電:指定一個附加證書,例如,將您的證書連結到受信任的根證書頒發機構的交叉證書。
- /f:表示包含簽署憑證的文件(通常為 .pfx)。
- /p:提供與儲存在 .pfx 檔案中的簽署憑證關聯的密碼。
- /fd:定義建立檔案簽章時使用的雜湊演算法,例如: /fd sha256 產生基於 SHA256 的簽章(如果未指定,則舊版本中的預設值通常是 SHA1)。
- /n “憑證的通用名稱”允許您根據通用名稱 (CN) 從 Windows 憑證儲存中選擇特定憑證。
- /t:指定與 Microsoft Authenticode 方案相容的時間戳伺服器。
- / tr:表示符合 RFC 3161 標準的時間戳伺服器,更現代,建議用於新的部署。
在開發驅動程式專案時,了解哪些文件需要簽署至關重要。驅動程式必須經過簽名才能在 Windows 7 或 8 上正確安裝。 專案的所有相關二進位文件 (例如,.sys 檔案)以及將軟體包中的檔案集分組的目錄檔案(.cat)。
您有兩種主要選擇:您可以將這些檔案複製到安裝了 SignTool 的工作目錄,或直接複製。 將它們移到 Windows SDK bin 資料夾 然後從那裡運行該工具。重要的是,您必須同時準備好二進位檔案和用於簽署的憑證。
一個典型的場景是獲取相應的代碼簽名證書,例如,一個 “Microsoft 交叉證書”證書 由 GlobalSign 或其他受信任的機構頒發。將該交叉憑證 (CrossCert.crt) 與您的主程式碼簽署憑證(例如 CodeSign.pfx)一起放在工作目錄中,然後執行類似如下的命令:
signtool sign /ac CrossCert.crt /f CodeSign.pfx /p password1234 /tr http://timestamp.globalsign.com/tsa/r6advanced1 filter.sys
此命令會產生一個簽名,該簽名 包括交叉認證 並從 GlobalSign 的 RFC 3161 伺服器取得時間戳記。這個時間戳至關重要,因為它能證明文件是在證書有效期內簽署的,即使證書之後過期。
文件簽名後,需要驗證所有內容是否正確。這通常使用驗證命令來完成,例如:
signtool verify -v -kp filename.sys
選項 -v 它會強制輸出詳細信息,顯示有關證書鏈的詳細資訊以及該選項。 -kp 它會根據核心模式驅動程式的特定程式碼簽署標準驗證簽名。如果一切順利,您將看到一個結果,表示簽章和憑證鏈均正確。
最後,建議 對 .cat 檔案重複相同的簽名和驗證過程 該軟體包。一旦二進位檔案和目錄都經過正確簽名,驅動程式就可以在 Windows 7 和 8 x64 系統上安裝,而不會出現安全性問題。在安裝精靈過程中,應該會顯示受信任的發布者資訊和標準系統視窗。
為了深入了解該工具的所有變體,微軟維護了一份全面的 SignTool 命令參考手冊,以及一份… 內核模式下程式碼簽署的具體教程 以及專門介紹 Windows 核心模組數位簽章的文件。這些資源解釋了特殊情況、高階參數以及每個系統版本的具體細節。
對字節世界和一般技術充滿熱情的作家。我喜歡透過寫作分享我的知識,這就是我在這個部落格中要做的,向您展示有關小工具、軟體、硬體、技術趨勢等的所有最有趣的事情。我的目標是幫助您以簡單有趣的方式暢遊數位世界。