FSLogix automatisch aktualisieren (FSLogix autp Update) [UPDATE]

Update: Im FSLogix-Paket haben sich Pfade geändert, die unnötige Fehlermeldung zu Beginn ist entfernt und die Pfade sind angepasst.

Leider ist FSLogix nicht in Windows-Update(s) enthalten. Der Admin einer RDS-Farm muss also selbstständig für seine Updates sorgen.

Da es aber in der Tat häufiger mal Updates für FSLogix gibt (Siehe Hotfix-Liste), die beispielsweise Fehler mit der Microsoft Office 365 Aktivierung beheben, lohnt es sich diese auch wirklich zu installieren. Man kann das Setup in derselben Version auch mehrfach ausführen, es wird nur installiert, wenn wirklich etwas Neues dabei ist.

Der Vorgang ist prinzipiell einfach: Neue Version herunterladen, ZIP-Datei auspacken, App-Installer ausführen und Server neu starten. Wäre das nicht toll, wenn das auch automatisch geht?

Lösung

Bei dem letzten Einsatz, der das Problem „Leeres Microsoft 365 Anmeldefenster“ behebt, ist ein PowerShell Script das selbiges tut entstanden. Einsatz auf eigene Gefahr ☺️

# Update FSLogix to "latest"
# [email protected]
#
# Achtung: BOOTET bei Erfolg den Server neu, ohne Rueckfrage!

# Aktuelle FSLogix-Version liegt hier
$FslogixUrl= "https://aka.ms/fslogix_download"

# Download landet hier
if ( Test-Path "C:\Windows\Temp\fslogix\install" ) { Remove-Item "C:\Windows\Temp\fslogix\install" -Force -Recurse }
mkdir "C:\Windows\Temp\fslogix\install" -Force | Out-Null
Write-Host "Download von" $FslogixUrl "... (180Mbyte)"
# Ausblenden der ProgressBar macht den Download 5x schneller
$ProgressPreference = 'SilentlyContinue'
Invoke-WebRequest -Uri $FslogixUrl -OutFile "C:\Windows\Temp\fslogix\install\FSLogixAppsSetup.zip" -UseBasicParsing

# Auspacken
Write-Host "Auspacken von C:\Windows\Temp\fslogix\install\FSLogixAppsSetup.zip ..."
Expand-Archive -LiteralPath "C:\Windows\Temp\fslogix\install\FSLogixAppsSetup.zip" -DestinationPath "C:\Windows\Temp\fslogix\install" -Force -Verbose
Set-Location "C:\Windows\Temp\fslogix\install\x64\release"

# Installieren + Neustart
Start-Process "FSLogixAppsSetup.exe" -ArgumentList "/install /quiet" -Wait -Passthru

IIS ARR (Reverse Proxy) Fehler 400 (Keycloak, Camunda, Visi …) weil „Ein möglicherweise gefährlicher Request.Path-Wert wurde vom Client (:) entdeckt.“

In einem IIS mit ARR der andere Web-Services hinter sich schützt, tritt (gehäuft in letzter Zeit) schon mal ein „unerwarteter“ Fehler 400 auf. Im Ereignisprotokoll gibt es auch einen (ernsthaft) hilfreichen Hinweis. Der Fehler tritt gehäuft bei Sites auf, die das Angular Framework verwenden.

Eventlog Anwendung, Quelle ASP.NET 4.0.<build>, Ereignis-ID (EventID) 1309,

Event code: 3005 
Event message: Es ist eine unbehandelte Ausnahme aufgetreten. 
 
Application information:
    Trust level: Full 
    Application Virtual Path: / 
    Application Path: C:\inetpub\<PATH> 
 
Exception information: 
    Exception type: HttpException 
    Exception message: Ein möglicherweise gefährlicher Request.Path-Wert wurde vom Client (:) entdeckt.
   bei System.Web.HttpRequest.ValidateInputIfRequiredByConfig()
   bei System.Web.HttpApplication.PipelineStepManager.ValidateHelper(HttpContext context)

Die Request URL enthält einen Doppelpunkt. Einen „gefährlichen“ Doppelpunkt!!1elf

Dass der Doppelpunkt „gefährlich“ ist, liegt grundsätzlich nicht am IIS, sondern an der RFC1738, die genau definiert, wie eine URL aussehen darf („Uniform Resource Locators“). Darin ist nämlich festgelegt, dass …

…only alphanumerics, the special characters „$-_.+!‘(), and reserved characters used for their *reserved purposes* may be used unencoded within a URL

Der Doppelpunkt („colon“) „:“ ist so ein reserviertes Zeichen. Die RFC wird sogar noch deutlicher: „it’s used after the protocol (http, https) and after the domain to specify a port.“

Natürlich lässt sich das Verhalten des IIS anpassen, um solche „illegalen“ Requests zu erlauben. Das sollte man aber zumindest mit seinen Security-Leuten absprechen, die Änderung ist nicht ganz ohne. Die „Lösung“ hier lädt nur die Waffe, wenn sich der Admin damit selber ins Knie schießt, ist das sein Problem 😉

Lösung

Die „richtige“ Lösung ist natürlich, in der Webseite (Web App, Service, was auch immer) korrekt zu serialisieren. Angular nutzt dazu den UrlSerializer router; richtig eingesetzt tritt der Fehler nicht auf.

Oft hat man als Admin „am anderen Ende“ aber keinen Einfluss auf die Entwicklung so einer App. Man kann daher in der Site-Konfiguration (web.config) auf dem IIS die Request-Filterung konfigurieren.

