IIS Reverse SSL Proxy unter Windows Server 2012R2/2016 mit einer Webfarm einrichten (Schritt für Schritt)

Ab und zu muss ein Wbservice auf einem „dritten“ Web- oder Applikationsserver wie Tomcat, Jetty ein Hardware-IoT-Gerät (Heizungssteuerung, Alarmsystem …) oder ähnliches sicher an das Internet angebunden werden. Was bietet sich mehr an, als ein reverser Proxy in einem „Standard-System“, der die SSL/TLS-Verbindung eines Clients verwaltet und nur die nackten HTTP-Anfragen unverschlüsselt weiterleitet? Eine einfache Anleitung für einen SSL-Offloading-reverse-Proxy.

Installation IIS als reverse Proxy mit SSL-Offloading

Installieren

Reverse-Proxy im IIS einschalten

IIS-Konsole („Internetinformationsdienste (IIS) Manager“) > Links auf den Server > Rechts auf „Application Request Routing Cache“ > Ganz recht auf die Action „Server Proxy Settings…“ > „Enable Proxy“ einschalten. Sonst hier nichts ausfüllen, vor allem das Feld für die Proxy-Chain leer lassen.

Falls noch nicht geschehen: SSL-Zertifikat in IIS importieren

Wir importieren hier ein Zertifikat einschliesslich private Key, zum Beispiel aus einem Wildcard-Zertifikat. Je nach Ausgangsstellung muss das passende Zertifikat zur Verfügung stehen (self-signed oder unterschriebener CSR und so weiter).

Doppelklick auf das PFX > Speicherort „Lokaler Computer“ > Weiter … (dem Assistenten folgen) …Fertigstellen.

SSL-Listener im IIS erstellen

IIS Manager > Links die Site auswählen > Rechts die Aktion „Bindungen“ > Hinzufügen > Den Typ auf „SSL“ stellen und den rest des Fesnters entsprechend ausfüllen. Sollte hier kein SSL-Zertifikat zur Auswahl stehen, ist das Zertifikat nicht korrekt importieren (oder es steht kein privater Schlüssel zur Verfügung). Dann den vorherigen Schritt noch einmal genau anschauen. Sollte der lokale Port :80 belegt sein, diesen auf einen anderen freien Port umstellen.

Weiterleitungsziel (Server „Farm“) erstellen und Rewrite-Regel erstellen

Im IIS-Manager links unten auf den neuen Knoten „Server Farms“ > Create Server Farm

Server-Farm Name: beliebig > Das Feld „Server Address“ ist der Ziel-Webserver (in diesem Bespiel ist der Ziel-Webserver auf dem lokalen Host 127.0.0.1, das kann aber auch ein BELIEBIGER-HOST.DOMAIN.INTERN sein) > Die folgende „Rewrite Rules“ Frage mit „Ja“ beanworten („IIS Manager can create a URL rewrite rule to route all incoming requests to this server farm automatically. Do you want to create this rule now? You can also create this rule later by visiting the Routing Rules page of the server farm.“)

  • Unter „Advanced Settings“ müssen HTTP/HTTPS-port belegt sein. Wenn der Webserver nur auf HTTP reagiert, einfach undedizierten Müll eintragen.
  • Der Port lässt sich im nachhinein an dieser Stelle nicht mehr ändern. Ändert sich der Ziel-Port, einfach den Server löschen und einen neuen Eintrag hinzufügen. Alternativ kann man über den „Configuration Editor“ > Web Farms den eintrag erreichen. Microsoft hat sich hier das logische GUI einfach gespart.

Damit ider der IIS Reverse Proxy auch schon fertig.

Active Directoryx Zertifikatdienste („certsvc“) starten nach Upgrade nicht 0X422 (WIN32: 1058 ERROR_SERVICE_DISABLED)

Problem

Nach einem In-Place Upgrade von Windows Server 2012/2012R2 auf Windows Server 2016 werden die „Active Directory-Zertifikatdienste“ (certsvc) nicht mehr gestartet. Versucht man das in der Zertifizierungsstellenkonsole manuell nachzuholen, erhält man diesen fiesen (und zudem falsch übersetzen) Fehler:

Windows konnte Active Directory-Zertifikatdienste-Dienst auf dem lokalen Computer nicht gestartet werden.
Fehler 1058: Der Dienst kann nicht gestartet werden deaktiviert ist oder weil keine Geräte zugeordnet aktiviert hat.
Versucht man es in der Diensteverwaltun heisst es:
Der Dienst kann nicht gestartet werden, weil er deaktiviert wurde oder nicht zugeordneten Geräte aktiviert ist.
0X422 (WIN32: 1058 ERROR_SERVICE_DISABLED)

Um es für den Admin noch spannender zu machen, gibt es auch keine Einträge im System- oder Anwendungsprotokoll. Es passiert einfach nichts.

Lösung

Jetzt wird es peinlich: Ein Systemneustart hilft. Boot toot goot.

Die Dienstregistrierung der Zertifizierungsstelle passiert erst, wenn die CERTCONFIG wieder ausgepackt ist. Das passiert beim ersten erfolgreichen Systemstart. Danach starten auch die Dienste wieder …

