Delen via


Problemen met extensiecertificaat oplossen op een Windows-VM in Azure

In dit artikel wordt beschreven hoe u problemen met certificaten kunt identificeren en oplossen op een virtuele Windows-machine (VM) die gebruikmaakt van een extensie. Deze problemen hebben meestal betrekking op cryptografische bewerkingen of het certificaat zelf.

Controlelijst voor probleemoplossing

De gastlogboeken weergeven

Controleer de gastlogboeken voor meer informatie over een fout. De meest nuttige logboeken op de Windows-VM voor het oplossen van fouten met extensiecertificaten worden weergegeven in de volgende tabel.

Log Beschrijving
Het logboekbestand C:\WindowsAzure\Logs\WaAppAgent.log Het logboek van de gastagent. Beschrijft de bewerkingen van de extensie (zoals downloaden, installeren, inschakelen en uitschakelen) en hun resultaten.
Logboekbestanden in de map C:\WindowsAzure\Logs\Plugins\<ExtensionName> Verschillende logboeken die de bewerkingen van een bepaalde extensie weergeven. Elke extensie heeft zijn eigen functies, maar de meeste extensies hebben een standaardset logboekbestanden, waaronder CommandExecution.log, CommandExecution_<Timestamp>.log, CustomScriptHandler.log en IaaSBcdrExtension<Number>.log.

Opmerking

Deze tabel bevat alleen de meest opvallende logboekbestanden. Het is geen uitgebreide lijst.

U kunt ook het hulpprogrammaCollectGuestLogs.exe uitvoeren om alle gastlogboeken te verzamelen in een .zip archiefbestand. Het hulpprogrammaCollectGuestLogs.exe bevindt zich op de Virtuele Windows-machine in een van de volgende mappen:

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

Symptomen

De volgende lijst bevat een overzicht van de meest voorkomende fouten die kunnen optreden wanneer u een extensie op een Windows-VM gebruikt:

  • FailedToDecryptProtectedSettings uitzondering: Het transportcertificaat dat wordt gebruikt om de beveiligde instellingen van de extensie te ontsleutelen, ontbreekt op de VM.

    Opmerking

    Een variant van de FailedToDecryptProtectedSettings uitzondering zorgt ervoor dat onjuiste machtigingen worden ingesteld voor de map Crypto\RSA\MachineKeys . In dit scenario wordt een van de volgende foutberichten weergegeven:

    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.
    
  • Foutbericht 'Kan het certificaat niet ophalen'.

  • CryptographicException uitzondering in de diagnostische instellingen van de VM, vergezeld van het bericht 'Het bericht met enveloppen bevat niet de opgegeven ontvanger'. In de volgende tekst wordt een voorbeeld van deze uitzondering beschreven:

    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)
    
  • Een nieuw certificaat dat naar de VM wordt gepusht, maar dat andere bewerkingen verstoort.

Oorzaak: Wijzigingen in werkstroom- en afhankelijkheidscode

Het probleem wordt voornamelijk veroorzaakt door een wijziging in het Azure-platform die rond mei 2020 is geïmplementeerd. De wijziging was om de werkstroom van de VM-extensies te verbeteren en sommige afhankelijkheden van andere Azure-onderdelen te elimineren. Hiervoor moeten extensies, aangepaste resourceproviders (CRL's) en de gastagent gezamenlijk werken. Kleine fouten hebben secundaire problemen veroorzaakt die worden weerspiegeld in de problemen met het extensiecertificaat.

Oplossing 1: Het extensiecertificaat bijwerken

Volg deze stappen om bij te werken naar een certificaat dat samen met een extensie kan worden gebruikt:

  1. Controleer of het Windows Azure CRP Certificate Generator-certificaat is opgenomen in de module Certificaten van de Microsoft-beheerconsole. Volg hiervoor de instructies in Meerdere certificaten op een Azure IaaS-VM die gebruikmaakt van extensies om de Symptomen van windows-VM's te vinden.

  2. Verwijder dat certificaat. Hiervoor selecteert u het certificaat Windows Azure CRP Certificate Generator en selecteert u vervolgens het pictogram Verwijderen .

    Opmerking

    Wanneer het Windows Azure CRP Certificate Generator-certificaat nodig is, maakt de VM het certificaat opnieuw als het ontbreekt.

  3. Activeer een nieuwe doelstatus voor de gastagent door een van de volgende opties toe te passen:

    • Voer het volgende PowerShell-script uit dat de opdrachten Get-AzureRmVM en Update-AzureRmVM bevat:

      $rg = "<name-of-the-resource-group-containing-the-virtual-machine>"
      $vmName = "<name-of-the-virtual-machine>"
      $vm = Get-AzureRmVM -ResourceGroupName $rg -Name $vmName  
      Update-AzureRmVM -ResourceGroupName $rg -VM $vm  
      
    • Voer een bewerking 'opnieuw toepassen' uit op uw VM door de instructies te volgen in de sectie 'Oplossing' van het artikel Virtuele machine die is vastgelopen in een mislukte status .

  4. Probeer de extensiebewerking opnieuw uit te voeren.

Als het probleem niet is opgelost met de certificaatupdate, stopt u de vm of maakt u de toewijzing ongedaan en start u de VM opnieuw.

Oplossing 2: De toegangsbeheerlijst (ACL) herstellen in de mappen MachineKeys of SystemKeys

Corrigeer in de map Crypto\RSA\MachineKeys de toegangsbeheerlijst (ACL) zodat de juiste machtigingen worden toegepast.

  1. Voer in een PowerShell-console met beheerdersrechten de volgende opdrachten uit om de unieke sleutelcontainernaam van het tenantcertificaat op te halen. Zorg ervoor dat u een opmerking bij een van de $certName definities plaatst, afhankelijk van of u een klassieke RDFE-VM (RedDog Front End) gebruikt (waarvoor de certificaatnaam isWindows Azure Service Management for Extensions) of een Azure Resource Manager-VM (waarvan de certificaatnaam isWindows 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. Maak een back-up van de ACL door de icacls-opdracht uit te voeren:

    icacls C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys /save machinekeys_permissions_before.aclfile /t
    
  3. Voer de volgende icacls opdrachten uit om de machtigingen voor MachineKeys te corrigeren:

    icacls C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\$fileName /grant SYSTEM:(F)
    icacls C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\$fileName /grant Administrators:(RX)
    
  4. Voer opnieuw uit icacls om de bijgewerkte MachineKeys-ACL's om te leiden naar een tekstbestand:

    icacls C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys /t > machinekeys_permissions_after.txt
    
  5. Bekijk het machinekeys_permissions_after.txt-bestand in een teksteditor om te controleren of de machtigingswijzigingen worden weergegeven zoals verwacht.

  6. Probeer de extensie opnieuw of start de gastagentservices opnieuw door het hulpprogrammaWaAppAgent.exe of WindowsAzureGuestAgent.exe uit te voeren.

Als deze procedure niet werkt, kunt u proberen de icacls opdrachten opnieuw uit te voeren (stap 2-4) in de map C:\ProgramData\Microsoft\Crypto\SystemKeys\* in plaats van de map C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\$fileName .

Meer informatie

Contacteer ons voor hulp

Als u vragen hebt of hulp nodig hebt, maak een ondersteuningsaanvraag of vraag de Azure-communityondersteuning. U kunt ook productfeedback verzenden naar de Feedback-community van Azure.