Entra Troubleshooting: unable to validate credentials

Nastává období, kdy sousta správců IT provádí upgrade služby Microsoft Entra Active Directory Connect. Obrátilo se na mne několik klientů, kteří se, při pokusu o aktualizaci Entra AD Connect, setkali s chybami.  V průvodci setkali s hlášením typu „nemůžeme se připojit k Azure AD pomocí vašehopověření globálního správce Azure AD“. Zobrazí se chyba, že nelze ověřit pověření kvůli očekávané chybě.

V tomto článku se pokusím přiblížit, proč k tomu dochází, a řešení problému „Azure AD Connect unable to validate credentials.

Obsah

EntraAD Connect: chyba ověření

Když kliknete na odkaz „Learn more“, nebo si otevřete napřímo Entra AD Connect log (C:\program data\aadconnect\trace***** .log), obdržíte přibližně takový výpis:

				
					[07:58:56.609] [ 16] [ERROR] Authenticate-MSAL: unexpected exception [Unspecified-Authentication-Failure] - extendedMessage: An error occurred while sending the request. | The underlying connection was closed: An unexpected error occurred on a send. | Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host. | An existing connection was forcibly closed by the remote host webException: The underlying connection was closed: An unexpected error occurred on a send.
STS endpoint: HTTPS://LOGIN.MICROSOFTONLINE.COM/xxx.CZ
[07:58:56.612] [ 16] [ERROR] Authenticate-MSAL: exception details: System.Net.Http.HttpRequestException: An error occurred while sending the request. ---> System.Net.WebException: The underlying connection was closed: An unexpected error occurred on a send. ---> System.IO.IOException: Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host. ---> System.Net.Sockets.SocketException: An existing connection was forcibly closed by the remote host
				
			

Error parsing WS-Trust-response from endpoint

Další chyba, která se ke mě dostala je velmi podobná, ale trochu jiná.

Při provádění úlohy Configure AAD Sync došlo k chybě

Poslední chyba, která se ke mě dostala, byla trochu jiná. Klient udělal tu věc, že na server, na kterém běžela služba Entra AD Connect, naistaloval roli „Active Directory Domain Services“ a tím mu celá Entra spadla a řešilo se několik věcí. První věc, která se musela vyřešit, byla oprava oprávnění, protože na doménovém řadiči samozřejmě přestaly fungovat lokální účty. Kompletní odinstalace a opětovná instalace s obnovou konfigurace vyřešila první část a to problém s oprávněním, které bylo nutné jak pro spuštění samotné služby ADSync, ale také pro běh databáze a dalších komponent.

Nastal ale jiný problém, protože služba nešla korektně nastartovat a synchronizace neprobíhala. Začaly se objevoval další chyby:

Při provádění úlohy Configure AAD Sync došlo k chybě

V trace logu toho moc nebylo. Nicméně, Event logy mi naštěstí řekly o trochu víc a nasměrovaly mne správným směrem.

Jak postupovat

Pokud patříte mezi ty „šťastlivce“, které některá z těchto chyb také potkala, nezoufejte, řešení existuje (a to hned několik):

  1. Ověřte, zda-li máte aktuální verzi Entra AD Conenct
  2. Interactive authentication – Vypněte službu ADSync a nastartuje ji znovu s parametrem /InteractiveAuth
  3. Ověřte, zda operační systém podporuje TLS 1.2

Entra AD Connect - Interactive authentication

Jedním z možných řešení jak vyřešit problém služby Entra AD Connect, která se nemůže ověřit kvůli neočekávané chybě může být spuštěni služby v InteractiveAuth módu.

Chcete-li opravit chybu Azure AD Connect unable to validate credentials due to an unexpected error, postupujte podle následujících kroků:

1. Spusťte příkazový řádek jako správce.

2. Přejděte do složky Microsoft Azure Active Directory Connect.

cd "C:\Program Files\Microsoft Azure Active Directory Connect"

3. Spusťte následující příkaz

AzureADConnect.exe /InteractiveAuth

4. Zobrazí se průvodce aktualizací a konfogurací Azure Active Directory Connect, průvodcem projděte běžným způspobem, třeba podle tohoto návodu.

