Partager via


Résoudre les problèmes de certificat d’extension sur une machine virtuelle Windows dans Azure

S’applique à : ✔️ Machine virtuelles Windows

Cet article explique comment identifier et résoudre les problèmes impliquant des certificats sur une machine virtuelle Windows qui utilise une extension. En règle générale, ces problèmes sont liés aux opérations de chiffrement ou au certificat lui-même.

Liste de contrôle pour la résolution des problèmes

Afficher les journaux d’activité invités

Pour obtenir des détails sur une erreur, vérifiez les journaux d’activité des invités. Les journaux les plus utiles sur la machine virtuelle Windows pour résoudre les erreurs de certificat d’extension sont indiqués dans le tableau suivant.

Journal Description
Fichier journal C :\WindowsAzure\Logs\WaAppAgent.log Journal de l’agent invité. Décrit les opérations de l’extension (telles que le téléchargement, l’installation, l’activation et la désactivation) et leurs résultats.
Fichiers journaux dans le dossier C :\WindowsAzure\Logs\Plugins\<ExtensionName> Différents journaux qui reflètent les opérations d’une extension particulière. Chaque extension a ses propres fonctionnalités, mais la plupart des extensions ont un ensemble standard de fichiers journaux, notamment CommandExecution.log, CommandExecution_<Timestamp>.log, CustomScriptHandler.log et IaaSBcdrExtension<Number>.log.

Note

Ce tableau contient uniquement les fichiers journaux les plus notables. Il ne s’agit pas d’une liste complète.

Vous pouvez également exécuter l’outil CollectGuestLogs.exe pour collecter tous les journaux invités dans un fichier d’archivage .zip . L’outil CollectGuestLogs.exe se trouve sur la machine virtuelle Windows dans l’un des répertoires suivants :

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

Symptômes

La liste suivante présente les erreurs les plus courantes qui peuvent se produire lorsque vous utilisez une extension sur une machine virtuelle Windows :

  • FailedToDecryptProtectedSettings exception : le certificat de transport utilisé pour déchiffrer les paramètres protégés de l’extension est manquant dans la machine virtuelle.

    Note

    Une variante de l’exception FailedToDecryptProtectedSettings entraîne la définition d’autorisations incorrectes dans le dossier Crypto\RSA\MachineKeys . Dans ce scénario, l’un des messages d’erreur suivants s’affiche :

    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.
    
  • Message d’erreur « Impossible de récupérer le certificat ».

  • CryptographicException exception dans les paramètres de diagnostic de la machine virtuelle, accompagnée du message « Le message de données enveloppées ne contient pas le destinataire spécifié ». Le texte suivant décrit un exemple de cette exception :

    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)
    
  • Un nouveau certificat envoyé à la machine virtuelle, mais interfère avec d’autres opérations.

Cause : Modifications du code de flux de travail et de dépendance

Le problème est principalement dû à une modification de la plateforme Azure qui a été implémentée vers mai 2020. La modification a été d’améliorer le flux de travail des extensions de machine virtuelle et d’éliminer certaines dépendances sur d’autres composants Azure. Il nécessite que les extensions, les fournisseurs de ressources personnalisés (CRPS) et l’agent invité fonctionnent collectivement. Les bogues mineurs ont provoqué des problèmes secondaires qui sont reflétés dans les problèmes de certificat d’extension.

Solution 1 : Mettre à jour le certificat d’extension

Procédez comme suit pour effectuer une mise à jour vers un certificat qui peut être utilisé avec succès avec une extension :

  1. Vérifiez si le certificat Générateur de certificats Windows Azure CRP est inclus dans le composant logiciel enfichable Certificats de la console de gestion Microsoft. Pour ce faire, suivez les instructions de plusieurs certificats sur une machine virtuelle IaaS Azure qui utilise des extensions pour rechercher les symptômes de la machine virtuelle Windows.

  2. Supprimez ce certificat. Pour ce faire, sélectionnez le certificat Générateur de certificats Windows Azure CRP, puis sélectionnez l’icône Supprimer .

    Note

    Lorsque le certificat Générateur de certificats Windows Azure CRP est nécessaire, la machine virtuelle recrée le certificat s’il est manquant.

  3. Déclenchez un nouvel état d’objectif pour l’agent invité en appliquant l’une des options suivantes :

    • Lancer les commandes PowerShell suivantes :

      $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
      
    • Effectuez une opération de « réappliquement » sur votre machine virtuelle en suivant les instructions de la section « Résolution » de la machine virtuelle bloquée dans un article d’état défaillant.

  4. Réessayez l’opération d’extension.

Si la mise à jour du certificat n’a pas résolu le problème, arrêtez ou libérez la machine virtuelle, puis redémarrez la machine virtuelle.

Solution 2 : Corriger la liste de contrôle d’accès (ACL) dans les dossiers MachineKeys ou SystemKeys

Dans le dossier Crypto\RSA\MachineKeys , corrigez la liste de contrôle d’accès (ACL) afin que les autorisations appropriées soient appliquées.

  1. Dans une console PowerShell d’administration, exécutez les commandes suivantes pour obtenir le nom de conteneur de clé unique du certificat de locataire. Veillez à commenter l’une des $certName définitions, selon que vous utilisez une machine virtuelle RDFE (RedDog Front End) classique (pour laquelle le nom du certificat est Windows Azure Service Management for Extensions) ou une machine virtuelle Azure Resource Manager (pour laquelle le nom du certificat est 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. Effectuez une sauvegarde de la liste de contrôle d’accès en exécutant la commande icacls :

    icacls C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys /save machinekeys_permissions_before.aclfile /t
    
  3. Exécutez les commandes suivantes icacls pour corriger les autorisations MachineKeys :

    icacls C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\$fileName /grant SYSTEM:(F)
    icacls C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\$fileName /grant Administrators:(RX)
    
  4. Réexécutez icacls pour rediriger les listes de contrôle d’accès MachineKeys mises à jour vers un fichier texte :

    icacls C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys /t > machinekeys_permissions_after.txt
    
  5. Affichez le fichier machinekeys_permissions_after.txt dans un éditeur de texte pour vérifier que les modifications d’autorisation s’affichent comme prévu.

  6. Réessayez l’extension, ou essayez de redémarrer les services de l’agent invité en exécutant l’outil WaAppAgent.exe ou WindowsAzureGuestAgent.exe .

Si cette procédure ne fonctionne pas, vous pouvez réessayer d’exécuter les icacls commandes (étapes 2 à 4) sur les dossiers génériques C :\ProgramData\Microsoft\Crypto\SystemKeys\* au lieu du dossier C :\ProgramData\Microsoft\Crypto\RSA\MachineKeys\$fileName .

Plus d’informations

Contactez-nous pour obtenir de l’aide

Pour toute demande ou assistance, créez une demande de support ou posez une question au support de la communauté Azure. Vous pouvez également soumettre des commentaires sur les produits à la communauté de commentaires Azure.