Compartir a través de


Solución de problemas de certificados de extensión en una máquina virtual Windows en Azure

En este artículo se describe cómo identificar y corregir problemas que implican certificados en una máquina virtual (VM) Windows que usa una extensión. Normalmente, estos problemas están relacionados con las operaciones criptográficas o el propio certificado.

Lista de comprobación para la solución de problemas

Visualización de los registros de invitados

Para obtener detalles sobre un error, compruebe los registros de invitado. Los registros más útiles de la máquina virtual Windows para solucionar errores de certificado de extensión se muestran en la tabla siguiente.

Log Descripción
El archivo de registro C:\WindowsAzure\Logs\WaAppAgent.log Registro del agente invitado. Describe las operaciones de la extensión (como descargar, instalar, habilitar y deshabilitar) y sus resultados.
Archivos de registro en la carpeta C:\WindowsAzure\Logs\Plugins\<ExtensionName> Varios registros que reflejan las operaciones de una extensión determinada. Cada extensión tiene sus propias características, pero la mayoría de las extensiones tienen un conjunto estándar de archivos de registro, incluidos CommandExecution.log, CommandExecution_<Timestamp>.log, CustomScriptHandler.log y IaaSBcdrExtension<Number>.log.

Nota:

Esta tabla contiene solo los archivos de registro más notables. No es una lista completa.

Como alternativa, puede ejecutar la herramienta deCollectGuestLogs.exe para recopilar todos los registros de invitado en un archivo de archivo.zip . La herramienta CollectGuestLogs.exe se encuentra en la máquina virtual Windows en uno de los directorios siguientes:

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

Síntomas

En la lista siguiente se describen los errores más comunes que pueden producirse al usar una extensión en una máquina virtual Windows:

  • FailedToDecryptProtectedSettings excepción: falta el certificado de transporte que se usa para descifrar la configuración protegida de la extensión de la máquina virtual.

    Nota:

    Una variante de la FailedToDecryptProtectedSettings excepción hace que se establezcan permisos incorrectos en la carpeta Crypto\RSA\MachineKeys . En este escenario, se muestra uno de los siguientes mensajes de error:

    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.
    
  • Mensaje de error "No se puede recuperar el certificado".

  • CryptographicException excepción en la configuración de diagnóstico de máquina virtual, acompañada por el mensaje "El mensaje de datos sobre no contiene el destinatario especificado". En el texto siguiente se describe un ejemplo de esta excepción:

    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)
    
  • Nuevo certificado que se inserta en la máquina virtual, pero que interfiere con otras operaciones.

Causa: Cambios en el código de dependencia y flujo de trabajo

El problema se debe principalmente a un cambio en la plataforma Azure que se implementó alrededor de mayo de 2020. El cambio fue mejorar el flujo de trabajo de las extensiones de máquina virtual y eliminar algunas dependencias de otros componentes de Azure. Requiere que las extensiones, los proveedores de recursos personalizados (CRP) y el agente invitado funcionen colectivamente. Los errores menores han causado problemas secundarios que se reflejan en los problemas del certificado de extensión.

Solución 1: Actualización del certificado de extensión

Siga estos pasos para actualizar a un certificado que se puede usar correctamente junto con una extensión:

  1. Compruebe si el certificado del generador de certificados CRP de Windows Azure está incluido en el complemento Certificados de Microsoft Management Console. Para ello, siga las instrucciones de Varios certificados en una máquina virtual IaaS de Azure que usa extensiones para buscar los síntomas de la máquina virtual Windows.

  2. Elimine ese certificado. Para ello, seleccione el certificado generador de certificados CRP de Windows Azure y, a continuación, seleccione el icono Eliminar .

    Nota:

    Cuando se necesita el certificado del generador de certificados CRP de Windows Azure , la máquina virtual vuelve a crear el certificado si falta.

  3. Desencadene un nuevo estado objetivo para el agente invitado aplicando una de las siguientes opciones:

    • Ejecute el siguiente script de PowerShell que contiene los comandos Get-AzureRmVM y Update-AzureRmVM :

      $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  
      
    • Realice una operación de "volver a aplicar" en la máquina virtual siguiendo las instrucciones de la sección "Resolución" de la máquina virtual bloqueada en un artículo de estado con error .

  4. Vuelva a intentar la operación de extensión.

Si la actualización del certificado no corrigió el problema, detenga o desasigne la máquina virtual y vuelva a iniciarla.

Solución 2: Corrección de la lista de control de acceso (ACL) en las carpetas MachineKeys o SystemKeys

En la carpeta Crypto\RSA\MachineKeys , corrija la lista de control de acceso (ACL) para que se apliquen los permisos correctos.

  1. En una consola administrativa de PowerShell, ejecute los siguientes comandos para obtener el nombre único del contenedor de claves del certificado de inquilino. Asegúrese de comentar una de las $certName definiciones, en función de si usa una máquina virtual clásica de Front-End RedDog (RDFE) (para la que el nombre del certificado es Windows Azure Service Management for Extensions) o una máquina virtual de Azure Resource Manager (para la que el nombre del certificado es 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. Realice una copia de seguridad de la ACL ejecutando el comando icacls :

    icacls C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys /save machinekeys_permissions_before.aclfile /t
    
  3. Ejecute los siguientes icacls comandos para corregir los permisos de MachineKeys :

    icacls C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\$fileName /grant SYSTEM:(F)
    icacls C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\$fileName /grant Administrators:(RX)
    
  4. Vuelva a ejecutar icacls para redirigir las ACL de MachineKeys actualizadas a un archivo de texto:

    icacls C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys /t > machinekeys_permissions_after.txt
    
  5. Vea el archivo machinekeys_permissions_after.txt en un editor de texto para comprobar que los cambios de permisos aparecen según lo esperado.

  6. Vuelva a intentar la extensión o intente reiniciar los servicios del agente invitado ejecutando la herramientaWaAppAgent.exe o WindowsAzureGuestAgent.exe .

Si este procedimiento no funciona, puede intentar ejecutar los icacls comandos de nuevo (pasos 2-4) en las carpetas comodín C:\ProgramData\Microsoft\Crypto\SystemKeys\* en lugar de en la carpeta C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\$fileName .

Más información

Ponte en contacto con nosotros para obtener ayuda

Si tiene preguntas o necesita ayuda, cree una solicitud de soporte o busque consejo en la comunidad de Azure. También puede enviar comentarios sobre el producto con los comentarios de la comunidad de Azure.