Musím přiznat, že ani v jednom z těchto tří případů mi výše uvedený postup nepomohl.

Co mne na těchto chybových hláškách ale zaujalo, bylo „Klient nemůže komunikovat se serverem, protože nepoužívají žádný společný algoritmus„.

Když jsem v únoru psal článek o přesunu Entra AD Connect na nový server, vypsal jsem do něj všechny pre-rekvizity, které je potřeba pro Entra V2 splnit.

Všechna chybová hlášení měla stejný základ – klient nemůže komunikovat s protistranou. Na vině můtže být firewall či proxy (nebyl tento příkald) nebo se nemohou domluvit z jiného důvodu, protože třwba každý mluví jiným jazykem.

Ve všech třech případech byla na vině chyba v chybějící podpoře TLS 1.2

Ověření, zda server podporuje TLS 1.2

Pomocí následujícího PowerShell skriptu můžete zkontrolovat aktuální nastavení protokolu TLS 1.2 na serveru, kde provozujete Microsoft Entra Connect.

Function Get-ADSyncToolsTls12RegValue
{
    [CmdletBinding()]
    Param
    (
        # Registry Path
        [Parameter(Mandatory=$true,
                   Position=0)]
        [string]
        $RegPath,

# Registry Name
        [Parameter(Mandatory=$true,
                   Position=1)]
        [string]
        $RegName
    )
    $regItem = Get-ItemProperty -Path $RegPath -Name $RegName -ErrorAction Ignore
    $output = "" | select Path,Name,Value
    $output.Path = $RegPath
    $output.Name = $RegName

If ($regItem -eq $null)
    {
        $output.Value = "Not Found"
    }
    Else
    {
        $output.Value = $regItem.$RegName
    }
    $output
}

$regSettings = @()
$regKey = 'HKLM:\SOFTWARE\WOW6432Node\Microsoft\.NETFramework\v4.0.30319'
$regSettings += Get-ADSyncToolsTls12RegValue $regKey 'SystemDefaultTlsVersions'
$regSettings += Get-ADSyncToolsTls12RegValue $regKey 'SchUseStrongCrypto'

$regKey = 'HKLM:\SOFTWARE\Microsoft\.NETFramework\v4.0.30319'
$regSettings += Get-ADSyncToolsTls12RegValue $regKey 'SystemDefaultTlsVersions'
$regSettings += Get-ADSyncToolsTls12RegValue $regKey 'SchUseStrongCrypto'

$regKey = 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server'
$regSettings += Get-ADSyncToolsTls12RegValue $regKey 'Enabled'
$regSettings += Get-ADSyncToolsTls12RegValue $regKey 'DisabledByDefault'

$regKey = 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client'
$regSettings += Get-ADSyncToolsTls12RegValue $regKey 'Enabled'
$regSettings += Get-ADSyncToolsTls12RegValue $regKey 'DisabledByDefault'

$regSettings

Výstup skriptu bude přibližně takový:

Ověřte, zda-li je tedy TLS 1.2 na vašem serveru aktivní. Pokud aktivní není, bude výstup podobný, jako na uvedeném obrázku, tedy u jednotlivých komponent bude uvedeno „Not Found“ nebo „0“.

PowerShell script pro zapnutí podpory TLS 1.2

K vynucení podpory protokolu TLS 1.2 na serveru s Microsoft Entra Connect můžete použít následující PowerShell skript.

If (-Not (Test-Path 'HKLM:\SOFTWARE\WOW6432Node\Microsoft\.NETFramework\v4.0.30319'))
{
    New-Item 'HKLM:\SOFTWARE\WOW6432Node\Microsoft\.NETFramework\v4.0.30319' -Force | Out-Null
}
New-ItemProperty -Path 'HKLM:\SOFTWARE\WOW6432Node\Microsoft\.NETFramework\v4.0.30319' -Name 'SystemDefaultTlsVersions' -Value '1' -PropertyType 'DWord' -Force | Out-Null
New-ItemProperty -Path 'HKLM:\SOFTWARE\WOW6432Node\Microsoft\.NETFramework\v4.0.30319' -Name 'SchUseStrongCrypto' -Value '1' -PropertyType 'DWord' -Force | Out-Null

