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

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

當您部署已封裝的 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 ERROR_INSTALL_OPEN_PACKAGE_FAILED 無法開啟應用程式套件。 此錯誤通常表示套件發生問題。 您必須再次建置並簽署套件。 如需詳細資訊,請參閱 使用應用程式封裝器
0x80080205 APPX_E_INVALID_BLOCKMAP 應用程式套件遭到竄改,或具有無效的區塊對應。 封裝已損毀。 您必須再次建置並簽署套件。 如需詳細資訊,請參閱 使用應用程式封裝器
0x800B0004 TRUST_E_SUBJECT_NOT_TRUSTED 應用程式套件已遭到竄改。 套件內容不再符合其數字簽名。 您必須再次簽署套件。 如需詳細資訊,請參閱 如何使用 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
    

建議您避免手動將跟證書新增至本機計算機 受信任的跟證書授權單位證書存儲。 使用鏈結至相同跟證書的憑證來簽署數個應用程式,例如企業營運應用程式,比將個別憑證安裝至信任的 人員 存放區更有效率。 信任 人員 存放區包含預設視為信任的憑證,因此不會由較高授權單位或憑證信任清單或鏈結驗證。 如需將憑證新增至受信任跟證書授權單位證書存儲的考慮,請參閱 程式代碼簽署最佳做法

安全性考量

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

範例

建立應用程式套件範例

概念

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

管理憑證的 Certutil 工作