====== Was ist der PowerShell AS Host ====== Der PowerShell AS Host ist ein C# Programm auf .NET 4.8 oder .NET 8.0 Basis, das hier einen kleinen HTTP Server auf Basis von GrapeVine zur Verfügung stellt. In diesem können PowerShell Scripte kontrolliert ausgeführt werden und somit einen Windows TaskPlaner ersetzen. Des Weiteren ist es möglich Skripte per REST Endpunkt an Consumer zur Verfügung zu stellen, damit diese die Skripte mit Parametern aufrufen können. ===== Hintergründe über die Schaffung ===== PowerShell Coder sind in großen Unternehmen weit verbreitet, weil sie hier als die Automatisierer der Branche etabliert sind. Das Java Pendant Beanshell hat bei weitem nicht so große Marktanteile wie die PowerShell. PERL, PHP und Bash sind zwar noch nicht ausgestorben, meist aber auch nicht mehr so verbreitet wie früher. PowerShell hat vor allem einen großen Vorteil. Die Syntax ist einfach, die Cmdlets sind meist reine Befehlsketten. KI kann solche Skripte leicht bauen, im Grunde sind sie leicht verständlich. Nachteile der PowerShell: aufgrund der leicht verständlichen Syntax trauen sich auch Admins ohne Programmierkenntnisse drüber, die aber meist nicht so sonderlich gegenreflektieren können, was sie mit dieser oder jener Änderung eigentlich bewirken. Wo Entwickler eher länger überlegen, handeln die auch schneller. Die Wahrscheinlichkeit, dass Laien hier „nicht funktionablen“ Code durch Änderungen produzieren ist hier also gering. Das .NET Framework hat sich neben der Java Runtime zu einer festen Größe entwickelt. Nach der Java Generation hatten wir im Programmierumfeld ja die C# Generation, beide matchen sich jetzt mit der Python Generation. Die ELO Automation Services forderten ja entweder, dass das Archiv mit Skripten angereichert wird oder mit Java Programmierkenntnissen und dem entsprechenden Build Aufwand externe JAR Dateien mit eingebunden werden. ===== AS Host und ELO Azure Administration / Sync ===== Das Setup von AS Host und ELO Azure Administration / Sync ist ein gewusst wie. Wichtig ist: wird ELO Azure Administration oder ELO Sync installiert, dann wird sofort bei Ansteuerung mittels Browser am Server der "HSTS" Cache kontaminiert. Sprich, es ist hier nicht mehr möglich auf HTTP Endpunkte zuzugreifen, bis der HSTS Cache gelöscht wird (und das ist verdammt schwierig). Der Einfachere Weg ist hier den AS Host ebenfalls mittels SSL abzusichern. Wichtig dabei ist: * je nach Domänenkonfiguration kann der Edge teilweise nicht mehr übersteuert werden (weiter zur unsicheren Seite). Hier ist dann ein "Self-Signed" Zertifikate ohne CA-Kette nicht empfehlenswert * man muss hier dann entweder ein CA-Zertifikat nehmen (bspw. das von der ELO Server Engine) * oder einen Firefox installieren (und hier dann den Endpunkt in die Trust-Liste aufnehmen, bspw. für NTLM). Hier hat man aber immer noch die Möglichkeit einfach auf die Seite zu springen. ===== Architektur ===== Wie bereits erwähnt handelt es sich um einen GrapeVine Server, hier ist noch die ältere Version 4 im Einsatz. GrapeVine fußt im Gegensatz zu Kestrel seine HTTP Implementation unter Windows auf der http.sys, die Teil des Windows-Betriebssystems ist. URL Freischaltungen werden also über die Netshell von Windows (netsh) koordiniert. Wichtige Befehle: * netsh http show urlacl / netsh http add urlacl * Zeigt URL ACLs an oder legt diese an. * Der AS-Host durchläuft beim Start die ACL Liste und prüft, wo hier der Applikationsname SWXPowerShellASHost mit drinnen ist * Je nach Protokollpräfix (http/https) wird hier der GrapeVine Server angewiesen einen HTTP oder HTTPS Listener zu installieren * Enthält die URL den Teilstring /apikey/ so wird ein authentifizierungsloser Listener installiert, der hier den Endpunkt über einen Header „X-API-Key“ absichert * Enthält die URL den Teilstring /ntlm/ wird Windows Authentifizierung verwendet * Enthält die URL keinen Hinweis, so wird der Endpunkt über Basic-Authentifizierung abgesichert * netsh http ssl certadd * Hier können Zertifikate aus dem Zertifikatsstore gebunden werden * Dieser ist in Windows unter mmc.exe / Snap-In hinzufügen, Zertifikatsdienste erreichbar ===== Installation ===== Die Programmdateien nehmen und in ein Verzeichnis extrahieren. Wird hier direkt der ELOprofessional prog Ordner gewählt, dann werden automatisch die Ordner für die Verarbeitung festgelegt. Darüber hinaus werden die Logback.xml Dateien der ELO Systemkomponenten gelesen, um hier automatisiert ein Log-Verzeichnis zu ermitteln. Die Programmdatei NovomediaPowerShellAS.exe (.NET 4.8) oder ISDA.PowerShellASHost.exe mit dem Parameter "/i" oder "/r" aufrufen, dann erfolgt eine Registrierung des Dienstes mit sc.exe. ===== Binden eines SSL Zertifikats ===== Aus Sicherheitsgründen oder in Verbindung mit der ELOSync, die hier immer HSTS Header-Einträge schickt und somit den Zugriff auf HTTP vergält, kann es hier sinnvoll sein SSL-Zertifikate zu binden. Das kann wiederum mit netsh passieren. Es muss hier der Host-Name/Port angegeben werden. Die-AppId ist hier konstant intern verdrahtet. Da hier der AS-Host eher unzuverlässige Resultate liefert empfiehlt sich eine Installation direkt auf Kommandozeilenebene. Direkte Installation auf der Kommandozeile mit netsh netsh http add sslcert hostnameport=:7829 appid={F847A7F8-306E-4176-BA1D-C033972B0E27} certhash=c17072018ffbb2711b2af475b7747cd6de05c6c0 certstorename=MY Wird wirklich "localhost" verwendet. netsh http add sslcert hostnameport=localhost:7829 appid={F847A7F8-306E-4176-BA1D-C033972B0E27} certhash=c17072018ffbb2711b2af475b7747cd6de05c6c0 certstorename=MY Installation mit AS-Host: ISDA.PowerShellASHost.exe /install /https /port 7829 /localhost /thumbprint c17072018ffbb2711b2af475b7747cd6de05c6c0 ===== Default-Ports ===== * HTTP-Binding: 34879 * HTTPs-Binding: 35879 ===== Kann man den PowerShell AS Host käuflich erwerben ===== Eigentlich ja, aber eigentlich auch eher nicht. Man kann hier unter sales@issp.cc anfragen, er ist Teil des PowerShell Frameworks und eigentlich ein Nebenprodukt zu den PowerShell Cmdlets von ISSP, hier beginnen die Preise bei in etwa 10k EUR. Wer hier eine gleichwertige Alternative sucht ist hier bei folgenden Herstellern möglicherweise richtig: * https://www.scriptrunner.com/ - Preis unbekannt * https://www.powershelluniversal.com/ - 0 EUR Developer, 499 EUR pro Server ===== Löschen von URL-ACLs ===== Gibt man in Verbindung mit der Installation irrtümlicherweise "localhost" mit an und man will hier eigentlich ein Binding auf der Host-IP, dann ist notwendig die fehlerhaften Bindings manuell zu entfernen. Beispiel (Löschen des Localhost Bindings, HTTPs Port) netsh http delete urlacl url=https://localhost:17829/apikey/SWXPowerShellASHost/ netsh http delete urlacl url=https://localhost:17829/ntlm/SWXPowerShellASHost/ netsh http delete urlacl url=https://localhost:17829/SWXPowerShellASHost/ Beispiel (Löschen des Bindings auf Host-Ebene, HTTPs Port) netsh http delete urlacl url=https://+:17829/apikey/SWXPowerShellASHost/ netsh http delete urlacl url=https://+:17829/ntlm/SWXPowerShellASHost/ netsh http delete urlacl url=https://+:17829/SWXPowerShellASHost/ ===== Anlegen von URL-ACLs ===== netsh http add urlacl url=https://+:17829/apikey/SWXPowerShellASHost/ user=Everyone netsh http add urlacl url=https://+:17829/ntlm/SWXPowerShellASHost/ user=Everyone netsh http add urlacl url=https://+:17829/SWXPowerShellASHost/ user=Everyone