다음을 통해 공유


Azure의 Windows VM에서 확장 인증서 문제 해결

적용 대상: ✔️ Windows VM

이 문서에서는 확장을 사용하는 Windows VM(가상 머신)의 인증서와 관련된 문제를 식별하고 해결하는 방법을 설명합니다. 일반적으로 이러한 문제는 암호화 작업 또는 인증서 자체와 관련이 있습니다.

문제 해결 검사 목록

게스트 로그 보기

오류에 대한 세부 정보를 얻으려면 게스트 로그를 확인합니다. 확장 인증서 오류 문제를 해결하기 위한 Windows VM의 가장 유용한 로그는 다음 표에 나와 있습니다.

Log 설명
C:\WindowsAzure\Logs\WaAppAgent.log 로그 파일 게스트 에이전트 로그입니다. 확장 작업(예: 다운로드, 설치, 사용 및 사용 안 함) 및 해당 결과에 대해 설명합니다.
C:\WindowsAzure\Logs\Plugins\ExtensionName> 폴더의< 로그 파일 특정 확장의 작업을 반영하는 다양한 로그입니다. 각 확장에는 고유한 기능이 있지만 대부분의 확장에는 CommandExecution.log, CommandExecution_Timestamp>.log, CustomScriptHandler.log< 및 IaaSBcdrExtension<번호>.log 등의 표준 로그 파일 집합이 있습니다.

참고 항목

이 테이블에는 가장 주목할 만한 로그 파일만 포함되어 있습니다. 포괄적인 목록은 아닙니다.

또는 CollectGuestLogs.exe 도구를 실행하여 모든 게스트 로그를 .zip 보관 파일로 수집할 수 있습니다. CollectGuestLogs.exe 도구는 다음 디렉터리 중 하나의 Windows VM에 있습니다.

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

증상

다음 목록에서는 Windows VM에서 확장을 사용할 때 발생할 수 있는 가장 일반적인 오류를 간략하게 설명합니다.

  • FailedToDecryptProtectedSettings 예외: 확장의 보호된 설정을 해독하는 데 사용되는 전송 인증서가 VM에서 누락되었습니다.

    참고 항목

    예외의 FailedToDecryptProtectedSettings 변형으로 인해 Crypto\RSA\MachineKeys 폴더에 잘못된 권한이 설정됩니다. 이 시나리오에서는 다음 오류 메시지 중 하나가 표시됩니다.

    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.
    
  • "인증서를 검색할 수 없습니다." 오류 메시지입니다.

  • CryptographicException VM 진단 설정에서 "Enveloped-data 메시지에 지정된 받는 사람이 포함되어 있지 않습니다."라는 메시지와 함께 예외가 있습니다. 다음 텍스트에서는 이 예외의 예를 설명합니다.

    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)
    
  • VM에 푸시되지만 다른 작업을 방해하는 새 인증서입니다.

원인: 워크플로 및 종속성 코드 변경

이 문제는 주로 2020년 5월 경에 구현된 Azure 플랫폼의 변경으로 인해 발생합니다. 변경 내용은 VM 확장의 워크플로를 개선하고 다른 Azure 구성 요소에 대한 일부 종속성을 제거하는 것이었습니다. 확장, CRP(사용자 지정 리소스 공급자) 및 게스트 에이전트가 공동으로 작동해야 합니다. 사소한 버그로 인해 확장 인증서 문제에 반영되는 보조 문제가 발생했습니다.

해결 방법 1: 확장 인증서 업데이트

다음 단계에 따라 확장과 함께 성공적으로 사용할 수 있는 인증서로 업데이트합니다.

  1. Windows Azure CRP 인증서 생성기 인증서가 Microsoft 관리 콘솔의 인증서 스냅인에 포함되어 있는지 확인합니다. 이렇게 하려면 확장을 사용하여 Windows VM 증상을 찾는 Azure IaaS VM의 여러 인증서에 있는 지침을 따릅니다.

  2. 해당 인증서를 삭제합니다. 이렇게 하려면 Windows Azure CRP 인증서 생성기 인증서를 선택한 다음 삭제 아이콘을 선택합니다.

    참고 항목

    Windows Azure CRP 인증서 생성기 인증서가 필요한 경우 VM은 인증서가 누락된 경우 인증서를 다시 만듭니다.

  3. 다음 옵션 중 하나를 적용하여 게스트 에이전트에 대한 새 목표 상태를 트리거합니다.

    • 다음 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
      
    • 실패한 상태 문서에서 중단된 가상 머신의 "해결" 섹션에 있는 지침에 따라 VM에서 "다시 적용" 작업을 수행합니다.

  4. 확장 작업을 다시 시도합니다.

인증서 업데이트가 문제를 해결하지 못한 경우 VM을 중지하거나 할당 취소한 다음 VM을 다시 시작합니다.

해결 방법 2: MachineKeys 또는 SystemKeys 폴더에서 ACL(액세스 제어 목록) 수정

Crypto\RSA\MachineKeys 폴더에서 올바른 권한이 적용되도록 ACL(액세스 제어 목록)을 수정합니다.

  1. 관리 PowerShell 콘솔에서 다음 명령을 실행하여 테넌트 인증서의 고유 키 컨테이너 이름을 가져옵니다. 클래식 REDDog Front End(RDFE) VM(인증서 이름이 있는)을 사용하는지 또는 인증서 이름이 Windows Azure Service Management for ExtensionsWindows Azure CRP Certificate Generator있는 Azure Resource Manager VM을 사용하는지에 따라 정의 중 하나를 $certName 주석으로 처리해야 합니다.

    # 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. icacls 명령을 실행하여 ACL의 백업을 만듭니다 .

    icacls C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys /save machinekeys_permissions_before.aclfile /t
    
  3. 다음 icacls 명령을 실행하여 MachineKeys 권한을 수정합니다.

    icacls C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\$fileName /grant SYSTEM:(F)
    icacls C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\$fileName /grant Administrators:(RX)
    
  4. 다시 실행 icacls 하여 업데이트 된 MachineKeys ACL을 텍스트 파일로 리디렉션합니다.

    icacls C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys /t > machinekeys_permissions_after.txt
    
  5. 텍스트 편집기 에서 machinekeys_permissions_after.txt 파일을 확인하여 권한 변경 내용이 예상대로 표시되는지 확인합니다.

  6. 확장을 다시 시도하거나 WaAppAgent.exe 또는 WindowsAzureGuestAgent.exe 도구를 실행하여 게스트 에이전트 서비스를 다시 시작합니다.

이 절차가 작동하지 않으면 C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\$fileName 폴더 대신 C:\ProgramData\Microsoft\Crypto\SystemKeys\* 와일드카드 폴더에서 명령을 다시 실행icacls(2-4단계)할 수 있습니다.

자세한 정보

도움을 요청하십시오.

질문이 있거나 도움이 필요한 경우 지원 요청을 생성하거나Azure 커뮤니티 지원에 문의하세요. Azure 피드백 커뮤니티에 제품 피드백을 제출할 수도 있습니다.