If (-Not (Test-Path 'HKLM:\SOFTWARE\Microsoft\.NETFramework\v4.0.30319'))
{
    New-Item 'HKLM:\SOFTWARE\Microsoft\.NETFramework\v4.0.30319' -Force | Out-Null
}
New-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\.NETFramework\v4.0.30319' -Name 'SystemDefaultTlsVersions' -Value '1' -PropertyType 'DWord' -Force | Out-Null
New-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\.NETFramework\v4.0.30319' -Name 'SchUseStrongCrypto' -Value '1' -PropertyType 'DWord' -Force | Out-Null

If (-Not (Test-Path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server'))
{
    New-Item 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server' -Force | Out-Null
}
New-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server' -Name 'Enabled' -Value '1' -PropertyType 'DWord' -Force | Out-Null
New-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server' -Name 'DisabledByDefault' -Value '0' -PropertyType 'DWord' -Force | Out-Null

If (-Not (Test-Path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client'))
{
    New-Item 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client' -Force | Out-Null
}
New-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client' -Name 'Enabled' -Value '1' -PropertyType 'DWord' -Force | Out-Null
New-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client' -Name 'DisabledByDefault' -Value '0' -PropertyType 'DWord' -Force | Out-Null

Write-Host 'TLS 1.2 has been enabled. You must restart the Windows Server for the changes to take affect.' -ForegroundColor Cyan

Výstupem skriptu by pak měla být tato hláška:

tls 1 2 enabled

PowerShell script pro vypnutí podpory TLS 1.2

Ačkoliv deaktivaci podpory TLS 1.2 nedoporučuji, v ojedinělých případech může být potřeba. Pokud tedy nutně potřebujede deaktivovat podporu TLS 1.2 na vašem serveru, použijte následující skript:

If (-Not (Test-Path 'HKLM:\SOFTWARE\WOW6432Node\Microsoft\.NETFramework\v4.0.30319'))
{
    New-Item 'HKLM:\SOFTWARE\WOW6432Node\Microsoft\.NETFramework\v4.0.30319' -Force | Out-Null
}
New-ItemProperty -Path 'HKLM:\SOFTWARE\WOW6432Node\Microsoft\.NETFramework\v4.0.30319' -Name 'SystemDefaultTlsVersions' -Value '0' -PropertyType 'DWord' -Force | Out-Null
New-ItemProperty -Path 'HKLM:\SOFTWARE\WOW6432Node\Microsoft\.NETFramework\v4.0.30319' -Name 'SchUseStrongCrypto' -Value '0' -PropertyType 'DWord' -Force | Out-Null

If (-Not (Test-Path 'HKLM:\SOFTWARE\Microsoft\.NETFramework\v4.0.30319'))
{
    New-Item 'HKLM:\SOFTWARE\Microsoft\.NETFramework\v4.0.30319' -Force | Out-Null
}
New-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\.NETFramework\v4.0.30319' -Name 'SystemDefaultTlsVersions' -Value '0' -PropertyType 'DWord' -Force | Out-Null
New-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\.NETFramework\v4.0.30319' -Name 'SchUseStrongCrypto' -Value '0' -PropertyType 'DWord' -Force | Out-Null

If (-Not (Test-Path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server'))
{
    New-Item 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server' -Force | Out-Null
}
New-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server' -Name 'Enabled' -Value '0' -PropertyType 'DWord' -Force | Out-Null
New-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server' -Name 'DisabledByDefault' -Value '1' -PropertyType 'DWord' -Force | Out-Null

If (-Not (Test-Path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client'))
{
    New-Item 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client' -Force | Out-Null
}
New-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client' -Name 'Enabled' -Value '0' -PropertyType 'DWord' -Force | Out-Null
New-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client' -Name 'DisabledByDefault' -Value '1' -PropertyType 'DWord' -Force | Out-Null

Write-Host 'TLS 1.2 has been disabled. You must restart the Windows Server for the changes to take affect.' -ForegroundColor Cyan

Další kroky

Napsat komentář