共用方式為


如何針對應用程式套件簽章錯誤進行疑難解答

應用程式部署失敗可能是因為無法驗證應用程式套件的數位簽名所造成。 瞭解如何辨識這些失敗,以及如何處理這些失敗。

當您部署已封裝的 Windows 應用程式時,Windows 一律會嘗試驗證應用程式套件上的數位簽名。 簽章驗證失敗會阻止封裝的部署。 但是為什麼套件未通過驗證可能並不明顯。 特別是,如果您使用私人憑證(如本地測試所用)簽署套件,您往往也必須管理這些憑證的信任設定。 不正確的憑證信任設定可能會導致簽章驗證失敗。

您需要知道的事項

技術

先決條件

指示

步驟 1:檢查事件記錄檔中的診斷資訊

根據您嘗試部署應用程式的方式,您可能未收到部署失敗的有意義錯誤碼。 在此情況下,您通常可以直接從事件記錄檔取得錯誤碼。

從事件記錄檔取得錯誤碼

  1. 執行 eventvwr.msc

  2. 移至 事件檢視器 (本機)>應用程式與服務記錄>Microsoft>Windows

  3. 要檢查的第一個記錄是 AppxPackagingOM>Microsoft-Windows-AppxPackaging/Operational

  4. 部署相關的錯誤會記錄在 AppXDeployment-Server>Microsoft-Windows-AppXDeploymentServer/Operational中。

    針對部署錯誤,搜尋最近發生代碼為 404 的錯誤事件。 此錯誤事件提供錯誤碼,以及部署失敗原因的描述。 如果錯誤事件 465 在 404 事件之前,開啟套件時發生問題。

如果未發生 465 錯誤,請參閱一般疑難解答 ,關於 Windows 應用程式的封裝、部署和查詢。 否則,請參閱下表,以取得常見錯誤碼,這些錯誤碼會顯示在錯誤事件 465 的錯誤字串中:

錯誤碼 錯誤 描述 建議
0x80073CF0 安裝打開套裝失敗錯誤 無法開啟應用程式套件。 此錯誤通常表示套件發生問題。 您必須再次建置並簽署套件。 如需詳細資訊,請參閱 使用 App Packager
0x80080205 APPX_E_INVALID_BLOCKMAP (無效的區塊映射) 應用程式套件遭到竄改,或具有無效的區塊對應。 封裝已損毀。 您必須再次建置並簽署套件。 如需詳細資訊,請參閱 使用 App Packager
0x800B0004 信任錯誤_主體不被信任 應用程式套件已遭到竄改。 套件內容已不再符合其電子簽章。 您需要再次簽收包裹。 如需詳細資訊,請參閱 如何使用 SignTool簽署應用程式套件。
0x800B0100 TRUST_E_NOSIGNATURE(無簽名錯誤) 應用程式套件未簽署。 只能部署已簽署的 Windows 應用程式套件。 如需簽署應用程式套件的相關信息,請參閱 如何使用 SignTool簽署應用程式套件。
0x800B0109 CERT_E_UNTRUSTED_ROOT 用來簽署的應用程式套件的憑證鏈結是以不受信任的根憑證作為終點。 繼續進行步驟 2 以針對憑證信任進行疑難解答。
0x800B010A CERT_E_CHAINING 無法建立憑證鏈結,讓用來簽署應用程式套件的憑證連接到受信任的根證書頒發機構。 繼續進行步驟 2 以針對憑證信任進行疑難解答。

 

步驟 2:判斷用來簽署應用程式套件的憑證鏈結

若要找出本機計算機必須信任的憑證,您可以檢查應用程式套件上數位簽名的憑證鏈結。

判斷憑證鏈結

  1. 在 [檔案總管] 中,以滑鼠右鍵按下應用程式套件,然後選取 [屬性]
  2. 在 [屬性] 對話框中,選取 [數位簽名] 索引標籤,這也會顯示簽章是否可以驗證。
  3. 在 [簽章] 清單中,選取簽章,然後按一下 [詳細資訊] 按鈕。
  4. 在 [數位簽名詳細數據] 對話框中,按一下 [檢視憑證] 按鈕。
  5. 在 [憑證] 對話框中,選取 [憑證路徑] 索引標籤。

鏈結中的最上層憑證是根憑證,而底部憑證是簽名憑證。 如果憑證鏈中只有單一憑證,簽署憑證也是它自己的根憑證。 您可以判斷每個憑證的序號,然後與 Certutil搭配使用:

判斷每個憑證的序號

  1. 在 [認證路徑] 窗格中,選取憑證,然後按下 [檢視憑證]
  2. 在 [憑證] 對話框中,選取 [詳細資料] 頁籤,以顯示憑證的序號和其他實用屬性。

步驟 3:判斷本機計算機信任的憑證

若要能夠部署應用程式套件,它不僅必須在使用者的環境中被信任,還必須在本機電腦環境中被信任。 因此,在上一個步驟的 [數字簽名] 索引標籤中檢視時,數位簽名可能會顯示有效,但在部署應用程式套件期間仍會失敗驗證。

判斷用來簽署應用程式套件的憑證鏈結是否由本機計算機特別信任

  1. 執行此指令:

    CertUtil.exe -store Root rootCertSerialNumber
    
  2. 執行此指令:

    CertUtil.exe -store TrustedPeople signingCertSerialNumber
    

如果未指定憑證序號,Certutil 會列出該存放區本機計算機信任的所有憑證。

套件可能會因為憑證鏈結錯誤而無法安裝,即使簽署憑證不是自我簽署,且根憑證在本機電腦的根存放區中。 在此情況下,中繼證書頒發機構單位可能會有信任的問題。 如需此問題的詳細資訊,請參閱 使用憑證

備註

如果您判斷無法部署套件,因為簽署憑證不受信任,除非您知道套件的來源,而且您信任該套件,否則請勿安裝套件。

如果您想要手動信任要安裝的應用程式(例如,若要安裝您自己的測試簽署應用程式套件),您可以從應用程式套件手動將憑證新增至本機計算機憑證信任。

手動將憑證新增至本機電腦的信任憑證存儲區

  1. 在 [檔案總管] 中,以滑鼠右鍵點擊應用程式套件,然後在快捷選單中選取 屬性
  2. 在 [屬性] 對話框中,選取 [數字簽名] 索引標籤。
  3. 在 [簽章] 清單中,選取簽章,然後按一下 [詳細資訊] 按鈕。
  4. 在 [數位簽名詳細數據] 對話框中,按一下 [檢視憑證] 按鈕。
  5. 在 [憑證] 對話框中,按兩下 [安裝憑證...] 按鈕。
  6. 在 [憑證匯入精靈] 中,選取 [本機計算機],然後按兩下 [下一步]。 您必須授與系統管理員許可權才能繼續。
  7. 選取 將所有憑證放置在以下存放區,然後瀏覽至 信任的使用者 存放區。
  8. 按一下 [下一步],然後按一下 [完成] 以完成精靈。

在此手動新增之後,您可以看到憑證現在在 [憑證] 對話框中受到信任。

在不再需要憑證之後,您可以移除憑證。

移除憑證

  1. 以系統管理員身分執行 Cmd.exe

  2. 在系統管理員命令提示字元中,執行此命令:

    Certutil -store TrustedPeople
    
  3. 尋找您安裝的憑證序號。 此數位是 certID

  4. 執行此指令:

    Certutil -delStore TrustedPeople certID
    

我們建議您避免將根憑證手動新增至本機 受信任的根憑證授權單位證書存放區。 使用鏈結至相同根證書的憑證來簽署多個應用程式,例如業務應用程式,比將個別憑證安裝到受信任的使用者存放區更有效率。 信任的人員存放區包含預設視為信任的憑證,因此不會由較高授權單位或憑證信任清單或鏈結驗證。 若需考慮將證書新增至信任的根憑證授權機構證書存儲區,請參閱 Code-Signing 最佳實務

安全性考慮

藉由將憑證新增至 本機計算機證書存儲,您就會影響計算機上的所有用戶的憑證信任。 我們建議您將任何用於測試應用程式套件的代碼簽署憑證安裝至受信任的人員憑證存儲區。 當不再需要憑證時,請立即移除這些憑證,以防止它們用來危害系統信任。 如果您建立自己的測試憑證來簽署應用程式套件,我們也建議您限制與測試憑證相關聯的許可權。 如需建立簽署應用程式套件測試憑證的資訊,請參閱 如何建立應用程式套件簽署憑證

範例

建立應用程式套件範例

概念

針對 Windows 應用程式的封裝、部署和查詢進行疑難解答

Certutil 任務來管理憑證