Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Dieser Artikel hilft beim Beheben von Anmeldeproblemen mit Active Directory-Verbunddiensten (AD FS) aus einem externen Netzwerk. Verwenden Sie diesen Artikel, wenn Benutzer sich nicht mithilfe von AD FS von einem externen Unternehmensnetzwerk authentifizieren können.
Extranetzugriff überprüfen
Überprüfen Sie, ob Sie sich über den Webanwendungsproxy (WAP) bei den AD FS-Servern authentifizieren können.
Der IdpInitiatedSignOn
Parameter kann schnell überprüfen, ob AD FS aktiv ist und ob die Authentifizierung ordnungsgemäß funktioniert.
Wenn Sie AD FS unter Windows Server 2016 ausführen, müssen Sie folgendes manuell aktivieren IdpInitiatedSignOn
:
- Melden Sie sich beim primären AD FS-Server an.
- Open PowerShell.
- Führen Sie
Set-AdfsProperties -EnableIdPInitiatedSignonPage $true
aus.
Führen Sie die folgenden Schritte aus, um zu überprüfen, ob AD FS IdpinitiatedSignOn
verwendet:
- Melden Sie sich beim WAP-Computer an, den Sie testen möchten.
- Öffnen Sie eine private Browsersitzung.
- Wechseln Sie zu
https://<federation service fqdn>/adfs/ls/idpinitiatedsignon.asp
. Ein Beispiel isthttps://fs.contoso.com/adfs/ls/idpinitiatedsignon.aspx
. - Geben Sie die Anmeldeinformationen eines gültigen Benutzers auf der Anmeldeseite ein.
Netzwerkeinstellungen überprüfen
Überprüfen Sie das Domain Name System (DNS) und alle Einstellungen des Lastenausgleichs.
DNS- und Netzwerküberprüfungen auf externen Zugriff
Wenn Sie ÜBER WAP-Server verfügen:
- Pingen Sie den Namen des Verbunddiensts. Vergewissern Sie sich, dass die IP-Adresse, zu der sie aufgelöst wird, zu einem der WAP-Server oder dem Load Balancer vor den WAP-Servern gehört.
- Wenn der DNS-Server den Dienstnamen extern hostt, überprüfen Sie, ob ein A-Eintrag für den Verbunddienst vorhanden ist, der auf den WAP-Server oder den Lastenausgleich vor den WAP-Servern verweist.
Load balancer
- Überprüfen Sie, ob die Firewall den Datenverkehr zwischen AD FS und dem Lastenausgleich und zwischen dem WAP und dem Lastenausgleich nicht blockiert.
- Überprüfen Sie, ob der Sonde aktiviert ist.
- Überprüfen Sie, ob Sie Windows Server 2012 R2 ausführen. Vergewissern Sie sich, dass das Windows Server 2012 R2 Update-Rollup (KB.2975719) vom August 2014 installiert ist.
- Überprüfen Sie, ob Port 80 in der Firewall auf den WAP- und AD FS-Servern aktiviert ist.
- Stellen Sie sicher, dass der Prüfpunkt für Port 80 und den Endpunkt
/adfs/probe
festgelegt ist.
Firewall
Sowohl die Firewall zwischen der WAP- und der Verbundserverfarm als auch die Firewall zwischen den Clients und der WAP müssen über den TCP-Port 443 eingehend aktiviert sein.
Überprüfen, ob der Endpunkt aktiviert ist
AD FS bietet verschiedene Endpunkte für verschiedene Funktionen und Szenarien. Nicht alle Endpunkte sind standardmäßig aktiviert. So überprüfen Sie, ob ein bestimmter Endpunkt aktiviert oder deaktiviert ist:
- Melden Sie sich beim AD FS-Server an.
- Öffnen Sie die AD FS-Verwaltung.
- On the left pane, select Service>Endpoints.
- Scrollen Sie im rechten Bereich zum Endpunkt, der überprüft werden muss (in der Regel
/adfs/ls
und/adfs/oauth2
). - Stellen Sie sicher, dass der Endpunkt aktiviert ist. Wenn z. B. oAuth-Anmeldungen fehlschlagen, überprüfen Sie, ob der
/adfs/oauth
Endpunkt alsYes
unterProxyEnabled
gekennzeichnet ist.
Prüfen von WAP-Vertrauensproblemen
Wechseln Sie zu jedem WAP-Server, und führen Sie das Diagnose-PowerShell-Skript aus, das Sie aus den AD FS-Offlinetools heruntergeladen haben.
Melden Sie sich beim primären AD FS-Server an, um festzustellen, ob Probleme mit Bindungen oder vertrauenswürdigen Zertifikaten auftreten. Führen Sie das folgende Skript auf dem primären AD FS-Server aus:
param
(
[switch]$syncproxytrustcerts = $TRUE
)
function checkhttpsyscertbindings()
{
Write-Host; Write-Host("1 Checking http.sys certificate bindings for potential issues")
$httpsslcertoutput = netsh http show sslcert
$adfsservicefqdn = (Get-AdfsProperties).HostName
$i = 1
$certbindingissuedetected = $FALSE
while($i -lt $httpsslcertoutput.count)
{
$ipport = $FALSE
$hostnameport = $FALSE
if ( ( $httpsslcertoutput[$i] -match "IP:port" ) ) { $ipport = $TRUE }
elseif ( ( $httpsslcertoutput[$i] -match "Hostname:port" ) ) { $hostnameport = $TRUE }
# Check for IP specific certificate bindings
if ( ( $ipport -eq $TRUE ) )
{
$httpsslcertoutput[$i]
$ipbindingparsed = $httpsslcertoutput[$i].split(":")
if ( ( $ipbindingparsed[2].trim() -ne "0.0.0.0" ) -and ( $ipbindingparsed[3].trim() -eq "443") )
{
$warning = "There's an IP specific binding on IP " + $ipbindingparsed[2].trim() + " which may conflict with the AD FS port 443 cert binding." | Write-Warning
$certbindingissuedetected = $TRUE
}
$i = $i + 14
continue
}
# check that CTL Store is set for ADFS service binding
elseif ( $hostnameport -eq $TRUE )
{
$httpsslcertoutput[$i]
$ipbindingparsed = $httpsslcertoutput[$i].split(":")
if ( ( $ipbindingparsed[2].trim() -eq $adfsservicefqdn ) -and ( $ipbindingparsed[3].trim() -eq "443") -and ( $httpsslcertoutput[$i+10].split(":")[1].trim() -ne "AdfsTrustedDevices" ) )
{
Write-Warning "ADFS Service binding doesn't have CTL Store Name set to AdfsTrustedDevices"
$certbindingissuedetected = $TRUE
}
$i = $i + 14
continue
}
$i++
}
if ( $certbindingissuedetected -eq $FALSE ) { Write-Host "Check Passed: No certificate binding issues detected" }
}
function checkadfstrusteddevicesstore()
{
# Check for CA-issued (non-self-signed) certificates in the AdfsTrustedDevices certificate store
Write-Host; Write-Host "2 Checking AdfsTrustedDevices cert store for nonself signed certificates"
$certlist = Get-Childitem cert:\LocalMachine\AdfsTrustedDevices -recurse | Where-Object {$_.Issuer -ne $_.Subject}
if ( $certlist.count -gt 0 )
{
Write-Warning "The following nonself signed certificates are present in the AdfsTrustedDevices store and should be removed"
$certlist | Format-List Subject
}
else { Write-Host "Check Passed: No nonself signed certs present in AdfsTrustedDevices cert store" }
}
function checkproxytrustcerts
{
param ([bool]$repair=$FALSE)
Write-Host; Write-Host("3 Checking AdfsTrustedDevices cert store is in sync with ADFS Proxy Trust config")
$doc = new-object Xml
$doc.Load("$env:windir\ADFS\Microsoft.IdentityServer.Servicehost.exe.config")
$connString = $doc.configuration.'microsoft.identityServer.service'.policystore.connectionString
$command = "Select ServiceSettingsData from [IdentityServerPolicy].[ServiceSettings]"
$cli = new-object System.Data.SqlClient.SqlConnection
$cli.ConnectionString = $connString
$cmd = new-object System.Data.SqlClient.SqlCommand
$cmd.CommandText = $command
$cmd.Connection = $cli
$cli.Open()
$configString = $cmd.ExecuteScalar()
$configXml = new-object XML
$configXml.LoadXml($configString)
$rawCerts = $configXml.ServiceSettingsData.SecurityTokenService.ProxyTrustConfiguration._subjectNameIndex.KeyValueOfstringArrayOfX509Certificate29zVOn6VQ.Value.X509Certificate2
#$ctl = dir cert:\LocalMachine\ADFSTrustedDevices
$store = new-object System.Security.Cryptography.X509Certificates.X509Store("ADFSTrustedDevices","LocalMachine")
$store.open("MaxAllowed")
$atLeastOneMismatch = $FALSE
$badCerts = @()
foreach($rawCert in $rawCerts)
{
$rawCertBytes = [System.Convert]::FromBase64String($rawCert.RawData.'#text')
$cert=New-Object System.Security.Cryptography.X509Certificates.X509Certificate2(,$rawCertBytes)
$now = Get-Date
if ( ($cert.NotBefore -lt $now) -and ($cert.NotAfter -gt $now))
{
$certThumbprint = $cert.Thumbprint
$certSubject = $cert.Subject
$ctlMatch = dir cert:\localmachine\ADFSTrustedDevices\$certThumbprint -ErrorAction SilentlyContinue
if ($ctlMatch -eq $null)
{
$atLeastOneMismatch = $TRUE
Write-Warning "This cert isn't in the CTL: $certThumbprint – $certSubject"
if ($repair -eq $TRUE)
{
write-Warning "Attempting to repair"
$store.Add($cert)
Write-Warning "Repair successful"
}
else
{
Write-Warning ("Please install KB.2964735 or re-run script with -syncproxytrustcerts switch to add missing Proxy Trust certs to AdfsTrustedDevices cert store")
}
}
}
}
$store.Close()
if ($atLeastOneMismatch -eq $FALSE)
{
Write-Host("Check Passed: No mismatched certs found. CTL is in sync with DB content")
}
}
checkhttpsyscertbindings
checkadfstrusteddevicesstore
checkproxytrustcerts($syncproxytrustcerts)
Write-Host; Write-Host("All checks completed.")
Durchführen einer detaillierten WAP-Prüfung
Die Proxyvertrauensbeziehung zwischen einem WAP-Server und dem AD FS 2012 R2-Server basiert auf Clientzertifikaten. Wenn Sie den WAP-Assistenten nach der Installation ausführen, wird mithilfe der im Assistenten angegebenen Anmeldeinformationen ein selbstsigniertes Clientzertifikat generiert und in den AD FS-Konfigurationsspeicher eingefügt. AD FS verteilt dieses Zertifikat auch an den AdfsTrustedDevices
Zertifikatspeicher auf dem AD FS-Server.
Bei jeder Transport Layer Security/Secure Sockets Layer (TLS/SSL)-Kommunikation HTTP.sys
wird die folgende Prioritätsreihenfolge für ihre TLS/SSL-Bindungen verwendet:
- IP-Portbindung: Genaue IP- und Port-Übereinstimmung.
- SNI: Exact hostname match.
- CCS: Invoke Central Certificate Store.
- IPV6 wildcard: IPv6 wildcard match connection must be IPv6.
- IP-Platzhalterübereinstimmung: Die Verbindung kann IPv4 oder IPv6 sein.
Gibt es eine bestimmte IPAddress:Port-Zuordnung?
Das IP:Port mapping
hat die höchste Priorität. Wenn eine IP:Port
Bindung vorhanden ist, ist dies das Zertifikat, das von HTTP.sys
allen Zeiten für die TLS/SSL-Kommunikation verwendet wird.
Entfernen der spezifischen IP:Port-Bindung
Überprüfen Sie, ob die Bindung nicht wiederkehrt. Wenn eine Anwendung mit einer solchen Bindung konfiguriert ist, wird dieses Problem möglicherweise automatisch oder beim nächsten Dienststart erneut erstellt.
Verwenden einer hinzugefügten IP-Adresse für AD FS-Datenverkehr
Wenn die IP:Port
Bindung erwartet und erforderlich ist, würde die Verwendung einer zweiten IP wie 1.2.3.5 für den AD FS-Dienst und das Auflösen des AD FS-Dienst-FQDN zu dieser IP-Adresse bedeuten, dass die Hostname:port
Bindungen verwendet werden.
Konfigurieren des AdfsTrustedDevices-Speichers als CTL-Speicher für die spezifische IP:Port-Bindung
Dieser Schritt hat einige Abhängigkeiten davon, warum die spezifische IP:port
Bindung vorhanden ist und wenn dieser Schritt auf dem Standardmäßigen Zertifikatvertrauenslistenspeicher (Certificate Trust List, CTL) für die Clientzertifikatauthentifizierung basiert. Eine Option besteht darin, den CTL-Speicher für die IP:port
Bindung als AdfsTrustedDevices
Speicher festzulegen.
So überprüfen Sie aktuelle TLS/SSL-Zertifikatbindungen:
- Melden Sie sich beim AD FS-Server an.
- Open PowerShell.
- Führen Sie
netsh http show sslcert
aus. SieheC:\Users\administrator.CONTOSO> netsh http show sslcert
.
SSL Certificate bindings:
Hostname:port: adfs.contoso.com:443
Certificate Hash: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Application ID: {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}
Certificate Store Name: MY
Verify Client Certificate Revocation: Enabled
Verify Revocation Using Cached Client Certificate Only: Disabled
Usage Check: Enabled
Revocation Freshness Time: 0
URL Retrieval Timeout: 0
Ctl Identifier: (null)
Ctl Store Name: AdfsTrustedDevices
DS Mapper Usage: Disabled
Negotiate Client Certificate: Disabled
Ist der CTL-Speichername „AdfsTrustedDevices”?
Wenn der Benutzer Microsoft Entra Connect Sync installiert hat, verwenden Sie den Microsoft Entra Connect-Synchronisierungsserver, um die TLS/SSL-Zertifikatbindungen auf allen Servern zu aktualisieren. Wenn sich kein Microsoft Entra Connect-Synchronisierungsserver in der Umgebung befindet, verwenden Sie das folgende PowerShell-Cmdlet, um die AD FS-Zertifikatbindungen auf dem AD FS-Server neu zu generieren:
Set-AdfsSslCertificate -Thumbprint <thumbprint>
Ist ein von der Zertifizierungsstelle ausgestelltes Zertifikat im AdfsTrustedDevices-Speicher vorhanden?
Der AdfsTrustedDevices
Speicher sollte nur das MS-Organization-Access-Zertifikat enthalten, bei dem es sich um das selbstsignierte Zertifikat handelt, das für die Ausstellung von Workplace Join-Zertifikaten verwendet wird, und die Proxyvertrauenszertifikate für jeden WAP-Server. Ein von einer Zertifizierungsstelle ausgestelltes Zertifikat in einem Speicher, in dem normalerweise nur selbstsignierte Zertifikate vorhanden sind, wirkt sich auf die aus diesem Speicher generierte CTL aus. Die CTL enthält dann nur das von der Zertifizierungsstelle ausgestellte Zertifikat.
Löschen Sie das nicht selbstsignierte TLS/SSL-Serverzertifikat aus dem AdfsTrustedDevices
Speicher.
Gibt es eine Zeitverschiefe zwischen den AD FS- und WAP-Servern?
Stellen Sie sicher, dass es zwischen den AD FS- und WAP-Servern keine Zeitabweichung gibt.
Gibt es eine TLS/SSL-Beendigung zwischen den AD FS- und WAP-Servern?
Wenn tls/SSL-Beendigung auf einem Netzwerkgerät zwischen AD FS-Servern und WAP erfolgt, wird die Kommunikation zwischen AD FS und WAP unterbrochen, da die WAP- und AD FS-Kommunikation auf Clientzertifikaten basiert.
Deaktivieren Sie die TLS/SSL-Beendigung auf dem Netzwerkgerät zwischen den AD FS- und WAP-Servern.
Manuelles Synchronisieren von Proxyvertrauenszertifikaten aus der Konfiguration mit AdfsTrustedDevices
Verwenden Sie das Skript am Ende des Abschnitts, um die WAP-Zertifikate manuell aus der AD FS-Konfiguration mit dem AdfsTrustedDevices
Speicher zu synchronisieren.