Update: Ab genau jetzt ist dieses Verhalten sogar offiziell 🙂 Schön wenn man Microsoft auch mal helfen kann …

Windows Batch: Uhrzeit und Datum verwenden (UPDATE: mit führender „0“ bei einstelligen Stunden)

Ich benötige im Alltag ab und an das aktuelle Datum und die Uhrzeit „zerlegt“ in einzelne Variablen, um zum Beispiel Dateien nach Zeit oder Datum abzuspeichern oder Logeinträge korrekt formatiert auszugeben. Das ist seit Windows XP zum Glück recht einfach, aber weil ich faul bin lege ich hier meine zu diesem Zweck erzeugten Substring-Scriptschnipsel ab – dann muss ich die paar Zeilen nicht immer neu tippen (und korrigieren).

Es gibt da auch ein Problem mit den führenden Nullen: Windows setzt die Zeitvariable %time% nicht mit führenden Nullen, sondern in „Menschlich lesbar“.

Beispiel:

C:\>echo %time%        Ergibt ab 10Uhr: 11:02:18,04

C:\>echo %time%        Ergibt ab 24Uhr: _9:02:18,04 Hier ist ein Leerzeichen eingefügt, denn das Padding des Strings ist immer gleich breit.

Lösung

set YYYY=%date:~-4%
set MM=%date:~-7,2%
set DD=%date:~-10,2%
set hr=%time:~0,2%
if "%hr:~0,1%" == " " SET hr=0%hr:~1,1%
set min=%time:~3,2%
set sek=%time:~6,2%

Mit diesen Variablen würde eine Ausgabezeile zum Beispiel so aussehen:

echo Es ist heute der %DD%.%MM%.%YYYY% und wir haben die wundervolle Uhrzeit %hr%:%min%:%sek%

Mit führenden Nullen sieht das Ergebnis dann, korrekterweise, so aus:

Es ist heute der 24.12.2016 und wir haben die wundervolle Uhrzeit 01:04:37

Nicht das diese Zeile viel Sinn hätte, in der Praxis benötige ich beispielsweise eher so etwas:

zip –m -9 idslogs-%YYYY%%MM%%DD%.zip %1*.log

… das mir Dateien mit einem sinnvollen Namen (z.B. idslogs-20121203.zip) erstellt.

Wichtig zu wissen: Diese Zeilen legen die wichtigen Werte direkt in eigenen Variablen ab; die Zuordnung ist im Moment der Zuordnung statisch, was bedeutet das ein Wert sobald zugewiesen immer so bleibt und sich nicht mit fortschreitender Zeit ändert. Wenn die Werte aktualisiert werden sollen (beispielsweise zu beginn/ende eines Script) muss dieser Block wieder aufgerufen werden, etwa mit einer call: Anweisung dorthin.

Windows PKI Fehler „Der angeforderte Antragstellername ist ungültig oder zu lang (0x80094001)“

Problem

Beim ausstellen eines neuen Zertifikates mit einem frisch generierten CSR reagiert die Windows Zertifizierungsstelle (CA) in dem Webinterface mit diesem Fehler:

Der angeforderte Antragstellername ist ungültig oder zu lang (0x80094001)

Das gleiche tut Sie auch auf einem englischen Windows, mit einem englischen Fehler:

Error parsing request the subject name is invalid or too long 0x80094001 (CSR)

Lösung

Wenn die CA unter Windows Server 2008 oder früher erstellt wurde, hat diese warscheinlich das gute alte 64-Zeichen Limit für Domains geerbt. Man kann diese (heute) sinnlose limitierung ganz schnell abschalten:

c:\> certutil -setreg ca\EnforceX500NameLengths 0

Die Einstellung ist ebenfalls notwendig, wenn man Wildcard-Zertifikate mit einer Windows CA unterschreiben möchte.

Windows Defender (MsMpEng.exe) deaktivieren (Windows 10 und Windows Server)

Problem

Wärend eines Setups oder einer größeren Aktion auf einer Windows-Maschine kostet der Windows-Defender „MsMpEng.exe“ (der Diensthost des Windows-Defenders) unnötig viel Leistung und Zeit.Trotz der allgemein recht guten Performance des Virenwächters von Microsoft, lässt sich vor allem beim Zugriff auf große Dateimengen einiges an Zeit sparen wenn der Wächter temporär ausgeschaltet wird.

Lösung

In der Regel reicht es schon, an der PowerShell die Realtime-Engine für die Echtzeitüberwachung aus zu schalten. Dann sinkt die Last des Prozesses auf praktisch Null und man kann sofort eine deutlich bessere Performance beim Dateizugriff beobachten. Die Einstellungen werden sofort aktiv und brauchen keinen Neustart.

Windows Defender Echtzeitüberwachung deaktivieren

PS C:\> Set-MpPreference -DisableRealtimeMonitoring $true

Windows Defender Echtzeitüberwachung aktivieren

PS C:\> Set-MpPreference -DisableRealtimeMonitoring $false

Windows Defender Echtzeitüberwachung-Einstellung prüfen

PS C:\> Get-MpPreference | FL *RealtimeMonitoring

Windows-Defender vollständig deinstallieren

PS C:\> Remove-WindowsFeature Windows-Defender, Windows-Defender-GUI