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:
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.
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.
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.
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.
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
Eseguire un backup dell'ACL eseguendo il comando icacls :
icacls C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys /save machinekeys_permissions_before.aclfile /t
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)
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
Visualizzare il file machinekeys_permissions_after.txt in un editor di testo per verificare che le modifiche alle autorizzazioni vengano visualizzate come previsto.
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.