Udostępnij za pośrednictwem


Rozwiązywanie problemów z certyfikatem rozszerzenia na maszynie wirtualnej z systemem Windows na platformie Azure

Dotyczy: ✔️ maszyny wirtualne z systemem Windows

W tym artykule omówiono sposób identyfikowania i rozwiązywania problemów obejmujących certyfikaty na maszynie wirtualnej z systemem Windows korzystającej z rozszerzenia. Zazwyczaj te problemy są związane z operacjami kryptograficznymi lub samym certyfikatem.

Lista kontrolna rozwiązywania problemów

Wyświetlanie dzienników gościa

Aby uzyskać szczegółowe informacje o błędzie, sprawdź dzienniki gościa. W poniższej tabeli przedstawiono najbardziej przydatne dzienniki na maszynie wirtualnej z systemem Windows na potrzeby rozwiązywania problemów z błędami certyfikatu rozszerzenia.

Dziennik opis
Plik dziennika C:\WindowsAzure\Logs\WaAppAgent.log Dziennik agenta gościa. Opisuje operacje rozszerzenia (takie jak pobieranie, instalowanie, włączanie i wyłączanie) oraz ich wyniki.
Pliki dziennika w folderze C:\WindowsAzure\Logs\Plugins\<ExtensionName> Różne dzienniki odzwierciedlające operacje określonego rozszerzenia. Każde rozszerzenie ma własne funkcje, ale większość rozszerzeń ma standardowy zestaw plików dziennika, w tym CommandExecution.log, CommandExecution_Timestamp>.log, CustomScriptHandler.log i IaaSBcdrExtension< Number>.log.<

Uwaga 16.

Ta tabela zawiera tylko najbardziej godne uwagi pliki dziennika. Nie jest to pełna lista.

Alternatywnie możesz uruchomić narzędzie CollectGuestLogs.exe , aby zebrać wszystkie dzienniki gościa w pliku archiwum .zip . Narzędzie CollectGuestLogs.exe znajduje się na maszynie wirtualnej z systemem Windows w jednym z następujących katalogów:

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

Symptomy

Poniższa lista zawiera najbardziej typowe błędy, które mogą wystąpić podczas korzystania z rozszerzenia na maszynie wirtualnej z systemem Windows:

  • FailedToDecryptProtectedSettings wyjątek: brak certyfikatu transportu używanego do odszyfrowywania chronionych ustawień rozszerzenia z maszyny wirtualnej.

    Uwaga 16.

    Wariant wyjątku FailedToDecryptProtectedSettings powoduje ustawienie nieprawidłowych uprawnień w folderze Crypto\RSA\MachineKeys . W tym scenariuszu zostanie wyświetlony jeden z następujących komunikatów o błędach:

    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.
    
  • Komunikat o błędzie "Nie można pobrać certyfikatu".

  • CryptographicException wyjątek w ustawieniach diagnostyki maszyny wirtualnej, wraz z komunikatem "Wiadomość o kopertach danych nie zawiera określonego adresata". W poniższym tekście opisano przykład tego wyjątku:

    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)
    
  • Nowy certyfikat, który jest wypychany do maszyny wirtualnej, ale zakłóca inne operacje.

Przyczyna: Zmiany kodu przepływu pracy i zależności

Problem jest spowodowany głównie zmianą platformy Azure, która została wdrożona około maja 2020 r. Zmiana polegała na ulepszeniu przepływu pracy rozszerzeń maszyn wirtualnych i wyeliminowaniu niektórych zależności od innych składników platformy Azure. Wymaga to, aby rozszerzenia, niestandardowe dostawcy zasobów (CSP) i agent gościa działały zbiorczo. Drobne błędy spowodowały problemy pomocnicze, które zostały odzwierciedlone w problemach z certyfikatem rozszerzenia.

Rozwiązanie 1. Aktualizowanie certyfikatu rozszerzenia

