共用方式為


針對 Azure 中 Windows VM 上的擴充功能憑證問題進行疑難解答

適用於:✔️ Windows VM

本文討論如何識別並修正使用擴充功能的 Windows 虛擬機 (VM) 上涉及憑證的問題。 這些問題通常與密碼編譯作業或憑證本身有關。

疑難排解檢查清單

檢視來賓記錄

若要取得錯誤的詳細數據,請檢查來賓記錄。 下表顯示 Windows VM 上用於疑難解答擴充功能憑證錯誤的最有用記錄。

Log 描述
C:\WindowsAzure\Logs\WaAppAgent.log記錄檔 客體代理程式記錄檔。 描述擴充功能的作業(例如下載、安裝、啟用和停用)及其結果。
C:\WindowsAzure\Logs\Plugins\<ExtensionName> 資料夾中的記錄檔 反映特定擴充功能作業的各種記錄。 每個延伸模組都有自己的功能,但大多數擴充功能都有一組標準記錄檔,包括CommandExecution.log、CommandExecution_Timestamp.log、CustomScriptHandler.log和 IaaSBcdrExtension<Number>.log<>

注意

此數據表只包含最值得注意的記錄檔。 這不是完整的清單。

或者,您可以執行 CollectGuestLogs.exe 工具,將所有來賓記錄收集到 .zip 封存盤案。 CollectGuestLogs.exe工具位於下列其中一個目錄中的 Windows VM 上:

  • C:\WindowsAzure\Packages
  • C:\WindowsAzure\GuestAgent_<VersionNumber>_<Timestamp>

徵兆

下列清單概述您在 Windows VM 上使用擴充功能時可能發生的最常見錯誤:

  • FailedToDecryptProtectedSettings exception:VM 中遺漏用來解密擴充功能受保護設定的傳輸憑證。

    注意

    例外狀況的FailedToDecryptProtectedSettings變體會導致在 Crypto\RSA\MachineKeys 資料夾上設定不正確的許可權。 在此案例中,會顯示下列其中一個錯誤訊息:

    System.Security.Cryptography.CryptographicException: Keyset does not exist  
      at System.Security.Cryptography.Pkcs.EnvelopedCms.DecryptContent(RecipientInfoCollection recipientInfos, X509Certificate2Collection extraStore)  
      at Microsoft.Azure.Plugins.Diagnostics.dll.PluginConfigurationSettingsProvider.DecryptPrivateConfig(String encryptedConfig)  
    
    Failed to decode, decrypt, and deserialize the protected settings string. Error Message: Keyset does not exist"
    
    Decrypting Protected Settings - Invalid provider type specified
    
    [ERROR] Failed to get TransportCertificate. Error: Microsoft.WindowsAzure.GuestAgent.CertificateManager.CryptographyNative+PInvokeException: Self-signed Certificate Generation failed. Error Code: -2146893808.
    
  • 「無法擷取憑證」錯誤訊息。

  • CryptographicException VM 診斷設定中的例外狀況,並附有訊息:「信封數據訊息不包含指定的收件者」。下列文字描述此例外狀況的範例:

    DiagnosticsPluginLauncher.exe Information: 0 : [6/29/2020 1:32:20 PM] Decrypting private configuration
    
    DiagnosticsPluginLauncher.exe Warning: 0 : [6/29/2020 1:32:20 PM] No certficate with given thumbprint found in the certificate store. Thumbprint:34C8CDC747693E0E33A9648703E3990EC4F2C484
    
    DiagnosticsPluginLauncher.exe Information: 0 : [6/29/2020 1:32:20 PM] Retrying after 30 seconds. Retry attempt 1
    
    DiagnosticsPluginLauncher.exe Warning: 0 : [6/29/2020 1:32:50 PM] No certficate with given thumbprint found in the certificate store. Thumbprint:34C8CDC747693E0E33A9648703E3990EC4F2C484
    
    DiagnosticsPluginLauncher.exe Information: 0 : [6/29/2020 1:32:50 PM] Retrying after 30 seconds. Retry attempt 2
    
    DiagnosticsPluginLauncher.exe Warning: 0 : [6/29/2020 1:33:20 PM] No certficate with given thumbprint found in the certificate store. Thumbprint:34C8CDC747693E0E33A9648703E3990EC4F2C484
    
    DiagnosticsPluginLauncher.exe Information: 0 : [6/29/2020 1:33:20 PM] Retrying after 30 seconds. Retry attempt 3
    
    DiagnosticsPluginLauncher.exe Error: 0 : [6/29/2020 1:33:50 PM] System.Security.Cryptography.CryptographicException: The enveloped-data message does not contain the specified recipient.
      at System.Security.Cryptography.Pkcs.EnvelopedCms.DecryptContent(RecipientInfoCollection recipientInfos, X509Certificate2Collection extraStore)
      at Microsoft.Azure.Plugins.Diagnostics.dll.PluginConfigurationSettingsProvider.DecryptPrivateConfig(String encryptedConfig)
    
  • 推送至 VM 的新憑證,但會干擾其他作業。

