甚麼是代碼簽署?運作原理與重要性
代碼簽署是使用受信任證書頒發機構(CA)頒發的證書為軟件進行數碼簽署的過程。有關簽署可證明代碼的發布方身份,以及代碼自簽署後未遭篡改,因此作業系統與用戶可在安裝或執行前對其進行驗證。
甚麼是代碼簽署?
代碼簽署透過公鑰基礎設施(PKI)將軟件與經過驗證的發布方綁定。開發者在發布前為應用程式、可執行檔、驅動程式及指令碼進行簽署。當用戶下載或執行軟件時,作業系統會驗證簽署以確認兩點:發布方身份真實,且代碼與簽署時的內容完全一致。
簽署本身屬於一種數碼簽署。簽署工具會生成軟件的加密雜湊值(唯一指紋),並使用發布方的私鑰為其簽署。任何人均可透過發布方證書中對應的公鑰進行驗證。若簽署後代碼哪怕僅改動一個位元組,驗證都會失敗。
甚麼是代碼簽署證書?
代碼簽署證書是一種數碼證書,用於將經過驗證的機構與簽署軟件所用的密鑰對綁定。它遵循X.509 證書標準,且僅在 CA 完成發布方身份驗證後才會由 CA 頒發。
數碼證書簽發後,開發人員可使用其為應用程式、安裝套件、指令碼及更新內容簽署。經正確簽署的軟件會顯示已通過驗證的發布者名稱,觸發的作業系統警告較少,且在被竄改時更容易被偵測。
代碼簽署的運作原理
代碼簽署流程包含一系列步驟,可將軟件轉換為經安全簽署、可驗證的軟件套件:
- 對軟件執行哈希運算。 哈希函數會為待發布的具體代碼產生唯一的指紋。
- 對哈希值進行簽署。 開發人員使用與其代碼簽署證書綁定的密鑰對該指紋進行簽署。
- 加入時間戳。 受信任的時間戳伺服器會記錄代碼的簽署時間,因此即使證書過期,簽署仍保持有效。
- 組裝簽署區塊。 將簽署後的哈希值、證書以及哈希運算相關細節組合為簽署區塊。
- 附加簽署。 將簽署區塊嵌入應用程式或可執行檔案中,準備分發。
- 作業系統對其進行驗證。 在下載或安裝時,系統會檢查簽署。如果簽署缺失、無效或不受信任,用戶可能會看到警告,或者安裝程序可能被阻止。
OV 與 EV 代碼簽署證書對比
Sectigo 提供兩類代碼簽署證書。兩類證書都會驗證您的機構身分,主要分別在於審核的深度不同。
- OV 代碼簽署證書(組織驗證型):證書頒發機構(CA)會驗證您機構的合法存續狀態、基於域名的電郵信箱以及授權聯絡人。這類證書性價比高,適用於內部應用、B2B 軟件及常規分發場景。
- EV 代碼簽署證書(擴展驗證型):證書頒發機構(CA)在簽發前會執行更嚴格的擴展驗證,欺詐性機構更難取得這類證書。它通常是面向大規模公眾用戶分發軟件時的選擇。
舊文章中常有兩點錯誤觀念:
- 密鑰儲存要求現已統一。 OV 和 EV 證書的密鑰都必須在符合 FIPS 標準的硬件中生成和儲存,例如硬件令牌或硬件安全模組(HSM)。舊的指引稱 OV 密鑰可儲存在軟件或檔案系統中,該規則已不再適用。
- 兩類證書都無法立即取得 SmartScreen 信譽。 自 2024 年起,Microsoft SmartScreen 對 OV 和 EV 簽署檔案採用相同的信譽累積機制,該程序需要一定時間。EV 證書的價值仍在於其更強的身分核驗能力,而非用於跳過警告。
2026 年代碼簽署證書要求
CA/Browser Forum 出台的業界規則改變了代碼簽署證書的簽發和續期方式:
- 最長有效期為459天(約15個月),適用於2026年2月23日起簽發的證書。
- 多年期套餐每年續期一次。 多年期選購將不再生成單張長效證書。選用Sectigo的服務,您在套餐有效期內每年都會收到一張新證書和一個符合FIPS標準的新硬件令牌。
- 密鑰必須存儲在符合FIPS標準的硬件中 OV和EV證書均適用:可使用令牌,或您自有且受支援的HSM。
- 時間戳的重要性達到了前所未有的高度。 由於證書有效期縮短,受信任的時間戳可確保已簽名軟件在證書過期後仍然保持有效。
對於需要大規模簽名的團隊,更短的有效期意味著更多的續期操作,也有更多密鑰需要保護。完整細節和時間安排請參見最新代碼簽名法規.
代碼簽名為何重要?
操作系統會在軟件運行前對其進行檢查。如果程式未簽名或來自未知發布者,用戶可能會看到無法驗證該程式的警告。程式仍可能被安裝,但這類警告會削弱用戶信任,導致用戶放棄下載。
受信任的簽名可改變這一情況。它會顯示經過驗證的發布者名稱,讓用戶和系統能夠檢測到篡改行為,並幫助新軟件隨著下載量增長逐步累積信譽。信譽建立需要時間,因此請使用同一簽名身份為所有版本簽名。
代碼簽名還可保護您的發布流水線。機構通常會將簽名密鑰存儲在安全保險庫或HSM中,防止攻擊者利用密鑰簽名惡意代碼或將惡意代碼注入構建流程。實用操作指南請閱讀我們的代碼簽名最佳實踐.
適用場景
只要用戶通過更新或下載獲取軟件,代碼簽名就能為其提供保護。操作系統和應用商店依靠簽名確認更新來自合法發布者且未被篡改。在用戶無需逐一確認安裝的場景中,這一點尤為重要,包括自動更新的IoT設備、嵌入式系統和智能設備,這些設備上僅應運行受信任的已簽名軟件。
DevOps中的代碼簽名
發布周期持續加快,手動簽名步驟、硬件操作和脫節的工作流會拖慢流水線運行效率。現代團隊需要將簽名能力集成到自動化構建和發布流程中。ACME協議等標準以及Sectigo Certificate Manager等平台可幫助將證書管理和簽名能力接入Kubernetes、Ansible、Terraform和Docker等DevOps工具鏈,避免完整性檢查拖慢發布速度。
常見問題
代碼簽名是強制要求嗎?
大多數軟件在法律層面並未強制要求代碼簽名,但許多平台實際上將其作為必備要求。Windows會對未簽名或無法識別的軟件向用戶發出警告,Windows內核模式驅動必須經過微軟簽名,Apple平台及大多數應用商店也要求應用經過簽名。為所有發布版本執行簽名還可保護您的客戶免遭篡改後的下載文件侵害。
代碼簽名證書過期後會發生什麼?
附帶受信任時間戳簽名的軟件在證書過期後仍然有效,因為時間戳可證明軟件是在證書有效期內完成簽名的。如果沒有時間戳,證書過期後簽名可能會驗證失敗。您需要使用未過期的新證書為新版本簽名。
代碼簽名可以消除SmartScreen警告嗎?
僅靠代碼簽名無法做到這一點。有效簽名會顯示您經過驗證的發布者名稱,但Microsoft SmartScreen還會檢查簽名身份和文件的信譽,因此新版本仍可能出現警告。信譽會隨著用戶下載您的已簽名軟件逐步建立,對所有發布版本使用同一簽名身份有助於累積信譽。
透過程式碼簽署交付可信賴軟件
程式碼簽署可協助企業保障軟件完整性、減少操作系統的安全警告,並確保應用程式被識別為來自已驗證的發布者。
借助Sectigo 程式碼簽署證書,團隊可提升安裝環節的信任度、簡化簽署工作流程,防範每個建置版本遭到未經授權的竄改,同時維持發布效率,保持較高的用戶信任水平。