Das hier ist eine Beispiel-Konfiguration, die mehrere solcher „Eigenheiten“ umgeht.

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.web>

    <!-- Off=Debugausgaben in HTTP-Fehlern
         On=Gekuerzte Ausgavben (Produktivumgebung)
    -->
	<customErrors mode="Off" />

    <!--
        maxUrlLength: Lange Request URIs erlauben
        maxQueryStringLength: Lange Query-String (nach dem '?') erlauben
        relaxedUrlToFileSystemMapping: Dateisystemspfade (Doppelpunkte, \\?\) in URIs erlauben
        requestPathInvalidCharacters: Bestimmte Zeichen erlauben
    -->
	<httpRuntime
		maxUrlLength="10999"
		maxQueryStringLength="2097151"
		relaxedUrlToFileSystemMapping="true"
		requestPathInvalidCharacters="*,%,?,\,&amp;,&lt;,&gt;"
	/>
    </system.web>

    <system.webServer>
        <security>
            <!-- allowDoubleEscaping: \\ vor ? erlauben
             -->
            <requestFiltering allowDoubleEscaping="true">
                <requestLimits maxUrl="10999" maxQueryString="2097151" />
            </requestFiltering>
        </security>

Windows Update Fehler 0x800F0986 bei Cummulativem Update

Bei der Installation des aktuellen CU auf einem Windows Server 2019 weigerte sich Windows Update beharrlich, das Setup erfolgreich abzuschließen. Schuld war der hilfreich benannte Fehler „0x800F0986„.

Die Fehlernummer 0x800F0986 steht lauf MSEC für, ebenfalls wenig hilfreich, „Corrupted or missing system files“.

Lösung

In diesem Fall hat geholfen:

  1. Microsoft Edge installieren (war noch nicht vorhanden)
  2. Ausführen, „Als Administrator“ – wobei \\SERVERNAME\ eine „gesunde“, also erfolgreich gepatchte Maschine war:
    DISM.exe /Online /Cleanup-Image /RestoreHealth /Source:\\SERVERNAME.EXAMPLE.TLD\C$\Windows
  3. Reboot

Danach wurde auch KB5041578 ganz ohne Fehler installiert. Was den Effekt ausgelöst hat werden wir (hoffentlich) nie erfahren.

Windows Hello (PIN/Biometrie) für Benutzer vollständig zurücksetzen

Manchmal geht Windows Hello kaputt. Windows Hello verwaltet die Computerlokale Komfort-Anmeldung mit „einfachen“ PINs, Fingerabdrücken, der Gesichtserkennung und so weiter. Grundsätzlich eine nette Erfindung, welche Anmeldung an Windows etwas komfortabler macht.

Es gibt Momente, in denen das kaputtgeht. Zum Beispiel wenn sich in der Domäne (AD/AAD) die PIN-Richtlinien ändern oder sich zwei Profile widersprechen.

Die Fehlermeldungen sind leider wenig zielführend. Wir haben die Meldung „Diese Option ist derzeit nicht verfügbar“ nach der PIN-Eingabe gesehen, die Fehlernummer 0x801c0451 beim Versuch die PIN zurückzusetzen und verschiedene Fehler nach einer Biometrischen Anmeldung.

Lösung

Die einfachste Möglichkeit ist, Windows Hello radikal zurückzusetzen und sauber neu zu konfigurieren. Das geht am einfachsten, indem man den Zertifikatsspeicher von Hello vollständig zu entfernt:

Certutil -DeleteHelloContainer 

Das muss im Kontext des betroffenen Benutzers passieren. Bei einer defekten Windows-Anmeldung tut es auch ein angemeldeter Administrator, der die Shell „Als Benutzer“ ausführt. Nach dem Reboot kann man Hello dann neu einrichten, als hätte es das vorher nicht gegeben.

Windows VPN Fehler „Ein interner Authentifizierungsfehler ist aufgetreten“

Heute habe ich (viel zu lange) an einem interessanten Fehler herumgesucht.

Eine benutzende Person konnte sich nach einem (korrekten) Kennwortwechsel nicht mehr per VPN einwählen. Die Domänen-Anmeldung funktioniert aber, PC-Zugriff kein Problem, Dateiserver, Microsoft 365, ERP … alles mit dem neuen Kennwort kein Problem. Einzig die VPN-Einwahl funktioniert nicht mehr:

Im Ereignisprotokoll des Clients (der Server protokolliert gar nichts – auch im IASLog nicht) tauch diese Meldung „645“ von RasClient (Ereignis-ID: 20227) auf:

CoID={EE17AD36-00AF-4D2E-B293-A43EFD0E0DBA}: Der Benutzer "<NAME>" hat eine Verbindung mit dem Namen "<VERBINDUNG>" gewählt, die Verbindung konnte jedoch nicht hergestellt werden. Der durch den Fehler zurückgegebene Ursachencode lautet: 645.

Lösung

Das neue Kennwort enthielt ein ganz bestimmtes Sonderzeichen: (Euro-Zeichen)

Windows NT4 ist schuld. Das konnte noch kein € (Euro-Zeichen). Ersetzt man das Zeichen geht’s sofort.

Details

In diesem VPN wird SSTP genutzt, also PPTP-over-TLS. Schnell, einfach, sicher, flexibel und sehr gut zu verwalten. Das bedeutet aber, dass die Authentifizierung CHAP (MSCHAPv2) nach RFC2759 nutzt. Und da gibt es schlichtweg nur ASCII im „Password“ Feld. Etwas anderes gab es 1999 unter NT4 noch nicht so richtig 🤪

Der Windows Client, NICHT der Server, prüft also die Kompatibilität mit der RFC und bricht bei der Nutzung von High-Characters sofort ab. Daher auch der interne Authentifizierungsfehler am Client.