Condividi tramite


Risolvere i problemi relativi al certificato di estensione in una macchina virtuale Windows in Azure

Si applica a: ✔️ macchine virtuali di Windows

Questo articolo illustra come identificare e risolvere i problemi che coinvolgono certificati in una macchina virtuale Windows che usa un'estensione. In genere, questi problemi sono correlati alle operazioni di crittografia o al certificato stesso.

Elenco di controllo per la risoluzione dei problemi

Visualizzare i log guest

Per ottenere informazioni dettagliate su un errore, controllare i log guest. I log più utili nella macchina virtuale Windows per la risoluzione degli errori dei certificati di estensione sono illustrati nella tabella seguente.

Log Descrizione
File di log C:\WindowsAzure\Logs\WaAppAgent.log Log dell'agente guest. Vengono descritte le operazioni dell'estensione( ad esempio download, installazione, abilitazione e disabilitazione) e i relativi risultati.
File di log nella cartella C:\WindowsAzure\Logs\Plugins\<ExtensionName> Vari log che riflettono le operazioni di una particolare estensione. Ogni estensione ha funzionalità specifiche, ma la maggior parte delle estensioni ha un set standard di file di log, tra cui CommandExecution.log, CommandExecution_Timestamp>.log, CustomScriptHandler.log e IaaSBcdrExtension<Number>.log.<

Note

Questa tabella contiene solo i file di log più importanti. Non è un elenco completo.

In alternativa, è possibile eseguire lo strumento CollectGuestLogs.exe per raccogliere tutti i log guest in un file di archivio .zip . Lo strumento CollectGuestLogs.exe si trova nella macchina virtuale Windows in una delle directory seguenti:

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

Sintomi

L'elenco seguente illustra gli errori più comuni che possono verificarsi quando si usa un'estensione in una macchina virtuale Windows:

  • FailedToDecryptProtectedSettings eccezione: il certificato di trasporto usato per decrittografare le impostazioni protette dell'estensione non è presente nella macchina virtuale.

    Note

    Una variante dell'eccezione causa l'impostazione FailedToDecryptProtectedSettings di autorizzazioni non corrette nella cartella Crypto\RSA\MachineKeys . In questo scenario viene visualizzato uno dei messaggi di errore seguenti:

    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.
    
  • Messaggio di errore "Impossibile recuperare il certificato".

  • CryptographicException eccezione nelle impostazioni di diagnostica della macchina virtuale, accompagnata dal messaggio "Il messaggio enveloped-data non contiene il destinatario specificato". Il testo seguente descrive un esempio di questa eccezione:

    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)
    
  • Nuovo certificato di cui viene eseguito il push nella macchina virtuale, ma interferisce con altre operazioni.

Causa: modifiche al flusso di lavoro e al codice di dipendenza

Il problema è causato principalmente da una modifica della piattaforma Azure implementata intorno a maggio 2020. La modifica è stata quella di migliorare il flusso di lavoro delle estensioni della macchina virtuale ed eliminare alcune dipendenze da altri componenti di Azure. Richiede che le estensioni, i provider di risorse personalizzati e l'agente guest funzionino collettivamente. I bug secondari hanno causato problemi secondari che si riflettono nei problemi del certificato di estensione.

Soluzione 1: Aggiornare il certificato di estensione

Seguire questa procedura per eseguire l'aggiornamento a un certificato che può essere usato correttamente insieme a un'estensione:

  1. Controllare se il certificato generatore di certificati CRP di Windows Azure è incluso nello snap-in Certificati di Microsoft Management Console. A tale scopo, seguire le istruzioni riportate in Più certificati in una macchina virtuale IaaS di Azure che usa le estensioni per individuare i sintomi della macchina virtuale Windows.

  2. Eliminare il certificato. A tale scopo, selezionare il certificato Generatore di certificati CRP di Windows Azure e quindi selezionare l'icona Elimina .

    Note

    Quando è necessario il certificato generatore di certificati CRP di Windows Azure, la macchina virtuale ricrea il certificato se manca.

  3. Attivare un nuovo stato obiettivo per l'agente guest applicando una delle opzioni seguenti:

    • Eseguire i comandi di PowerShell seguenti:

      $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
      
    • Eseguire un'operazione di riapplicazione nella macchina virtuale seguendo le istruzioni riportate nella sezione "Risoluzione" della macchina virtuale bloccata in uno stato di errore.

  4. Ripetere l'operazione di estensione.

Se l'aggiornamento del certificato non ha risolto il problema, arrestare o deallocare la macchina virtuale e quindi riavviare la macchina virtuale.

Soluzione 2: Correggere l'elenco di controllo di accesso (ACL) nelle cartelle MachineKeys o SystemKeys

Nella cartella Crypto\RSA\MachineKeys correggere l'elenco di controllo di accesso (ACL) in modo che vengano applicate le autorizzazioni corrette.

  1. In una console amministrativa di PowerShell eseguire i comandi seguenti per ottenere il nome univoco del contenitore di chiavi del certificato del tenant. Assicurarsi di impostare come commento una delle $certName definizioni, a seconda che si usi una macchina virtuale RedDog Front End (RDFE) classica (per cui il nome del certificato è Windows Azure Service Management for Extensions) o una macchina virtuale di Azure Resource Manager (per cui il nome del certificato è 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. Eseguire un backup dell'ACL eseguendo il comando icacls :

    icacls C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys /save machinekeys_permissions_before.aclfile /t
    
  3. Eseguire i comandi seguenti icacls per correggere le autorizzazioni MachineKeys :

    icacls C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\$fileName /grant SYSTEM:(F)
    icacls C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\$fileName /grant Administrators:(RX)
    
  4. Eseguire icacls di nuovo per reindirizzare gli ACL MachineKeys aggiornati a un file di testo:

    icacls C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys /t > machinekeys_permissions_after.txt
    
  5. Visualizzare il file machinekeys_permissions_after.txt in un editor di testo per verificare che le modifiche alle autorizzazioni vengano visualizzate come previsto.

  6. Provare di nuovo l'estensione oppure provare a riavviare i servizi dell'agente guest eseguendo lo strumento WaAppAgent.exe o WindowsAzureGuestAgent.exe .

Se questa procedura non funziona, è possibile provare a eseguire nuovamente i icacls comandi (passaggi 2-4) nella cartella C:\ProgramData\Microsoft\Crypto\SystemKeys\* anziché C :\ProgramData\Microsoft\Crypto\RSA\MachineKeys\$fileName .

Ulteriori informazioni

Contattaci per ricevere assistenza

In caso di domande o bisogno di assistenza, creare una richiesta di supporto tecnico oppure formula una domanda nel Supporto della community di Azure. È possibile anche inviare un feedback sul prodotto al feedback della community di Azure.