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.

EntraAD Connect: chyba ověření

Unable to validate credentials due to an unexpected error Restart Azure AD Connect with the / InteractiveAuth option to further diagnose this issue. (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)
Entra - unable to validate credentials due to an unexpected error

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á.

Unable to validate credentials due to an unexpected error Restart Azure AD Connect with the / InteractiveAuth option to further diagnose this issue. (extendedMessage: There was an error parsing WS-Trust-response from the endpoint. This may occur if there is an issue with your ADFS configuration. See https://aka.ms/msal-net-iwa-troubleshooting for more details. Error Message: Federated service ad https://autologon.microsoftazuread-sso.com/xxxxxx/winauth/trust/2005/usernamemixed?client-request-id=xxxxx returned error: Authentication Failure
Entra - unable to validate credentials due to an unexpected error

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:

Configure AAD Sync Při provádění úlohy Configure AAD Sync došlo k chybě: Při odesílání požadavku došlo k chybě.. Jak postupovat dál: nejsou dostupné žádné konkrétní informace o této chybě. Podrobnosti najdete v protokolu. V opačném případě zkontrolujte protokol, kde najdete podrobnější informace: C:\ProgramData\AADConnect\trace-xxxxxx.log
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.

Event log viewer
GetSecurityToken: unable to retrieve a security token for the provisioning web service (AWS). Při odesílání požadavku došlo k chybě. | Nadřízené připojení bylo uzavřeno: Došlo k neočekávané chybě při příjmu. | Klient nemůže komunikovat se serverem, protože nepoužívají žádný společný algoritmus. extendedMessage: Při odesílání požadavku došlo k chybě. | Nadřízené připojení bylo uzavřeno: Došlo k neočekávané chybě při příjmu. | Klient nemůže komunikovat se serverem, protože nepoužívají žádný společný algoritmus webException: Nadřízené připojení bylo uzavřeno: Došlo k neočekávané chybě při příjmu. STS endpoint: HTTPS://LOGIN.MICROSOFTONLINE.COM/xxx.ONMICROSOFT.COM
Authenticate-MSAL: unexpected exception [Unspecified-Authentication-Failure] - extendedMessage: Při odesílání požadavku došlo k chybě. | Nadřízené připojení bylo uzavřeno: Došlo k neočekávané chybě při příjmu. | Klient nemůže komunikovat se serverem, protože nepoužívají žádný společný algoritmus webException: Nadřízené připojení bylo uzavřeno: Došlo k neočekávané chybě při příjmu. STS endpoint: HTTPS://LOGIN.MICROSOFTONLINE.COM/xxx.ONMICROSOFT.COM

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ý:

Kontrola TLS 1.2 pomocí PowerShell

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 has been enabled
Upozornění Po aktivaci podpory TLS 1.2 restartujte server.

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

Pokud nasazujete Microsoft Entra Connect, poprvé, mohou se vám hodit následující informace:

Miroslav Šraga

Sdílím své zkušenosti s Microsoft 365 a Azure. Návody, řešení problémů a postřehy ze správy IT.