Wykonaj następujące kroki, aby zaktualizować certyfikat, który może być pomyślnie używany wraz z rozszerzeniem:

  1. Sprawdź, czy certyfikat generatora certyfikatów CRP platformy Windows Azure jest uwzględniony w przystawce Certyfikaty konsoli zarządzania firmy Microsoft. W tym celu postępuj zgodnie z instrukcjami w temacie Wiele certyfikatów na maszynie wirtualnej IaaS platformy Azure, która używa rozszerzeń do znajdowania objawów maszyny wirtualnej z systemem Windows.

  2. Usuń ten certyfikat. W tym celu wybierz certyfikat generatora certyfikatów CRP platformy Windows Azure, a następnie wybierz ikonę Usuń.

    Uwaga 16.

    Jeśli brakuje certyfikatu generatora certyfikatów CRP platformy Windows Azure, maszyna wirtualna ponownie utworzy certyfikat.

  3. Wyzwól nowy stan celu agenta gościa, stosując jedną z następujących opcji:

    • Uruchom następujące polecenia programu 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
      
    • Wykonaj operację "ponownie zastosuj" na maszynie wirtualnej, postępując zgodnie z instrukcjami w sekcji "Rozwiązanie" maszyny wirtualnej zablokowanej w stanie niepowodzenia.

  4. Ponów próbę wykonania operacji rozszerzenia.

Jeśli aktualizacja certyfikatu nie rozwiązała problemu, zatrzymaj lub cofnij przydział maszyny wirtualnej, a następnie uruchom ponownie maszynę wirtualną.

Rozwiązanie 2. Naprawianie listy kontroli dostępu (ACL) w folderach MachineKeys lub SystemKeys

W folderze Crypto\RSA\MachineKeys napraw listę kontroli dostępu (ACL), aby były stosowane odpowiednie uprawnienia.

  1. W administracyjnej konsoli programu PowerShell uruchom następujące polecenia, aby uzyskać unikatową nazwę kontenera klucza certyfikatu dzierżawy. Upewnij się, że oznaczysz jako komentarz jedną z $certName definicji, w zależności od tego, czy używasz klasycznej maszyny wirtualnej frontonu reddog (RDFE) (dla której nazwa certyfikatu to Windows Azure Service Management for Extensions) lub maszyny wirtualnej usługi Azure Resource Manager (dla której nazwa certyfikatu to 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. Utwórz kopię zapasową listy ACL, uruchamiając polecenie icacls :

    icacls C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys /save machinekeys_permissions_before.aclfile /t
    
  3. Uruchom następujące icacls polecenia, aby poprawić uprawnienia MachineKeys :

    icacls C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\$fileName /grant SYSTEM:(F)
    icacls C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\$fileName /grant Administrators:(RX)
    
  4. Uruchom ponownie polecenie icacls , aby przekierować zaktualizowane listy ACL usługi MachineKeys do pliku tekstowego:

    icacls C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys /t > machinekeys_permissions_after.txt
    
  5. Wyświetl plik machinekeys_permissions_after.txt w edytorze tekstów, aby sprawdzić, czy zmiany uprawnień są wyświetlane zgodnie z oczekiwaniami.

  6. Spróbuj ponownie uruchomić rozszerzenie lub spróbuj ponownie uruchomić usługi agenta gościa, uruchamiając narzędzie WaAppAgent.exe lub WindowsAzureGuestAgent.exe .

Jeśli ta procedura nie zadziała, możesz spróbować ponownie uruchomić icacls polecenia (kroki 2–4) w folderze C:\ProgramData\Microsoft\Crypto\SystemKeys\* zamiast folderów C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\$fileName .

Więcej informacji

Skontaktuj się z nami, aby uzyskać pomoc

Jeśli masz pytania lub potrzebujesz pomocy, utwórz wniosek o pomoc techniczną lub zadaj pytanie w społeczności wsparcia dla platformy Azure. Możesz również przesłać opinię o produkcie do społeczności opinii na temat platformy Azure.