原因:工作流程和相依性程式代碼變更

此問題主要是由在 2020 年 5 月左右實作的 Azure 平台變更所造成。 變更是改善 VM 擴充功能的工作流程,並排除其他 Azure 元件上的一些相依性。 它需要擴充功能、自定義資源提供者 (CRP) 和客體代理程式共同運作。 次要錯誤已造成延伸模組憑證問題反映的次要問題。

解決方案 1:更新延伸模組憑證

請遵循下列步驟來更新可搭配擴充功能成功使用的憑證:

  1. 檢查 Windows Azure CRP 憑證產生器憑證是否包含在 Microsoft 管理控制台的 [憑證] 嵌入式管理單元中。 若要這樣做,請遵循使用擴充功能來尋找 Windows VM 徵兆的 Azure IaaS VM 上多個憑證中的指示。

  2. 刪除該憑證。 若要這樣做,請選取 Windows Azure CRP 憑證產生器 憑證,然後選取 [刪除] 圖示。

    注意

    需要 Windows Azure CRP 憑證產生器憑證時,VM 會在遺失時重新建立憑證。

  3. 套用下列其中一個選項,以觸發客體代理程式的新目標狀態:

    • 執行下列 PowerShell 命令:

      $rg = "<name-of-the-resource-group-containing-the-virtual-machine>"
      $vmName = "<name-of-the-virtual-machine>"
      $vm = Get-AzVM -ResourceGroupName $rg -Name $vmName  
      Update-AzVM -ResourceGroupName $rg -VM $vm
      
    • 遵循虛擬機陷入失敗狀態一文的「解決」一節中的指示,在您的 VM 上執行「重新套用」作業。

  4. 重試擴充作業。

如果憑證更新未修正問題,請停止或解除分配 VM,然後再次啟動 VM。

解決方案 2:修正 MachineKeys 或 SystemKeys 資料夾中的存取控制清單 (ACL)

Crypto\RSA\MachineKeys 資料夾中,修正存取控制清單 (ACL),以便套用正確的許可權。

  1. 在系統管理 PowerShell 控制台中,執行下列命令以取得租用戶憑證的唯一密鑰容器名稱。 請確定您已將其中一個 $certName 定義批注化,視您使用的是傳統 RedDog 前端 (RDFE) VM (憑證名稱 Windows Azure Service Management for Extensions為哪一個)或 Azure Resource Manager VM (憑證名稱為 Windows Azure CRP Certificate Generator):

    # Comment out one of the following certificate name definitions.
    $certName = "Windows Azure Service Management for Extensions"  # Classic RDFE VM
    $certName = "Windows Azure CRP Certificate Generator"          # Azure Resource Manager VM
    
    $fileName = (Get-ChildItem Cert:\LocalMachine\My |
                    Where-Object {$_.Subject -eq 'DC=$certName'}
                ).PrivateKey.CspKeyContainerInfo.UniqueKeyContainerName
    
  2. 執行 icacls 命令來備份 ACL:

    icacls C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys /save machinekeys_permissions_before.aclfile /t
    
  3. 執行下列 icacls 命令來更正 MachineKeys 權限:

    icacls C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\$fileName /grant SYSTEM:(F)
    icacls C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\$fileName /grant Administrators:(RX)
    
  4. 再次執行 icacls ,將更新 的 MachineKeys ACL 重新導向至文字檔:

    icacls C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys /t > machinekeys_permissions_after.txt
    
  5. 文本編輯器中檢視machinekeys_permissions_after.txt 檔案,以確認許可權變更如預期般顯示。

  6. 再次嘗試擴充功能,或執行 WaAppAgent.exeWindowsAzureGuestAgent.exe 工具,嘗試重新啟動客體代理程序服務

如果此程式無法運作,您可以嘗試在 C:\ProgramData\Microsoft\Crypto\SystemKeys\* 通配符資料夾上再次執行icacls命令(步驟 2-4),而不是 C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\$fileName 資料夾。

其他相關資訊

與我們連絡,以取得說明

如果您有問題或需要相關協助,請建立支援要求,或詢問 Azure community 支援。 您也可以向 Azure 意見反應社群提交產品意見反應。