Solución de problemas de certificados de extensión en una máquina virtual Windows en Azure
Se aplica a: ✔️ Máquinas virtuales de Windows
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 de solución de problemas
Visualización de los registros de invitado
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.
Registro | 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 e IaaSBcdrExtension<Number>.log. |
Nota:
Esta tabla contiene solo los archivos de registro más importantes. No es una lista completa.
Como alternativa, puede ejecutar la herramienta CollectGuestLogs.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 la máquina virtual, acompañada del mensaje "El mensaje de datos sobres 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 interfiere con otras operaciones.
Causa: Cambios en el código de flujo de trabajo y dependencia
El problema se debe principalmente a un cambio en la plataforma Azure que se implementó alrededor de mayo de 2020. El cambio era 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:
Compruebe si el certificado del generador de certificados CRP de Windows Azure se incluye 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 encontrar los síntomas de la máquina virtual Windows.
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.
Desencadene un nuevo estado de objetivo para el agente invitado aplicando una de las siguientes opciones:
Ejecute los comandos de PowerShell siguientes:
$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
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 estado de error .
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, a continuación, vuelva a iniciar la máquina virtual.
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.
En una consola de PowerShell administrativa, ejecute los siguientes comandos para obtener el nombre de contenedor de clave único 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 de RedDog (RDFE) (para la que el nombre del certificado esWindows Azure Service Management for Extensions
) o una máquina virtual de Azure Resource Manager (para la que el nombre del certificado esWindows 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
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
Ejecute los siguientes
icacls
comandos para corregir los permisos MachineKeys :icacls C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\$fileName /grant SYSTEM:(F) icacls C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\$fileName /grant Administrators:(RX)
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
Vea el archivo machinekeys_permissions_after.txt en un editor de texto para comprobar que los cambios de permisos aparecen según lo previsto.
Vuelva a intentar la extensión o intente reiniciar los servicios del agente invitado mediante la ejecución de la herramienta WaAppAgent.exe o WindowsAzureGuestAgent.exe .
Si este procedimiento no funciona, puede intentar volver a ejecutar los icacls
comandos (pasos 2-4) en las carpetas comodín C:\ProgramData\Microsoft\Crypto\SystemKeys\* en lugar de 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.