SlideShare une entreprise Scribd logo
1  sur  211
joergkrause.de
Internet Information Services
Grundkurs für Softwareentwickler
Schwerpunkt Webentwicklung (HTTP Service)
Jörg Krause
Berater, Trainer, Autor
© joergkrause.de
Wer bin ich?
E-Mail:
joerg@krause.net
Profil:
de.linkedin.com/pub/joerg-krause/b/16a/a15
Twitter:
@joergisageek
Profilname:
www.xing.com/profile/Joerg_Krause6
About.me:
joerg.krause
Web:
www.joergkrause.de
www
© joergkrause.de
Agenda
1 2 3 4 5 6
Geschichte
+
Grundlagen
Installation
+
Konfiguration
Fehlersuche
+
Optimierung
Architektur
+
Arbeitsweise
Administration
+
Werkzeuge
Sicherheit
© joergkrause.de
Anti-Agenda
• Was hier nicht behandelt wird:
– Programmierung von Webanwendungen
– FTP
– SMTP
– PHP-Integration
– Common Gateway Interface, CGI / FastCGI
– DNS / DHCP
– Windows Server allgemein
© joergkrause.de
Agenda
1 2 3 4 5 6
Geschichte
+
Grundlagen
Installation
+
Konfiguration
Fehlersuche
Optimierung
Architektur
+
Arbeitsweise
Administration
+
Werkzeuge
Sicherheit
joergkrause.de
Geschichte
© joergkrause.de
Versionen
• 1.0 NT 3.5.1
• 2.0 NT 4
• 3.0 SP 1 NT 4 (ASP)
• 4.0 Option Pack NT 4
• 5.0 Windows 2000
• 5.1 Windows XP
• 6.0 Windows Server 2003, XP Pro 64Bit
• 7.0 Windows Server 2008, Vista
• 7.5 Windows Server 2008 R2, Windows 7
• 8.0 Windows Server 2012, Windows 8
• 8.5 Windows Server 2012 R2, Windows 8.1 Aktuell
Redesign
© joergkrause.de
Neues…
• 8.0 (Windows Server 2012 / Windows 8)
– Application Initialization
– Initialisierungsschritte (Warm-up)
– Konfiguration für ASP.NET 4.5 angepasst
– Mehr Leistungsbegrenzungsoptionen (Throttling) für
Sandbox- und Testumgebungen
– Dynamische Beschränkung von IP-Adressen
– WebSocket-Protokoll
– Server Name Indication (SNI) und Multi-Tenant SSL
Deployment
– Präventation gegen Angriffe auf FTP-Kennwörter (nur
FTP-Server)
© joergkrause.de
Neues…
• 8.5 (Windows Server 2012 R2 / Windows 8.1)
– Protokollierung in das
Windows-Ereignisprotokoll
– Mehr Logging-Optionen, z.B.
eigene Felder möglich für:
• Request Header – If-Match, Proxy-Authorization, Max-Forwards
• Response Header – Last-Modified, ETag
• Server Variable – ALL_RAW, REMOTE_HOST, SCRIPT_NAME
– Dynamische Site-Aktivierung
– Suspend für Worker-Prozess (vorher nur Terminierung)
bei Erreichen des Schwellwertes
joergkrause.de
Grundlagen
Das Wichtigste kurz zusammengefasst
© joergkrause.de
Gut zu wissen
• ISO OSI
• TCP/IP
• HTTP
• WebSockets
• Server Name Indication (SNI)
© joergkrause.de
ISO OSI-Modell
• International Organization for Standardization (ISO)
• Open Systems Interconnection (OSI) Modell
Schicht Name Protokolle Einheiten
7 Anwendung HTTP, FTP Daten
6 Darstellung
5 Sitzung
4 Transport TCP, UDP Segmente
3 Vermittlung ICMP, IP Pakete
2 Sicherung Ethernet Frames
1 Bitübertragung Bits
© joergkrause.de
OSI auf TCP/IP
• Vereinfachtes Modell
• Diverse Protokoll-Stacks
Ebene Name Stack I Stack II Stack III
5 Anwendung HTTP, FTP DHCP, DNS PING
4 Transport TCP UDP ICMP
3 Internet IP
2 Netzwerk ARP
1 Physikalisch / Link Ethernet
© joergkrause.de
TCP/IP
• IP = Internet Protocol
– Adressierung
– IPv4
– IPv6
• TCP = Transmission Control Protocol
– Übertragung
– Dienst über Port
© joergkrause.de
IP
• IPv4
• Adressraum 256*256*256*256 = 232
• Einteilung in Klassen
Klasse Erste Bits Präfix-Bits Netzwerke Suffix-Bits Hosts/NW
A 0xxx 7 128 24 16.777.216
B 10xx 14 16.384 16 65.536
C 110x 21 2.097.152 8 256
D 1110 Multicast
E 1111 Reserviert
© joergkrause.de
IP
• Punktschreibweise 0.0.0.0 nur für Menschen
• "0" reserviert für Netzwerke (mehrere Adressen)
• 255.255.0.0 ist ein Netzwerk (als Maske)
• 123.117.11.76 mit der Maske 255.255.0.0 ist
– das Netzwerk 123.117.0.0
– mit dem Host 11.76 (2892)
© joergkrause.de
TCP
• Ports dienen der Identifizierung von
Dienstapplikationen
Port Dienst
7 Echo
20/21 FTP
23 Telnet
25 SMTP
53 DNS
80 HTTP Standard
443 HTTPS Standard (SSL)
© joergkrause.de
HTTP
• Hypertext Transfer Protocol
Anforderung
(Request)
Antwort
(Response)
HTTP Client
(Browser)
HTTP Server
(IIS)
© joergkrause.de
Bausteine
• Uniform Resource Locator (URL)
• HTTP
– Die Anforderung
• Verb + URL + Version
• Header
• Daten
– Die Antwort
• Version + Statuscode + Statustext
• Header
• Daten
protocol://hostname:port/path-and-file-name
© joergkrause.de
Bausteine
• HTTP – Die Anforderung
GET http://www.iis.net/ HTTP/1.1
Accept: text/html, application/xhtml+xml, */*
Accept-Language: de-DE,en-US;q=0.5
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0)
Accept-Encoding: gzip, deflate
Host: www.iis.net
DNT: 1
Proxy-Connection: Keep-Alive
Cookie: omniID=1418555811742_52c0_810f_7d07_8c863dc10d32;
Leerzeile
© joergkrause.de
HTTP/1.1 200 OK
Cache-Control: private
Content-Length: 13144
Content-Type: text/html; charset=utf-8
Vary: Accept-Encoding
Server: Microsoft-IIS/8.0
X-Powered-By: ARR/2.5
X-Powered-By: ASP.NET
Date: Tue, 30 Dec 2014 11:45:31 GMT
<!DOCTYPE HTML>
Bausteine
• HTTP – Die Antwort
Leerzeile
© joergkrause.de
HTTP
• Eine Seite = viele Anforderungen
<html>
<head>
<link href="some.css" />
<link href="more.css" />
<script src="active.js">
</head>
<body>
<img src="figure.png" />
</body>
</html>
Anforderung
(Request)
Antwort
(Response)
Anforderung
(Request)
Antwort
(Response)
Anforderung
(Request)
Antwort
(Response)
Anforderung
(Request)
Antwort
(Response)
© joergkrause.de
HTTP
• Anfragen einer Website
© joergkrause.de
• Wichtige Methoden in Web-Anwendungen
HTTP Methoden (Verben)
Methode Funktion Nutzung
GET Ressource anfordern HTTP, REST
HEAD Kopfzeile analog zu GET anfordern HTTP
POST Daten zum Webserver senden HTTP, REST
PUT Daten auf dem Webserver speichern HTTP, REST
DELETE Ressource löschen REST
TRACE Diagnosedaten anfordern allgemein
OPTIONS Liste der unterstützten Methoden anfordern allgemein
CONNECT Verbindung durch Proxy anfordern allgemein
© joergkrause.de
HTTP Statuscodes
Codegruppe Bedeutung Erwartete Reaktion
1xx Information Empfangen, Server setzt Vorgang fort
2xx Erfolg Empfangen und verarbeitet, verstanden, bedient
3xx Umleitung Der Client wird zu einer Aktion aufgefordert
4xx Client Fehler Anfrage konnte nicht bedient/verstanden werden
5xx Server Fehler Der Server konnte wegen Fehlern nicht antworten
• Statusgruppen
© joergkrause.de
Wichtige Statuscodes
Code Name Einsatz
100 Continue Fortsetzen
101 Update Protokollwechsel
200 OK Anforderung erledigt
301 Moved Permanently Dauerhaft neuer Ort
302 Moved Temporarily Zeitweilig neuer Ort
304 Not Modified Ressource unverändert
• Information, Bestätigung, Aufforderung
© joergkrause.de
• Client Fehler, Anforderungsfehler
Wichtige Statuscodes
Code Name Einsatz
400 Bad Request Falsche Anforderung
401 Authentication Required Anmeldung erforderlich
403 Forbidden Geschützt, Anmeldung fehlgeschlagen
404 Not Found Nicht gefunden
405 Method Not Allowed Methode nicht erlaubt
408 Timeout Zeit abgelaufen
414 URI too Large Adresszeile zu lang
© joergkrause.de
Wichtige Statuscodes
Code Name Einsatz
500 Internal Server Error Fehler / Ausnahme in der Serverapplikation
501 Method Not Implemented Methode unbekannt, z.B. "Get" statt "GET"
502 Bad Gateway Proxy oder Gateway sendet unbekannte Anfrage
503 Service Unavailable Der bedienende Dienst ist nicht verfügbar
504 Gateway Timeout Proxy oder Gateway reagiert nicht
• Serverfehler
© joergkrause.de
Demo
• Website abrufen
• Mit Fiddler untersuchen
• Requests verstehen
• HTTP verstehen
© joergkrause.de
WebSockets
• HTTP ist "Fire and Forget"
• HTTP muss immer vom Client getriggert werden
• Websockets erlauben bidirektionale Verbindungen
• Websockets Schema:
– ws://
– wss:// (Verschlüsselt)
• Im IIS ab 8.0
• Im Browser ab IE 10, Chrome, Firefox, Safari
© joergkrause.de
WebSockets im Protokollstapel
• WebSockets im vereinfachten Internet-Modell
Ebene Name Stack
5 Anwendung WebSocket
4 Transport TCP
3 Internet IP
2 Netzwerk ARP
1 Physikalisch / Link Ethernet
© joergkrause.de
WebSockets
• Anfordern via HTTP
• Bestätigung via StatusCode 101
GET ws://websocket.example.com/ HTTP/1.1
Origin: http://example.com
Connection: Upgrade
Host: websocket.example.com
Upgrade: websocket
HTTP/1.1 101 WebSocket Protocol Handshake
Date: Wed, 16 Oct 2013 10:07:34 GMT
Connection: Upgrade
Upgrade: WebSocket
© joergkrause.de
SNI
• SNI = Server Name Indication
• Ab IIS Version 8.0
• Erweiterung des TLS (Transport Layer Security) Protokolls
• Ablauf einer gesicherten Verbindung:
– Browser fordert Zertifikat an
– Browser vergleicht URL mit der des Zertifikats
– Passt das wird normal weiterverfahren
• Mit SNI sendet der Browser die Anforderungsdaten sofort
mit  der Server kann das passende Zertifikat auswählen
• Spart individuelle IP-Adressen für SSL-Sites
• Mehrere Zertifikate auf einer IP-Adresse
© joergkrause.de
Agenda
1 2 3 4 5 6
Geschichte
+
Grundlagen
Installation
+
Konfiguration
Fehlersuche
+
Optimierung
Architektur
+
Arbeitsweise
Administration
+
Werkzeuge
Sicherheit
joergkrause.de
Architektur & Arbeitsweise
Bausteine und Komponenten
© joergkrause.de
Komponenten
• Protokollempfänger (Listener)
– HTTP.sys
• Dienste (Services)
– W3SVC
– WAS
• Verwaltungswerkzeuge (MMC, PowerShell, …)
© joergkrause.de
HTTP.sys
• Kernel Mode-Treiber
• HTTP und HTTPS Kommunikation
• Zertifikatsverwaltung
• Queue für den Worker Prozess
• Cache für ausgehende Daten (Response)
http.sys
Response CacheApp Pool
Queue
App Pool
Queue
App Pool
Queue
© joergkrause.de
HTTP.sys – direkte Konfiguration
• Früher: httpcfg.exe
• Jetzt: netsh http
Kernel Mode
http.sys
User Mode
HTTP Server API
httpcfg.exe netsh http IIS Listener
© joergkrause.de
HTTP.sys – Zugriffsrechte
• Registrierung
Grand
IS
Administrator
?
User hat
ACL-Rechte
Deny
NEIN
NEIN
JA
URL Register
allowed?
Best Match for
URL
Grand
JA
© joergkrause.de
HTTP.sys
• Fehlerverhalten
– Worker Prozess stoppt/startet neu/ist im Fehlerzustand
– HTTP.sys queued eingehende Anfragen (Requests)
– HTTP.sys bedient Anfragen ggf. mit Fehlercode (500)
– HTTP.sys wartet, bis der Worker Prozess wieder aktiv ist
Request WP aktiv?
Aktion
Queue WP aktiv?
500
JA
NEIN
NEIN
JA
Warten
Response
© joergkrause.de
W3SVC und WAS
• World Wide Web Publishing Service (W3SVC)
• Windows Process Activation Services (WAS)
svchost.exe
W3SVC WAS
Leistungs-
überwachung
HTTP.sys
Verwaltung
Prozess-
Verwaltung
Listener Adapter Interface
Konfigurations-
verwaltung
http:// net.tcp://
© joergkrause.de
Demo
• WAS und W3SVC
– im Taskmanager
– In der Dienstübersicht
© joergkrause.de
• Windows Process Activation Services
• Verwaltung der Konfiguration
– applicationHost.config
– reicht Einstellungen an den W3SVC weiter
– W3SVC konfiguriert den HTTP.sys
Weiterreichen der Konfiguration
WAS
applicationHost.config
WAS HTTP.sysW3SVC
© joergkrause.de
WAS
• Weiterreichen zum Worker Prozess
Weiterreichen der Anforderung
Listener
Adapter
WAS W3WP?
Ausführung
Applikation
Ja
Nein
App Pool
Factory
http://
net.tcp://
W3SVC
HTTP.sys
© joergkrause.de
WAS
• Verwaltet die Worker Prozesse
– WAS alleine kontrolliert die Worker Prozesse
– Kommunikation via HTTP wird vom W3SVC an WAS
geleitet
– Mapping der Application Pools zu Worker Prozessen
– Startet neue Worker Prozesse bei Bedarf
– Nutzt Listener Adapter für alle Anfragen außer HTTP
– Nutzt W3SVC für HTTP, dieser nutzt HTTP.sys intern
– WAS kümmert sich um die gesamte Konfiguration
© joergkrause.de
Worker Prozess
• Verarbeitet die Anforderung
• w3wp.exe
• Selbststartend (kein Host), lang laufend, User Mode
• Kernfunktionen eines Webservers
– Anforderung  Verarbeitung  Antwort
• Bedient immer einen Application Pool
– Der Pool konfiguriert den Worker Prozess
– Der Pool gruppiert Worker Prozesse gleicher Konfiguration
© joergkrause.de
Worker Prozess
• Ein Application Pool konfiguriert einen Worker
Prozess
Application Pool
w3wp.exe
AppDomain
AppDomain
Application Pool
w3wp.exe
Application Pool
w3wp.exe
AppDomain
AppDomain
AppDomain
Sonderfall
WebGarden
AppDomain
© joergkrause.de
Application Pool
• Prozessisolation, AppDomain-Isolation
• Ausführendes Konto
© joergkrause.de
Demo
• Application Pool Einstellungen
joergkrause.de
Arbeitsweise bei HTTP
Verarbeitung von Anforderungen
© joergkrause.de
Die Pipeline
• Klassisch (bis IIS 5 exklusiv, danach optional)
• Integriert (ab IIS 6)
© joergkrause.de
Die Pipeline
• Verarbeitung von Anforderungen
• Die Pipeline erzeugt Ereignisse
– Ereignis-Empfänger rufen die zugeordneten Module auf
– Module erzeugen dann die Antwort
• Integriert meint:
– ASP.NET und IIS haben ein gemeinsames Event-Modell
– Verwaltete Module (.NET) für alle Anforderungen
© joergkrause.de
• Erst native Verarbeitung im W3SVC
• Dann Weiterleitung an aspnet_isapi.dll
• Dort wird die verwaltete Umgebung aufgerufen
Nicht verwalteter
Code
Verwalteter
Code
> IIS 7.x
ISAPI
HTTP-Applikation
Request-
Handler
Request-
Handler
Request-
Handler
aspnet_isapi.dll
Worker Prozess
w3wp.exe
ISAPI
Klassische Pipeline
© joergkrause.de
> IIS 7.x
HTTP-Applikation
Request-
Handler
Request-
Handler
Request-
HandlerWorker Process
w3wp.exe
Integrierte Pipeline
• Ein Übergang am Anfang
• Ein Übergang am Ende
© joergkrause.de
Vorteile der integrierten Pipeline
Request
Response
Authentifizierung
Autorisierung
Verarbeitung
Ausgabe Cache
Übergänge sind String-Operationen
C++: ABCDEF0
.NET: 6ABCDEF
Null-Terminiert
Anzahl Zeichen
Jeder Übergang ist teuer!
© joergkrause.de
Auf einen Blick
HTTP Protocol Stack (http.sys)
svchost.exe applicationHost.config
WAS
W3SVC
w3wp.exe
App Module
Module
Module
User Mode
Kernel Mode
Internet
joergkrause.de
ASP.NET Integration
Die HTTP-Verarbeitung
© joergkrause.de
Bausteine der Pipeline
• Module
– Wirken auf jede Anforderung
– Merkmal: Aktiv, wenn konfiguriert
• Handler
– Bedienen bestimmte Anforderungen
– Merkmal: Aktiv, wenn durch Dateierweiterung erreicht
© joergkrause.de
Module
• Authentifizierung
• Autorisierung
• Kompression
• Cache
© joergkrause.de
Handler
• ASPX-Seitenverarbeitung
• Statische Dateien ausliefern
• Extensionless, z.B. für ASP.NET MVC
© joergkrause.de
Bausteine der Pipeline (ASP.NET)
Request Response
Pre Begin Request
Begin Request
Authenticate
Authorize
Resolve Cache
Map Handler
Aquire State
Pre Execute Handler
Execute Handler
End Request
Log Request
Update Cache
Release State
Handler
Managed Unmanaged
ASPX
ASHX
FastCGI
Static File
© joergkrause.de
Bausteine der Pipeline (MVC)
Request Response
Pre Begin Request
Begin Request
Authenticate
Authorize
Resolve Cache
Map Handler
Aquire State
Pre Execute Handler
Execute Handler
End Request
Log Request
Update Cache
Release State
Handler
Managed
IHttpHandler
RoutingModule
© joergkrause.de
Erweiterung der Pipeline (MVC)
Request
Response
IIS Pipeline
UrlRoutingModuleStatische Datei
Datei
gefunden?
RouteTable.RoutesCustom Route Handler
Custom IHttpHandler
MvcRouteHandler
ControllerFactory
Action Method
ActionResultKein ViewResult
IViewEngine
View Engine
Direkte
Ausgabe
Eigene
ViewEngine
Standard
ViewResult
Routing
Controller Controller
Action Execution
View Renderer
© joergkrause.de
Die Module
• ca. 30 Standardmodule
• Definition in
– %windir%system32inetsrvconfigapplicationhost.config
• Teils nativ (unmanaged), teils verwaltet (managed)
– nativ  C++ / ISAPI
– verwaltet  .NET
© joergkrause.de
Demo
• Module und Handler im
IIS Manager
© joergkrause.de
Übersicht Module
HTTP Protocol Support
ValidationRangeModule TraceVerbModule
OptionsVerbModule ProtocolSupportModule
Logging and
Diagnostics
HttpLoggingModule
CustomLoggingModule
Configuration and Metadata Caches
TokenCacheModule UriCacheModule
SiteCacheModule FileCacheModule
Core Web Server
DirectoryListingModule CustomErrorModule
DynamicCompressionModule StaticCompressionModule
StaticFileModule DefaultDocumentModule
HttpCacheModule
RequestMonitorModule
TracingModule
Authent./Author.
BasicAuthModule
DigestAuthModule
WindowsAuthModule
CertificateAuthModule
AnonymousAuthModule
AccessCheckModule
UrlAuthorizationModule
Extensibility
ISAPIModule
ISAPIFilterModule
CGIModule
ServerSideIncludeModule
ManagedEngineModule
Publishing
DavModule
RequestForwarderModule
HttpRedirectionModule RequestFilteringModule
© joergkrause.de
Agenda
1 2 3 4 5 6
Geschichte
+
Grundlagen
Installation
+
Konfiguration
Fehlersuche
+
Optimierung
Architektur
+
Arbeitsweise
Administration
+
Werkzeuge
Sicherheit
joergkrause.de
Installation & Konfiguration
joergkrause.de
Installation
© joergkrause.de
Installation
• Server Manager (Windows Server 2012 R2)
© joergkrause.de
Installation
• Add Roles
– Web Server (IIS)
© joergkrause.de
Installation
• Role Services
– Elemente der Installation
joergkrause.de
Installation mit Paket-Manager
© joergkrause.de
Kommandozeile
• Kommandozeile mit angehobenen Rechten
• Neue Kommandozeile mit angehobenen Rechten
Es folgt die Abfrage des Kennworts!
runas /user:Administrator cmd.exe
start /w runas /user:Administrator cmd.exe
Angemeldeter Benutzer
© joergkrause.de
Der Paket-Manager
• Automation der
– Installation von Windows-Features
– Installation von Updates / Hotfixes
– Bereitstellung von aktualisierten Sprachpaketen
start /w pkgmgr
/ip:"Feature1;Feature2"
/n:<answer_file>
Paket-Manager
Auf Beenden warten (/WAIT)
Neues Kommandozeilenfenster
Liste der Funktionen
Ergebnisse in Datei
© joergkrause.de
Optionen des Paket-Managers
• Wichtige Funktionen:
– /ip: Installieren
– /up: Deinstallieren
– /norestart: Verhindert
den automatischen
Neustart, falls dieser
erforderlich sein sollte
© joergkrause.de
Installation mit Paket-Manager
• Beispiel für ein Installationsskript
start /w pkgmgr /ip:IIS-WebServerRole;IIS-WebServer;IIS-
CommonHttpFeatures;IIS-StaticContent;IIS-DefaultDocument;IIS-
DirectoryBrowsing;IIS-HttpErrors;IIS-HttpRedirect;IIS-
ApplicationDevelopment;IIS-ASPNET;IIS-NetFxExtensibility;IIS-ASP;IIS-CGI;IIS-
ISAPIExtensions;IIS-ISAPIFilter;IIS-ServerSideIncludes;IIS-
HealthAndDiagnostics;IIS-HttpLogging;IIS-LoggingLibraries;IIS-
RequestMonitor;IIS-HttpTracing;IIS-CustomLogging;IIS-ODBCLogging;IIS-
Security;IIS-BasicAuthentication;IIS-WindowsAuthentication;IIS-
DigestAuthentication;IIS-ClientCertificateMappingAuthentication;IIS-
IISCertificateMappingAuthentication;IIS-URLAuthorization;IIS-
RequestFiltering;IIS-IPSecurity;IIS-Performance;IIS-
HttpCompressionStatic;IIS-HttpCompressionDynamic;IIS-
WebServerManagementTools;IIS-ManagementConsole;IIS-
ManagementScriptingTools;IIS-ManagementService;IIS-
IIS6ManagementCompatibility;IIS-Metabase;IIS-WMICompatibility;IIS-
LegacyScripts;IIS-LegacySnapIn;IIS-FTPPublishingService;IIS-FTPServer;IIS-
FTPManagement;WAS-WindowsActivationService;WAS-ProcessModel;WAS-
NetFxEnvironment;WAS-ConfigurationAPI
joergkrause.de
Installation mit PowerShell
© joergkrause.de
Installation mit der PowerShell
• PowerShell CommandLets:
– Install-WindowsFeature
(Alias: Add-WindowsFeature)
– Get-WindowsFeature
– Remove-WindowsFeature
• Alternativ auch Paket-Manager via PowerShell
© joergkrause.de
Installation mit der PowerShell
• Alternativ auch Paket-Manager via PowerShell:
$packages = "IIS-WebServerRole;" +
"IIS-WebServer;" +
"IIS-CommonHttpFeatures;" +
"IIS-StaticContent;" +
"IIS-DefaultDocument;" +
# ... weitere Pakete
"IIS-ManagementConsole;" +
"IIS-ManagementService;" +
"IIS-LegacySnapIn;" +
"IIS-FTPManagement;" +
"WAS-NetFxEnvironment;" +
"WAS-ConfigurationAPI"
Start-Process "pkgmgr" "/ip:$packages"
© joergkrause.de
Vorbereitung der PowerShell
• CommandLets nicht verfügbar?
import-module ServerManager
© joergkrause.de
Installation mit der PowerShell
• Interaktiv via ISE (Integrated Scripting Environment)
Skript-Editor
Shell
(Kommandozeile)
© joergkrause.de
Informationen abrufen
Get-WindowsFeature -Name web-server | Format-List -Property *
© joergkrause.de
Rollen installieren
Install-WindowsFeature -Name Web-Server
Neustart erforderlich?
Befehl erfolgreich
© joergkrause.de
Features
• Verwaltungswerkzeuge:
Install-WindowsFeature -Name Web-Mgmt-Tools
• Wenn man alle Features haben will:
Add-WindowsFeature -Name Web-Common-Http,
Web-Asp-Net,Web-Net-Ext,Web-ISAPI-Ext,
Web-ISAPI-Filter,Web-Http-Logging,
Web-Request-Monitor,Web-Basic-Auth,
Web-Windows-Auth,Web-Filtering,
Web-Performance,Web-Mgmt-Console,
Web-Mgmt-Compat,RSAT-Web-Server,
WAS -IncludeAllSubFeature
© joergkrause.de
Weitere Installationselemente
• Fernwartung (remote Zugriff auf IIS-Manager)
• Standardpfade der Sites (statt c:inetpubwwwroot)
• Rechte (ACLs) auf die Standardpfade
• Standard-Application Pools
© joergkrause.de
Beispielskript
#$Policy = "Unrestricted"
$Policy = "RemoteSigned"
If ((get-ExecutionPolicy) -ne $Policy) {
Write-Host "Script Execution is disabled. Enabling it now"
Set-ExecutionPolicy $Policy -Force
Write-Host "Please Re-Run this script in a new powershell enviroment"
Exit
}
$InetPubRoot = "D:Inetpub"
$InetPubLog = "D:InetpubLog"
$InetPubWWWRoot = "D:InetpubWWWRoot"
Add-WindowsFeature -Name Web-Common-Http,Web-Asp-Net,Web-Net-Ext,Web-ISAPI-Ext,Web-ISAPI-Filter,Web-Http-Logging,Web-Request-Monitor,Web-Basic-Auth,Web-Windows-
Auth,Web-Filtering,Web-Performance,Web-Mgmt-Console,Web-Mgmt-Compat,RSAT-Web-Server,WAS -IncludeAllSubFeature
Import-Module WebAdministration
New-Item -Path $InetPubRoot -type directory -Force -ErrorAction SilentlyContinue
New-Item -Path $InetPubLog -type directory -Force -ErrorAction SilentlyContinue
New-Item -Path $InetPubWWWRoot -type directory -Force -ErrorAction SilentlyContinue
$InetPubOldLocation = @(get-website)[0].physicalPath.ToString()
$InetPubOldLocation = $InetPubOldLocation.Replace("%SystemDrive%",$env:SystemDrive)
Copy-Item -Path $InetPubOldLocation -Destination $InetPubRoot -Force -Recurse
$Command = "icacls $InetPubWWWRoot /grant BUILTINIIS_IUSRS:(OI)(CI)(RX) BUILTINUsers:(OI)(CI)(RX)"
cmd.exe /c $Command
$Command = "icacls $InetPubLog /grant ""NT SERVICETrustedInstaller"":(OI)(CI)(F)"
cmd.exe /c $Command
#Changing Log Location
$Command = "%windir%system32inetsrvappcmd set config -section:system.applicationHost/sites -siteDefaults.logfile.directory:$InetPubLog"
cmd.exe /c $Command
$Command = "%windir%system32inetsrvappcmd set config -section:system.applicationHost/log -centralBinaryLogFile.directory:$InetPubLog"
cmd.exe /c $Command
$Command = "%windir%system32inetsrvappcmd set config -section:system.applicationHost/log -centralW3CLogFile.directory:$InetPubLog"
cmd.exe /c $Command
#Changing the Default Website location
Set-ItemProperty 'IIS:SitesDefault Web Site' -name physicalPath -value $InetPubWWWRoot
If (!(Test-Path "C:inetpubtempapppools")) {
New-Item -Path "C:inetpubtempapppools" -type directory -Force -ErrorAction SilentlyContinue
}
Remove-Item $InetPubOldLocation -Recurse -Force
$Command = "IISRESET"
Invoke-Expression -Command $Command
© joergkrause.de
Demo
• Rollen mit PowerShell
installieren
joergkrause.de
Hinweise zur Installation
© joergkrause.de
Was ist bei der Installation wichtig?
• Sorgfältige Auswahl der Module
• Weniger Module heißt
– weniger Angriffsfläche
– bessere Performance
– höhere Stabilität
– geringere Updatebedarf
© joergkrause.de
Installation
• Module, die explizit installiert werden (können):
– HTTP:
• Default Document
• Directory Browsing
• HTTP Errors
• Static Content
• HTTP Redirection
• WebDAV Publishing
– Health & Diagnostics:
• Logging, Custom Logging, Logging Tools
• Request Monitor
• Tracing
© joergkrause.de
Installation
• Module, die explizit installiert werden (Fortsg.):
– Performance:
• Static Content Compression
• Dynamic Content Compression
– Security:
• Request Filtering
• IP Filtering
• Auth Modules: Basic, Digest, Windows
• SSL Certificates, Client Mapping
• URL Authorization
– Development
• .NET / ASP.NET / CGI / ISAPI / SSI / WebSockets
© joergkrause.de
Installation
• Module, die explizit installiert werden (Fortsg.):
– FTP
– Web Core
– Management Tools
© joergkrause.de
Demo
• IIS-Module nachinstallieren
• Installationsskript exportieren
• Installation überprüfen
joergkrause.de
Konfiguration
© joergkrause.de
WAS Konfiguration
• Global
• Protokoll
• Application Pools
• Sites
© joergkrause.de
Konfiguration
web.config
Virtual Directory
web.config
Sub Directory
web.config
Application
web.config
Sub Directory
web.config
Site
Abschnitte können
geblockt werden
Vererbung setzt sich
auf Verzeichnisebene
fort
Virtuelle Vererbung
der Einstellungen
machine.config
.NET Global
applicationHost.config
IIS Global
Global
web.config
ASP.NET Global
© joergkrause.de
Speicherort der Dateien
• machine.config
• web.config
• applicationHost.config
© joergkrause.de
Konfigurationsschema
• XML basiert
• Delegierbar
• Vererbung steuerbar
• Zugriff über
– Editor
– IIS Manager (MMC)
– Skripte
– Programmierung (.NET)
– Kommandozeilenwerkzeug
– PowerShell
© joergkrause.de
Konfigurationsschema
• Standardmäßig sind…
– …alle IIS Abschnitte gesperrt, außer:
• Default Document
• Directory Browsing
• HTTP Header
• HTTP Redirects
– …alle .NET-Framework- / ASP.NET-Abschnitte offen
© joergkrause.de
Konfigurationsschema
• Delegierung heißt:
– Konfiguration sperren, “overrideMode”
– ACLs auf alle Dateien anwenden
<section name="defaultDocument" overrideModeDefault="Allow" />
Allow
Deny
<location overrideMode="Allow">
<system.webServer>
<security>
<authentication>
</authentication>
</security>
</system.webServer>
</location>
Allow
Deny
© joergkrause.de
Konfigurationsschema
• Elemente sperren
• Beispiel:
lockElements="providers,element1,element2"
lockAllElementsExcepts=""
<location overrideMode="Allow">
<system.webServer>
<security>
<authentication>
<windowsAuthentication enabled="true"
lockElements="providers">
<providers>
<add value="Negotiate" />
<add value="NTLM" />
</providers>
</windowsAuthentication>
</authentication>
</security>
</system.webServer>
</location>
Name des Elements
© joergkrause.de
Konfigurationsschema
• Attribute sperren
lockAttributes="attribute1,attribute2,attribute3"
lockAllAttributesExcept=""
<location overrideMode="Allow">
<system.webServer>
<security>
<authentication>
<windowsAuthentication enabled="true"
lockAttributes="enabled">
<providers>
<add value="Negotiate" />
<add value="NTLM" />
</providers>
</windowsAuthentication>
</authentication>
</security>
</system.webServer>
</location>
Name des Attributes
Beispiel:
© joergkrause.de
Konfigurationsschema
• Oft sind Listen erforderlich (Collections)
• Beispiel: Provider
• Listen haben Steuerelemente:
– <add>
– <remove>
– <clear>
© joergkrause.de
Konfigurationsschema
• Sperren der Elemente zum Entfernen
• Sperren von einzelnen Elementen einer Collection:
<windowsAuthentication enabled="true" >
<providers lockElements="remove,clear">
<add value="Negotiate" />
<add value="NTLM" />
</providers>
</windowsAuthentication>
<windowsAuthentication enabled="true" >
<providers>
<add value="Negotiate" />
<add value="NTLM" lockItem="true" />
</providers>
</windowsAuthentication>
© joergkrause.de
Konfigurationsschema
• Schema-Datei (XML Schema, XSD):
• Konfiguration ist Case Sensitive
– Gilt auch für Anweisungen in Skriptumgebungen
– applicationPool ≠ ApplicationPool
%windir%system32inetsrvconfigschemaIIS_schema.xml
© joergkrause.de
Demo
• Konfiguration anschauen:
– machine.config
– web.config
– applicationHost.config
© joergkrause.de
Gemeinsame Konfiguration
• Load Balancer
• Serverfarmen / Fail Over Cluster
• Migrationsszenarien
applicationHost.config
© joergkrause.de
Gemeinsame Konfiguration
• Wie kommt die applicationHost.config auf den
gemeinsamen Server?
– Exportfunktion
© joergkrause.de
Gemeinsame Konfiguration
1. MMC Funktion
2. Pfadeinstellungen
© joergkrause.de
Gemeinsame Konfiguration
• Auswirkung auf die Konfigurationsdatei:
• Mit Domänen-User:
<configSections>
<section name="configurationRedirection" />
</configSections>
<configurationRedirection
enabled="true"
path="machinenamecentralconfig$"
userName="LocalUser"
password="p@ssw0rd" />
<configurationRedirection
enabled="true"
path="machinenamecentralconfig$"
userName="domainuser"
password="p@ssw0rd" />
© joergkrause.de
Demo
• Konfiguration verteilen:
– User einrichten (Nicht-Domäne)
– Konfiguration exportieren
– Konfiguration kopieren
– Konfiguration auf UNC-Pfad
joergkrause.de
Administration & Werkzeuge
© joergkrause.de
Agenda
1 2 3 4 5 6
Geschichte
+
Grundlagen
Installation
+
Konfiguration
Fehlersuche
+
Optimierung
Architektur
+
Arbeitsweise
Administration
+
Werkzeuge
Sicherheit
+
Härtung
© joergkrause.de
Allgemeine Hinweise
• Nur installieren, was benötigt wird
– Angriffsfläche reduzieren
– Speicherbedarf verringern
– Kontrolle erhöhen
• Installation identisch auf allen Servern
– Vermeide "503 Service Unavailable"
joergkrause.de
Application Pool, Site, Bindung
© joergkrause.de
Application Pool
Allgemein
Leistung
Überwachung
© joergkrause.de
Sites und ihre Bausteine
• Site
– Applikation
– Bindung
– Virtuelle Verzeichnisse
• Container für
– Applikationen und
virtuelle Verzeichnisse
• Zugriff
– erfolgt über
eine oder mehrere
Bindungen
Site
Applikation
Virtuelles Verzeichnis
Virtuelles Verzeichnis
Bindung
Internet
© joergkrause.de
Site: Definition
<sites>
<site name="Default Web Site" id="1">
<application path="/">
<virtualDirectory path="/"
physicalPath="%SystemDrive%inetpubwwwroot" />
</application>
<bindings>
<binding protocol="http" bindingInformation="*:80:" />
</bindings>
</site>
<siteDefaults>
<logFile logFormat="W3C"
directory="%SystemDrive%inetpublogsLogFiles" />
<traceFailedRequestsLogging
directory="%SystemDrive%inetpublogsFailedLogs" />
</siteDefaults>
<applicationDefaults applicationPool="DefaultAppPool" />
<virtualDirectoryDefaults allowSubDirConfig="true" />
</sites>
© joergkrause.de
Bindung
• Definiert den physikalischen Endpunkt
• Besteht aus:
– Adresse (Wo?)
– Protokoll (Wie?)
© joergkrause.de
Bindung: Adresse
• Je nach Protokoll
• Bei HTTP / HTTPS:
– IP (oder * zur Bindung an alle physischen Adressen)
– Port
– Host Header (optional)
Ein oder
mehrere Bindungen
pro Site
Protokoll IP Port
© joergkrause.de
Besonderheit Host Header
• Typischer HTTP-Request:
• Header "Host" liefert die Host-Information
• DNS bindet mehrere Namen an eine IP
• "Host Header" löst dies in den IIS wieder auf
GET http://www.iis.net/ HTTP/1.1
Accept: text/html, application/xhtml+xml, */*
Accept-Language: de-DE,en-US;q=0.5
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0)
Accept-Encoding: gzip, deflate
Host: www.iis.net
DNT: 1
Proxy-Connection: Keep-Alive
Cookie: s_cc=true; s_sq=%5B%5BB%5D%5D;
© joergkrause.de
Besonderheit Host Header
• Durchleitung der Anfrage-Informationen
• Spart öffentliche IP-Adressen
• DNS ist nicht Teil der IIS
www.iis.net
Auflösung
auf
212.17.42.100
www.asp.net
www.wcf.net
www.iis.net
www.asp.net
www.wcf.net
Browser DNS Applikationen
IIS
Bindung
an
212.17.42.100
© joergkrause.de
Applikationen
• Gruppe von Dateien, die Inhalte liefern
• Pfad zur Applikation ist Teil des URL der Site
• Jede Site muss eine Root-Applikation haben
• Jede Site kann mehrere Applikationen enthalten
• Die Isolation der Applikationen
erfolgt über den
Application Pool
© joergkrause.de
Virtuelles Verzeichnis
• Pfad im IIS der einen externen Teil des URL auf
einen physikalischen Pfad auf der Festplatte
abbildet
joergkrause.de
Werkzeuge
Administration der IIS
© joergkrause.de
Übersicht
• IIS Manager (MMC GUI)
• Kommandozeile
– CMD: appcmd.exe
– PS1: IIS CommandLet
• Code
– WMI Scripting (VBScript auf "rootWebAdministration")
– .NET (VB/C# auf Microsoft.Web.Administration)
© joergkrause.de
Eigenschaften
• IIS und ASP.NET gemeinsam verwalten
• Eine Datenbasis für alle Werkzeuge
• Administration ist delegierbar
Kontrollfluss der Werkzeuge
IIS Manager
.NET Wrapper
Microsoft.Web.Administration
appcmd WMI
COM API
*.config*.config
© joergkrause.de
IIS Manager
• Grafische Oberfläche via Management Console
• Fernzugriff auf Server (über HTTP)
• Erweiterbar via
.NET/WinForms
© joergkrause.de
Globale Konfiguration
• Generischer Editor
• Funktionsdelegation
• Zugriffsrechte auf MMC (nur Site-Ebene)
• Benutzer (Nur wenn andere als Windows-Auth)
• Entfernte Verwaltungsdienste (Remote Zugriff)
• Gemeinsame Konfiguration
• Web Plattform Installer
© joergkrause.de
Remote Zugriff
• Freigabe
• Authentifizierung
• Verbindung
• Verschlüsselung
• Protokollierung
• IP-Beschränkungen
© joergkrause.de
Administrationsskripte
Besser immer mit Skript
© joergkrause.de
Kommandozeile
• Für Batch-Dateien
• appcmd.exe
• Syntax:
– appcmd (cmd) (object) <identifier> < /param:value … >*
– cmd = Kommando, z.B.
• add, list, delete, set
– object = Ziel des Kommandos, muss Kommando kennen
• Site, App, VDir, Apppool, Config, Backup, WP, Request, Module,
Trace
– identifier = Name oder ID
– param:value = Parameter, optional, wiederholbar, u.a.
• /text, /config, /xml, /commit
– /? = Hilfe, (object) /? = Hilfe zu Ziel
© joergkrause.de
C:> appcmd list sites
SITE "Default Web Site" (id:1,bindings:HTTP/*:80:,state:Started)
SITE "Site1" (id:2,bindings:http/*:81:,state:Started)
SITE "Site2" (id:3,bindings:http/*:82:,state:Stopped)
C:> appcmd list requests
REQUEST "fb0000008000000e" (url:GET /wait.aspx?time=10000,time:4276
msec,client:localhost)
C:> appcmd list requests /apppool.name:DefaultAppPool
C:> appcmd list requests /wp.name:3567
C:> appcmd list requests /site.id:1
Filter nach Application Pool,
Worker Process oder Site
Anzeigen und Filtern
© joergkrause.de
C:> appcmd list config /section:? | findstr system.webServer
system.webServer/globalModules
system.webServer/serverSideInclude
system.webServer/httpTracing
...
C:> appcmd list config /section:directoryBrowse
<system.webServer>
<directoryBrowse enabled="true" />
</system.webServer>
C:> appcmd list config /section:directoryBrowse /config:*
<system.webServer>
<directoryBrowse enabled="true" showFlags="Extension, Size, Time, Date" />
</system.webServer>
C:> appcmd list config /section:directoryBrowse /text:*
CONFIG
CONFIG.SECTION: system.webServer/directoryBrowse
path: MACHINE/WEBROOT/APPHOST
overrideMode: Inherit
[system.webServer/directoryBrowse]
enabled:"true"
showFlags:"Extension, Size, Time, Date"
IIS Abschnitt – ebenso
“system.web” und
“system.applicationHost”
Zeigt nicht explizit
gesetzte Attribute an
Konfiguration
© joergkrause.de
set appcmd=%systemroot%system32inetsrvAPPCMD.EXE
%appcmd% add site /name:MyNewSite /bindings:"http/*:81:"
/physicalPath:"D:New folder"
%appcmd% add apppool /name:MyNewSiteAppPool
/managedRuntimeVersion:"v4.0" /managedPipelineMode:"Integrated"
%appcmd% set app "MyNewSite/"
/applicationPool:"MyNewSiteAppPool"
%appcmd% list site /name:MyNewSite
pause
Sites und Application Pool
© joergkrause.de
Demo
• Batch erstellen:
– Application Pool
– Site
– Einstellungen Protokoll etc.
© joergkrause.de
PowerShell
• Muss als Admin laufen
• Bis IIS7 separate Installation
• Ab IIS 8 Teil des Windows Betriebssystems
• Snap-In:
– Web-ScriptingTools
http://technet.microsoft.com/en-us/library/hh867899.aspx
© joergkrause.de
Demo
• Skript erstellen:
– Application Pool
– Site
– Einstellungen Protokoll etc.
© joergkrause.de
Programmierung
• Verwaltete API für IIS
– Microsoft.Web.Administration
– Typisiert für IIS-Objekte (Pool, Site)
– Schwach typisiert für ASP.NET
• Verwaltete API für Konfiguration
– System.Configuration
– Typisiert für .NET und ASP.NET
– Eigene Typisierung
© joergkrause.de
Programmierung
ServerManager iisManager = new ServerManager();
foreach(WorkerProcess w3wp in iisManager.WorkerProcesses) {
Console.WriteLine("W3WP ({0})", w3wp.ProcessId);
foreach(Request request in w3wp.GetRequests(0)) {
Console.WriteLine("{0} - {1},{2},{3}",
request.Url,
request.ClientIPAddr,
request.TimeElapsed,
request.TimeInState);
}
}
© joergkrause.de
Demo
• Kommandozeile erstellen:
– Application Pool
– Site
– Einstellungen Protokoll etc.
© joergkrause.de
Agenda
1 2 3 4 5 6
Geschichte
+
Grundlagen
Installation
+
Konfiguration
Fehlersuche
+
Optimierung
Architektur
+
Arbeitsweise
Administration
+
Werkzeuge
Sicherheit
+
Härtung
joergkrause.de
Sicherheit
Absichern einer IIS-Installation
Verschlüsseln von Verbindungen
Beschränken von Verbindungen
Verschlüsselung der Konfiguration
joergkrause.de
TLS (SSL)
© joergkrause.de
TLS (SSL) Einrichten
• TLS = Transport Layer Security
– (früher SSL = Secure Socket Layer)
– Seit SSL 3.0 nur noch TLS genannt
– TLS 1.0 = SSL 3.1
– Einsatz überwiegend mit HTTPS
• Zertifikat erstellen / beschaffen
• Verwendung konfigurieren
• Bindungen einstellen
© joergkrause.de
Grundlagen Verschlüsselung
• Der Weg vom Sender zum Empfänger
• Problem:
Wie kommt der Schlüssel zum Empfänger?
Schlüssel
Daten
Daten
verschlüsselt Schlüssel
Daten
© joergkrause.de
Grundlagen Verschlüsselung
• Lösung: Asymmetrische Kryptografie
Öffentlicher
Schlüssel
Daten
Daten
verschlüsselt
Privater
Schlüssel
Daten
Empfänger A gibt ein Schlüsselpaar heraus,
mit dem der Sender B mittels des öffentlichen Teils
die Nachricht verschlüsselt und nur der Empfänger A
kann diese wieder entschlüsseln
© joergkrause.de
Grundlagen Verschlüsselung
• Asymmetrische Verfahren sind aufwändig
– (RSA ca. Faktor 1000 langsamer als AES)
• Sie werden nur benutzt, um einen symmetrischen
Schlüssel sicher auszutauschen
• Asymmetrisches Verfahren:
– RSA (Rivest Shamir Adleman)
• Symmetrische Verfahren sind billiger
• Symmetrische Verfahren bei TLS:
– DES
– Triple DES
– AES (auch Rijndael genannt)
© joergkrause.de
Grundlagen Verschlüsselung
• Zertifikat
– digitaler Datensatz mit Eigenschaften
– Standard für Zertifikate mit öffentlichem Schlüssel:
– X.509
– Aktuell X.509v3 (Version 3)
• Bindung an ein "Distinguished Name" oder
"Alternative Name"
– E-Mail, DNS-Eintrag (URL), IP
© joergkrause.de
Grundlagen der Verschlüsselung
• Dateierweiterungen
– .CER – DER- oder Base64-kodiertes Zertifikat
– .CRT – DER- oder Base64-kodiertes Zertifikat
– .CSR – Base64-kodierte Zertifizierungsanfrage
– .DER – DER-kodiertes Zertifikat
– .P12 / .PFX – PKCS#12, kann öffentliche Zertifikate und
private Schlüssel (Kennwort-geschützt) enthalten.
– .P7C – PKCS#7-signierte Datenstruktur ohne Dateninhalt,
nur mit Zertifikaten oder Zertifikatsperrlisten
– .PEM – Base64-kodiertes Zertifikat
-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----
Anfang und Ende, wenn der
Inhalt Base64-kodiert ist
© joergkrause.de
Grundlagen Verschlüsselung
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 1 (0x1)
Signature Algorithm: md5WithRSAEncryption
Issuer: C=FJ, ST=Fiji, L=Suva, O=SOPAC, OU=ICT, CN=SOPAC Root CA/Email=administrator@sopac.org
Validity
Not Before: Nov 20 05:47:44 2001 GMT
Not After : Nov 20 05:47:44 2002 GMT
Subject: C=FJ, ST=Fiji, L=Suva, O=SOPAC, OU=ICT, CN=www.sopac.org/Email=administrator@sopac.org
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public Key: (1024 bit)
Modulus (1024 bit):
00:ba:54:2c:ab:88:74:aa:6b:35:a5:a9:c1:d0:5a:
9b:fb:6b:b5:71:bc:ef:d3:ab:15:cc:5b:75:73:36:
b8:01:d1:59:3f:c1:88:c0:33:91:04:f1:bf:1a:b4:
7a:c8:39:c2:89:1f:87:0f:91:19:81:09:46:0c:86:
08:d8:75:c4:6f:5a:98:4a:f9:f8:f7:38:24:fc:bd:
94:24:37:ab:f1:1c:d8:91:ee:fb:1b:9f:88:ba:25:
da:f6:21:7f:04:32:35:17:3d:36:1c:fb:b7:32:9e:
42:af:77:b6:25:1c:59:69:af:be:00:a1:f8:b0:1a:
6c:14:e2:ae:62:e7:6b:30:e9
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
FE:04:46:ED:A0:15:BE:C1:4B:59:03:F8:2D:0D:ED:2A:E0:ED:F9:2F
X509v3 Authority Key Identifier:
keyid:E6:12:7C:3D:A1:02:E5:BA:1F:DA:9E:37:BE:E3:45:3E:9B:AE:E5:A6
DirName:/C=FJ/ST=Fiji/L=Suva/O=SOPAC/OU=ICT/CN=SOPAC Root CA/Email=administrator@sopac.org
serial:00
-----BEGIN CERTIFICATE-----
MIIDoTCCAwqgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBiTELMAkGA1UEBhMCRkox
DTALBgNVBAgTBEZpamkxDTALBgNVBAcTBFN1dmExDjAMBgNVBAoTBVNPUEFDMQww
CgYDVQQLEwNJQ1QxFjAUBgNVBAMTDVNPUEFDIFJvb3QgQ0ExJjAkBgkqhkiG9w0B
CQEWF2FkbWluaXN0cmF0b3JAc29wYWMub3JnMB4XDTAxMTEyMDA1NDc0NFoXDTAy
MTEyMDA1NDc0NFowgYkxCzAJBgNVBAYTAkZKMQ0wCwYDVQQIEwRGaWppMQ0wCwYD
VQQHEwRTdXZhMQ4wDAYDVQQKEwVTT1BBQzEMMAoGA1UECxMDSUNUMRYwFAYDVQQD
Ew13d3cuc29wYWMub3JnMSYwJAYJKoZIhvcNAQkBFhdhZG1pbmlzdHJhdG9yQHNv
cGFjLm9yZzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAulQsq4h0qms1panB
0Fqb+2u1cbzv06sVzFt1cza4AdFZP8GIwDORBPG/GrR6yDnCiR+HD5EZgQlGDIYI
2HXEb1qYSvn49zgk/L2UJDer8RzYke77G5+IuiXa9iF/BDI1Fz02HPu3Mp5Cr3e2
JRxZaa++AKH4sBpsFOKuYudrMOkCAwEAAaOCARUwggERMAkGA1UdEwQCMAAwLAYJ
YIZIAYb4QgENBB8WHU9wZW5TU0wgR2VuZXJhdGVkIENlcnRpZmljYXRlMB0GA1Ud
DgQWBBT+BEbtoBW+wUtZA/gtDe0q4O35LzCBtgYDVR0jBIGuMIGrgBTmEnw9oQLl
uh/anje+40U+m67lpqGBj6SBjDCBiTELMAkGA1UEBhMCRkoxDTALBgNVBAgTBEZp
amkxDTALBgNVBAcTBFN1dmExDjAMBgNVBAoTBVNPUEFDMQwwCgYDVQQLEwNJQ1Qx
FjAUBgNVBAMTDVNPUEFDIFJvb3QgQ0ExJjAkBgkqhkiG9w0BCQEWF2FkbWluaXN0
cmF0b3JAc29wYWMub3JnggEAMA0GCSqGSIb3DQEBBAUAA4GBADSN+2ULhVviRAnw
VTE7KSv0/apf27gRGsarM2dZwQTeNN8IVy7GYNz31OLxc5dXI1ACY/x4ljSzysQb
xUzIFmm7nEp+ABlIYuJRqzr6/YjN4J3vZ1Da/ksTxQyM/K1ute5A4/00EJ+tNL3b
Bu0JPfKmgSJjFtyuMwxw/Qpsr7xa
-----END CERTIFICATE-----
© joergkrause.de
Grundlagen Verschlüsselung
• Begriffe (Auswahl):
– PKI = Public Key Infrastructure
• System zum Herausgeben digitaler Zertifikate
– CA = Certificate Authority
• Hierarchisches System von Zertifizierungsstellen
– CRL = Certificate Revocation List
• Zertifikatssperrliste, Liste ungültiger Zertifikate
– RA = Registration Authority
• Organisation, wo Zertifikate beantragt werden können
– VA = Validation Authority
• Dienst, wo Zertifikate geprüft werden können
– DS = Directory Service
• Durchsuchbares Verzeichnis mit ausgestellten Zertifikaten
© joergkrause.de
-----BEGIN CERTIFICATE-----
MIIDoTCCAwqgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBiTELMAkGA1UEBhMCRkox
DTALBgNVBAgTBEZpamkxDTALBgNVBAcTBFN1dmExDjAMBgNVBAoTBVNPUEFDMQww
CgYDVQQLEwNJQ1QxFjAUBgNVBAMTDVNPUEFDIFJvb3QgQ0ExJjAkBgkqhkiG9w0B
CQEWF2FkbWluaXN0cmF0b3JAc29wYWMub3JnMB4XDTAxMTEyMDA1NDc0NFoXDTAy
MTEyMDA1NDc0NFowgYkxCzAJBgNVBAYTAkZKMQ0wCwYDVQQIEwRGaWppMQ0wCwYD
VQQHEwRTdXZhMQ4wDAYDVQQKEwVTT1BBQzEMMAoGA1UECxMDSUNUMRYwFAYDVQQD
Ew13d3cuc29wYWMub3JnMSYwJAYJKoZIhvcNAQkBFhdhZG1pbmlzdHJhdG9yQHNv
cGFjLm9yZzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAulQsq4h0qms1panB
0Fqb+2u1cbzv06sVzFt1cza4AdFZP8GIwDORBPG/GrR6yDnCiR+HD5EZgQlGDIYI
2HXEb1qYSvn49zgk/L2UJDer8RzYke77G5+IuiXa9iF/BDI1Fz02HPu3Mp5Cr3e2
JRxZaa++AKH4sBpsFOKuYudrMOkCAwEAAaOCARUwggERMAkGA1UdEwQCMAAwLAYJ
YIZIAYb4QgENBB8WHU9wZW5TU0wgR2VuZXJhdGVkIENlcnRpZmljYXRlMB0GA1Ud
DgQWBBT+BEbtoBW+wUtZA/gtDe0q4O35LzCBtgYDVR0jBIGuMIGrgBTmEnw9oQLl
uh/anje+40U+m67lpqGBj6SBjDCBiTELMAkGA1UEBhMCRkoxDTALBgNVBAgTBEZp
amkxDTALBgNVBAcTBFN1dmExDjAMBgNVBAoTBVNPUEFDMQwwCgYDVQQLEwNJQ1Qx
FjAUBgNVBAMTDVNPUEFDIFJvb3QgQ0ExJjAkBgkqhkiG9w0BCQEWF2FkbWluaXN0
cmF0b3JAc29wYWMub3JnggEAMA0GCSqGSIb3DQEBBAUAA4GBADSN+2ULhVviRAnw
VTE7KSv0/apf27gRGsarM2dZwQTeNN8IVy7GYNz31OLxc5dXI1ACY/x4ljSzysQb
xUzIFmm7nEp+ABlIYuJRqzr6/YjN4J3vZ1Da/ksTxQyM/K1ute5A4/00EJ+tNL3b
Bu0JPfKmgSJjFtyuMwxw/Qpsr7xa
-----END CERTIFICATE-----
Arbeitsweise der PKI (Nutzersicht)
CA VA
RA
4. Ausstellung
3. Information
6. Prüfung
5. Authentifizierung
Nutzer
Shop
-----BEGIN CERTIFICATE-----
MIIDoTCCAwqgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBiTELMAkGA1UEBhMCRkox
DTALBgNVBAgTBEZpamkxDTALBgNVBAcTBFN1dmExDjAMBgNVBAoTBVNPUEFDMQww
CgYDVQQLEwNJQ1QxFjAUBgNVBAMTDVNPUEFDIFJvb3QgQ0ExJjAkBgkqhkiG9w0B
CQEWF2FkbWluaXN0cmF0b3JAc29wYWMub3JnMB4XDTAxMTEyMDA1NDc0NFoXDTAy
MTEyMDA1NDc0NFowgYkxCzAJBgNVBAYTAkZKMQ0wCwYDVQQIEwRGaWppMQ0wCwYD
VQQHEwRTdXZhMQ4wDAYDVQQKEwVTT1BBQzEMMAoGA1UECxMDSUNUMRYwFAYDVQQD
Ew13d3cuc29wYWMub3JnMSYwJAYJKoZIhvcNAQkBFhdhZG1pbmlzdHJhdG9yQHNv
cGFjLm9yZzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAulQsq4h0qms1panB
0Fqb+2u1cbzv06sVzFt1cza4AdFZP8GIwDORBPG/GrR6yDnCiR+HD5EZgQlGDIYI
2HXEb1qYSvn49zgk/L2UJDer8RzYke77G5+IuiXa9iF/BDI1Fz02HPu3Mp5Cr3e2
JRxZaa++AKH4sBpsFOKuYudrMOkCAwEAAaOCARUwggERMAkGA1UdEwQCMAAwLAYJ
YIZIAYb4QgENBB8WHU9wZW5TU0wgR2VuZXJhdGVkIENlcnRpZmljYXRlMB0GA1Ud
DgQWBBT+BEbtoBW+wUtZA/gtDe0q4O35LzCBtgYDVR0jBIGuMIGrgBTmEnw9oQLl
uh/anje+40U+m67lpqGBj6SBjDCBiTELMAkGA1UEBhMCRkoxDTALBgNVBAgTBEZp
amkxDTALBgNVBAcTBFN1dmExDjAMBgNVBAoTBVNPUEFDMQwwCgYDVQQLEwNJQ1Qx
FjAUBgNVBAMTDVNPUEFDIFJvb3QgQ0ExJjAkBgkqhkiG9w0BCQEWF2FkbWluaXN0
cmF0b3JAc29wYWMub3JnggEAMA0GCSqGSIb3DQEBBAUAA4GBADSN+2ULhVviRAnw
VTE7KSv0/apf27gRGsarM2dZwQTeNN8IVy7GYNz31OLxc5dXI1ACY/x4ljSzysQb
xUzIFmm7nEp+ABlIYuJRqzr6/YjN4J3vZ1Da/ksTxQyM/K1ute5A4/00EJ+tNL3b
Bu0JPfKmgSJjFtyuMwxw/Qpsr7xa
-----END CERTIFICATE-----
© joergkrause.de
Zertifikat beschaffen
Root CA
Intermediate CA Intermediate CA Intermediate
Issuing CAs Issuing CAs Issuing CAs
joergkrause.de
SSL in den IIS
Einrichtung und Konfiguration
© joergkrause.de
Vorbereitung
• Wahl des Zertifikats:
– Valid From und Valid To gültig / sinnvoll?
– Common Name (CN) passend zur URL der Site?
– Issuer (Herausgeber) in der Liste vertrauter
Stammzertifikate?
© joergkrause.de
Testzertifikat
• "Self Signed"
• Test-Root-Zertifikat und Test-Zertifikat mit makecert
• Test-Zertifikat mit Powershell
– New-SelfSignedCertificate
© joergkrause.de
Testzertifikat mit makecert
• Anlegen und Speichern eines Testzertifikats
makecert -r
-pe
-n "CN=www.yourserver.com"
-b 01/01/2015
-e 01/01/2036
-eku 1.3.6.1.5.5.7.3.1
-ss my
-sr localMachine
-sky exchange
-sp "Microsoft RSA SChannel Cryptographic Provider"
-sy 12
"Self-Signed"
Privater Schlüssel exportierbar
Name nach X.500
Gültig ab (Valid From/begin)
Gültig bis (Valid To/end)
Store (X.509 store name)
Location (currentuser/localmachine)
Key Type (exchange/signature)
Provider
CryptoAPI Provider Type
Zertifikatstyp (OID-Format)
© joergkrause.de
OID
• Object Identifier
– Baum mit Objektbeschreibungswerten
– Private Knoten (kostenlose Registrierung) möglich
– Wurzel:
• 0: ITU-T (Telecommunication Standardization Sector)
• 1: ISO
• 2: ITU-T + ISO Joint
• OID ist ein Meta-Standard
http://www.oid-info.com/faq.htm
http://www.codingfreaks.de/2012/04/02/gultige-oids-in-makecert-exe/
© joergkrause.de
OID
• So entsteht die OID
1. ISO
3. Identified Organization
6. dod (US department of defence)
1. Internet
5. Security
5. mechanisms
7. pkix (Public Key Infrastructure)
3. kp (Extended Key Purpose)
1 serverAuth
Test eines OID: http://oid-info.com/get/1.3.6.1.5.5.7.3.1
"Indicates that a certificate can be used as an SSL server certificate"
© joergkrause.de
Aktuelle Konfiguration
• Entscheidend ist http.sys!
netsh http show sslcert
© joergkrause.de
Konfiguration
• SSL optional oder zwingend
© joergkrause.de
Bindungen
• Standard-Port für SSL: 443
• Einstellungen Via IIS Manager / Skript / .NET
• Konfiguration:
<bindings>
<binding bindingInformation="mystore:443:"
protocol="https" sslFlags="0">
</bindings>
0: IP/Port, ein Zertifikat pro Kombination
1: Host Name und IP (SNI Verfahren)
2: Zentrales SSL-Zertifikat (kein SNI)
3: Zentrales SSL-Zertifikat mit SNI
© joergkrause.de
Ablauf
• Zwei Plätze:
1. Bindungsinformationen in applicationHost.config
2. Assoziierte SSL-Konfiguration in http.sys
• Beim Start der Site
– IIS sendet Bindungsdaten von Konfiguration an http.sys
– http.sys beginnt auf dem Port zu lauschen
• Beim Verbindungsaufbau:
– http.sys schaut in seine Konfiguration nach der IP:Port-
Kombination
– http.sys sucht Zertifikat anhand Hash & Store
© joergkrause.de
Kommandozeile
appcmd.exe
set config -section:system.applicationHost/sites
/siteDefaults.bindings
.[protocol='https', bindingInformation='*:443:mysite.de']
.bindingInformation:"127.0.0.1:80:"
/commit:apphost
© joergkrause.de
.NET-Code
• Ausführung in einer Konsolenapplikation
using (ServerManager serverManager = new ServerManager()) {
var config = serverManager.GetApplicationHostConfiguration();
var sitesSection = config.GetSection("system.applicationHost/sites");
var siteDefaultsElement = sitesSection.GetChildElement("siteDefaults");
var bindingsCollection = siteDefaultsElement.GetCollection("bindings");
var bindingElement = bindingsCollection.CreateElement("binding");
bindingElement["protocol"] = @"http";
bindingElement["bindingInformation"] = @"127.0.0.1:8080:";
bindingsCollection.Add(bindingElement);
serverManager.CommitChanges();
}
© joergkrause.de
Demo
• Zertifikat erstellen
• Installieren
• Testen
© joergkrause.de
Konfiguration verschlüsseln
© joergkrause.de
Demo
• Konfiguration schützen
© joergkrause.de
Beschränken von Verbindungen
• Authentifizierung
• Autorisierung:
– IP-Beschränkungen
– URL Autorisierung
– ISAPI- und CGI-Beschränkungen
– Anforderungsfilter
© joergkrause.de
Authentifizierung & Autorisierung
1. Authentifizierung
– Wer bist du?
– Diverse Verfahren
2. Autorisierung
– Was darfst du?
– Diverse Stufen
© joergkrause.de
Authentifizierung
Methode Anmeldeverfahren Benutzerdatenbank
Anonymer Zugriff Keines AD, lokales Konto
Basic Abfragedialog AD, lokales Konto
Client Zertifikat Zertifikatsauswahl AD
IIS Zertifikat mit Mapping Zertifikatsauswahl AD, lokales Konto
Digest Abfragedialog AD
Forms HTML-Formular ASP.NET Membership
Windows Abfragedialog AD, lokales Konto
© joergkrause.de
Das "anonyme" Konto
• Keine Operation ohne Identität
• Die anonymen Zugriffe laufen unter IUSR ab
• IUSR ist in der Gruppe IIS_IUSRS
• Minimale Ausführungsrechte
in der ACL:
– Read
• Für aktive Programme:
– Read & Execute
– List folder contents
© joergkrause.de
IUSR
• IUSR
– Kein Kennwort ("built in")
– Für Gastzugang einfach ACL auf IUSR setzen (Read)
– Kennwort kann nicht ablaufen
– Kopieren der ACL mit xcopy /o
• Identische SID auf allen Windows-Systemen
• IIS_USRS
– Worker Prozess fügt Token der Pool-Identität dynamisch
der Gruppe hinzu
– Das Pool-Konto muss deshalb nicht konfiguriert werden
<anonymousAuthentication enabled="true" userName="IUSR" defaultLogonDomain="" />
© joergkrause.de
Start
Authentifizierungsablauf
Anonym
?
Start
Impersonate
IUSR
Send 401
Per-
missions
OK?
200 OK
Other
Auth?
config
config
config Success
?
Authenticate
Send 403
Impersonate
User
HTTP
Request
config
Per-
missions
OK?
config
Yes
No
No
No
Yes
Yes
Yes
No
joergkrause.de
Beschränkungen
Auswahl der wichtigsten
Sicherheitsbeschränkungen
© joergkrause.de
IP-Beschränkungen
• Standard:
– IP oder IP-Bereich
– Explizit erlauben oder explizit verbieten
• Erweiterung:
– Dynamische Beschränkung
– Anzahl konkurrierender Anforderungen
http://www.iis.net/downloads/microsoft/dynamic-ip-restrictions
© joergkrause.de
URL-Autorisierung
• Zugriffsbeschränkungen durch URLs
• Ersetzt Beschränkungen durch ACLs
• Funktion "Authorization Rules"
– Ebene Verzeichnis
– Ebene Datei
© joergkrause.de
URL-Autorisierung
• In der web.config der Anwendung
• Element <location> ist das Elternelement
<location path="bobsSecret.aspx">
<system.webServer>
<security>
<authorization>
<remove users="" roles="BobAndFriends" verbs="" />
<add accessType="Allow" users="Bob" />
</authorization>
</security>
</system.webServer>
</location>
© joergkrause.de
Anforderungsfilter
• Standardbeschränkungen:
– Kritische Dokumente sind ausgefiltert (Configs, DLLs, …)
• Beschränkungsfunktionen:
– Dateierweiterung
– URL-Segmente
– Verbs (HTTP-Methoden)
– Non-ASCII (z.B. UTF-8)
– Doppelt encodete Anfragen
– Maximale Länge der Anfrage
– Maximale Länge des URL
– Maximale Länge des Query Strings
© joergkrause.de
Anforderungsfilter
• Beispiel Kommandozeile
• Im IIS-Manager (MMC)
appcmd set config /section:requestfiltering /allowhighbitcharacters:true |
© joergkrause.de
Anforderungsfilter
• Spezifische Fehler bei Verstoß gegen die Regeln
URL Sequenz verboten 404.5
Verb verboten 404.6
Dateierweiterung nicht zugelassen 404.7
Verstecktes Segment (Verzeichnis) erkannt 404.8
Anforderungs-Kopfzeile (Request Header) zu lang 404.10
URL doppelt encodet 404.11
Non-ASCII (high bit) Zeichen 404.12
Inhalt zu lang 404.13
URL zu lang 404.14
Query String zu lang 404.15
joergkrause.de
Checklisten zum Härten
Härten einer IIS-Installation
© joergkrause.de
IIS Absichern (Checkliste I)
• Verzeichniszugriff
– Beschränkungen anonym zugreifbarere Verzeichnisse
– IISAdmin, IISHelp, IISSamples entfernen
– PARENT PATH config entfernt
– Website Root nicht auf dem Systemlaufwerk
– Verzeichnis durchsuchen abgeschaltet
– Kein SDK, Visual Studio etc. installiert
© joergkrause.de
IIS Absichern (Checkliste II)
• Konfiguration
– DEBUG OFF in web.config
– TRACE FALSE in web.config
– Nicht benötigte HTTP-Module entfernt
– Nicht benötigte Handler entfernt (z.B. *.hta, *.shtml)
© joergkrause.de
IIS Absichern (Checkliste III)
• Sicherung der Kommunikation
– HTTPS aktiviert
– Zertifikate aktuell, vertraut und korrekt
– Remote Administration aus oder abgesichert
– Standardkommunikation nur Port 80 und 443
– IPSec für alle internen Verbindungen
© joergkrause.de
IIS Absichern (Checkliste IV)
• Protokollierung und Überwachung
– Misslungene Anmeldeversuche regelmäßig prüfen
– Protokolle auswerten
– Erweitertes Protokollierungsformat benutzen
© joergkrause.de
IIS Absichern (Checkliste V)
• Konten
– Verwaltete Konten für Application Pools
– IUSR abgeschaltet
– Anonymer Zugriff aus
– Remote Login aus (außer Admin, wenn Bedarf)
– Lokaler Login aus (außer Admin)
© joergkrause.de
IIS Absichern (Checkliste VI)
• ASP.NET
– State Service aus (speziell bei MVC)
• System
– WebDAV aus
– FTP und SMTP aus
– System-Shares aus (C$, D$ usw.)
– SMB aus
– TELNET aus
– IIS nicht auf Domain Controller
– DMZ konfiguriert
– Updates aktuell (Windows, .NET)?
© joergkrause.de
Hilfreiche Werkzeuge
• Microsoft Security Compliance Manager 3.0
• SQL Server Express benötigt
• Nicht nur IIS,
allgemeines
Werkzeug
© joergkrause.de
Security Compliance Manager 3.0
• Liste von Einstellungen über alle Produkte
• Empfehlung und Erklärung zu allen Einstellungen
Aktueller Status
Empfehlung
Erklärungen
© joergkrause.de
Agenda
1 2 3 4 5 6
Geschichte
+
Grundlagen
Installation
+
Konfiguration
Fehlersuche
+
Optimierung
Architektur
+
Arbeitsweise
Administration
+
Werkzeuge
Sicherheit
+
Härtung
joergkrause.de
Fehlersuche
© joergkrause.de
Werkzeuge
• Fiddler (Telerik, Freeware)
• LogParser 2.2
• Microsoft Network Monitor 3.4
• Wireshark
• SSLDiag
• MSConfig.exe
• JMeter (Apache, Open Source)
• Loadrunner (HP, Freemium)
© joergkrause.de
HTTP Diagnose
• Pakete korrekt?
• Bandbreite okay?
• Authentifizierung passt?
• Verschlüsselung aktiv?
• Angriffe gesehen?
joergkrause.de
Optimierung
© joergkrause.de
Verstehen
• Einfluss auf Performance des Servers:
– Bandbreite
– Anzahl HTTP-Requests
• Einfluss im Browser:
– JavaScript
– Rendering
© joergkrause.de
Timeline
DNS
Request
Transfer
Server
Processing
Transfer
Response
Processing
150 ms
50 ms
200 ms
100 ms
500 ms
200 ms
50 ms
150 ms
S 1.400 ms
© joergkrause.de
Timeline
DNS
Request
Transfer
Server
Processing
Transfer
Response
Processing
150 ms
50 ms
200 ms
100 ms
500 ms
200 ms
50 ms
150 ms
S 1.400 ms
© joergkrause.de
Tools
• Fiddler (Telerik)
• F12 (IE, Chrome), Firebug (Firefox)
– Profiler
– Netzwerk
– CSS
– HTML
– JavaScript Debugger
• Vieles auch online, z.B.
– Pingdom
– Browserstack
http://tools.pingdom.com/fpt/
http://www.browserstack.com
© joergkrause.de
IIS/Server-Optimierung
• Pipeline Optimierung
• Prozess Konfiguration Optimierung
• CDN
© joergkrause.de
Pipeline Optimierung
• Ziel:
– Schnellere Verarbeitung
• Vorgehensweise:
– Entfernen nicht benutzter Module in der web.config
?
© joergkrause.de
Pipeline Optimierung
© joergkrause.de
Prozesskonfiguration
• Ziel:
– Optimale Nutzung von Ressourcen
• Vorgehensweise:
– Anpassen der Prozesskonfiguration an die konkreten
Hardwarebedingungen
?
© joergkrause.de
Prozesskonfiguration
• maxWorkerThreads: 20 pro Kern (4 Kerne == 80 Threads)
– Höher möglich, wenn wenige CPU-intensive Arbeit (z.B. viel Async, Service Calls),
dann sind Werte bis 100 möglich.
• maxIOThreads: 20 pro Kern
– Für Dateioperationen, Datenbankzugriff, Web Service Calls, interne Requests etc. Bei
schneller Hardware, 10 Gbit Netz, SSD etc, sind Werte bis 100 möglich.
• minWorkerThreads, minIOThreads: Standard 1
– Steuert Beginn der Request-Warteschlange, mindestens der Wert muss frei sein,
damit NICHT gequeued wird.
• memoryLimit: Anteil (%) vom Systemspeicher, den der Worker-Prozess
belegen darf
– Wenn die Anwendung alleine ist, darf der Wert hoch sein, z.B. 80. Bei vielen Lecks
oder anderen Anwendungen, vor allem COM, Wert verringern.
© joergkrause.de
Verbindungskonfiguration
• Anzahl gleichzeitiger Verbindungen zu einer IP-
Adresse:
– Standard 2
– Höhere Werte heute mehr als sinnvoll
© joergkrause.de
• Ziel:
– Schnellere Requests
– Weniger Latenz
• Technik:
– CDN nutzen
?
CDN (Content Delivery Network)
© joergkrause.de
• Für allgemeine Dateien, wie jQuery, Knockout etc.
bietet sich Microsoft, Google etc. an
CDN (Content Delivery Network)
© joergkrause.de
• Für eigene gibt es kostenpflichtige Dienste
– Cachefly (einfach, Upload/Distribute)
– EdgeCast (komplex, DNS Caching)
CDN (Content Delivery Network)
© joergkrause.de
Fragen
www.joergkrause.de

Contenu connexe

Tendances

Crawling analysis to the fullest | J.Giesche & E.Protzel | SEOcampixx 2018
Crawling analysis to the fullest | J.Giesche & E.Protzel | SEOcampixx 2018Crawling analysis to the fullest | J.Giesche & E.Protzel | SEOcampixx 2018
Crawling analysis to the fullest | J.Giesche & E.Protzel | SEOcampixx 2018TA Trust Agents Internet GmbH
 
Web-Automatisierung mit WWW::Mechanize
Web-Automatisierung mit WWW::MechanizeWeb-Automatisierung mit WWW::Mechanize
Web-Automatisierung mit WWW::MechanizeThomas Fahle
 
Why websecurity sucks
Why websecurity sucksWhy websecurity sucks
Why websecurity sucksThaDafinser
 
PHP Kongress 2010 - Web-Performance
PHP Kongress 2010 - Web-PerformancePHP Kongress 2010 - Web-Performance
PHP Kongress 2010 - Web-PerformanceNico Steiner
 

Tendances (7)

Rest
RestRest
Rest
 
Dockerize It - Mit apex in die amazon cloud
Dockerize It - Mit apex in die amazon cloudDockerize It - Mit apex in die amazon cloud
Dockerize It - Mit apex in die amazon cloud
 
Crawling analysis to the fullest | J.Giesche & E.Protzel | SEOcampixx 2018
Crawling analysis to the fullest | J.Giesche & E.Protzel | SEOcampixx 2018Crawling analysis to the fullest | J.Giesche & E.Protzel | SEOcampixx 2018
Crawling analysis to the fullest | J.Giesche & E.Protzel | SEOcampixx 2018
 
Web-Automatisierung mit WWW::Mechanize
Web-Automatisierung mit WWW::MechanizeWeb-Automatisierung mit WWW::Mechanize
Web-Automatisierung mit WWW::Mechanize
 
Ldap sqlnet
Ldap sqlnetLdap sqlnet
Ldap sqlnet
 
Why websecurity sucks
Why websecurity sucksWhy websecurity sucks
Why websecurity sucks
 
PHP Kongress 2010 - Web-Performance
PHP Kongress 2010 - Web-PerformancePHP Kongress 2010 - Web-Performance
PHP Kongress 2010 - Web-Performance
 

En vedette

Architektur agiles vorgehen seacon 2013
Architektur agiles vorgehen seacon 2013Architektur agiles vorgehen seacon 2013
Architektur agiles vorgehen seacon 2013Ralf Sigmund
 
Java Stammtisch Würzburg - CONAIR
Java Stammtisch Würzburg - CONAIRJava Stammtisch Würzburg - CONAIR
Java Stammtisch Würzburg - CONAIRMatthias Reining
 
Wer braucht das schon - Unternehmensarchitektur im agilen Zeitalter
Wer braucht das schon - Unternehmensarchitektur im agilen ZeitalterWer braucht das schon - Unternehmensarchitektur im agilen Zeitalter
Wer braucht das schon - Unternehmensarchitektur im agilen ZeitalterRamon Anger
 
Lean development 04
Lean development 04Lean development 04
Lean development 04SuperB2
 
Unternehmensarchitekturen komplexität de
Unternehmensarchitekturen komplexität deUnternehmensarchitekturen komplexität de
Unternehmensarchitekturen komplexität deAna Nicolaescu
 
Byod course 27.5_v02
Byod course 27.5_v02Byod course 27.5_v02
Byod course 27.5_v02SuperB2
 
MDA in der Praxis - Modelltransformation und Code-Generierung mit dem Enterpr...
MDA in der Praxis - Modelltransformation und Code-Generierung mit dem Enterpr...MDA in der Praxis - Modelltransformation und Code-Generierung mit dem Enterpr...
MDA in der Praxis - Modelltransformation und Code-Generierung mit dem Enterpr...Andreas Schreiber
 
Lean Development / Standardisierte Software-Entwicklung
Lean Development / Standardisierte Software-EntwicklungLean Development / Standardisierte Software-Entwicklung
Lean Development / Standardisierte Software-EntwicklungSuperB2
 
Scrum, Lean, Kanban, XP: Was ist gut für mein Projekt?
Scrum, Lean, Kanban, XP: Was ist gut für mein Projekt?Scrum, Lean, Kanban, XP: Was ist gut für mein Projekt?
Scrum, Lean, Kanban, XP: Was ist gut für mein Projekt?Matthias Bohlen
 

En vedette (9)

Architektur agiles vorgehen seacon 2013
Architektur agiles vorgehen seacon 2013Architektur agiles vorgehen seacon 2013
Architektur agiles vorgehen seacon 2013
 
Java Stammtisch Würzburg - CONAIR
Java Stammtisch Würzburg - CONAIRJava Stammtisch Würzburg - CONAIR
Java Stammtisch Würzburg - CONAIR
 
Wer braucht das schon - Unternehmensarchitektur im agilen Zeitalter
Wer braucht das schon - Unternehmensarchitektur im agilen ZeitalterWer braucht das schon - Unternehmensarchitektur im agilen Zeitalter
Wer braucht das schon - Unternehmensarchitektur im agilen Zeitalter
 
Lean development 04
Lean development 04Lean development 04
Lean development 04
 
Unternehmensarchitekturen komplexität de
Unternehmensarchitekturen komplexität deUnternehmensarchitekturen komplexität de
Unternehmensarchitekturen komplexität de
 
Byod course 27.5_v02
Byod course 27.5_v02Byod course 27.5_v02
Byod course 27.5_v02
 
MDA in der Praxis - Modelltransformation und Code-Generierung mit dem Enterpr...
MDA in der Praxis - Modelltransformation und Code-Generierung mit dem Enterpr...MDA in der Praxis - Modelltransformation und Code-Generierung mit dem Enterpr...
MDA in der Praxis - Modelltransformation und Code-Generierung mit dem Enterpr...
 
Lean Development / Standardisierte Software-Entwicklung
Lean Development / Standardisierte Software-EntwicklungLean Development / Standardisierte Software-Entwicklung
Lean Development / Standardisierte Software-Entwicklung
 
Scrum, Lean, Kanban, XP: Was ist gut für mein Projekt?
Scrum, Lean, Kanban, XP: Was ist gut für mein Projekt?Scrum, Lean, Kanban, XP: Was ist gut für mein Projekt?
Scrum, Lean, Kanban, XP: Was ist gut für mein Projekt?
 

Similaire à Internet Information Services (deutsch)

Einführung in die Java-Webentwicklung - Part I - Einführung, HTTP (in german)
Einführung in die Java-Webentwicklung - Part I - Einführung, HTTP (in german)Einführung in die Java-Webentwicklung - Part I - Einführung, HTTP (in german)
Einführung in die Java-Webentwicklung - Part I - Einführung, HTTP (in german)kaftanenko
 
Rufen Sie nicht an – wir rufen Sie an! | Server-sent Events und Web-Sockets i...
Rufen Sie nicht an – wir rufen Sie an! | Server-sent Events und Web-Sockets i...Rufen Sie nicht an – wir rufen Sie an! | Server-sent Events und Web-Sockets i...
Rufen Sie nicht an – wir rufen Sie an! | Server-sent Events und Web-Sockets i...OPEN KNOWLEDGE GmbH
 
Domino HTTP Security - Neuerungen
Domino HTTP Security - NeuerungenDomino HTTP Security - Neuerungen
Domino HTTP Security - NeuerungenBelsoft
 
Citrix Day 2013: Citirx Networking
Citrix Day 2013: Citirx NetworkingCitrix Day 2013: Citirx Networking
Citrix Day 2013: Citirx NetworkingDigicomp Academy AG
 
Ist GraphQL das bessere REST
Ist GraphQL das bessere RESTIst GraphQL das bessere REST
Ist GraphQL das bessere RESTMartin Abraham
 
PageSpeed Extreme für das große Speed Update 2021
PageSpeed Extreme für das große Speed Update 2021PageSpeed Extreme für das große Speed Update 2021
PageSpeed Extreme für das große Speed Update 2021SEARCH ONE
 
node.js - Eine kurze Einführung
node.js - Eine kurze Einführungnode.js - Eine kurze Einführung
node.js - Eine kurze Einführungnodeio
 
Pimp My SharePoint - Performanceprobleme vorbeugen, analysieren und beheben
Pimp My SharePoint - Performanceprobleme vorbeugen, analysieren und behebenPimp My SharePoint - Performanceprobleme vorbeugen, analysieren und beheben
Pimp My SharePoint - Performanceprobleme vorbeugen, analysieren und behebenDavid Schneider
 
Avoid Network-Issues and Polling
Avoid Network-Issues and PollingAvoid Network-Issues and Polling
Avoid Network-Issues and PollingKai Donato
 
Making the internet faster HTTP/3 und QUIC
Making the internet faster HTTP/3 und QUICMaking the internet faster HTTP/3 und QUIC
Making the internet faster HTTP/3 und QUICQAware GmbH
 
Echtzeitvisualisierung von Twitter und Co.
Echtzeitvisualisierung von Twitter und Co.Echtzeitvisualisierung von Twitter und Co.
Echtzeitvisualisierung von Twitter und Co.Kai Donato
 
Echtzeitvisualisierung von Twitter & Co
Echtzeitvisualisierung von Twitter & CoEchtzeitvisualisierung von Twitter & Co
Echtzeitvisualisierung von Twitter & CoOliver Lemm
 
SEO Day 2016: Perfekte Ladezeiten und SEO-Hosting für Speed-Freaks
SEO Day 2016: Perfekte Ladezeiten und SEO-Hosting für Speed-FreaksSEO Day 2016: Perfekte Ladezeiten und SEO-Hosting für Speed-Freaks
SEO Day 2016: Perfekte Ladezeiten und SEO-Hosting für Speed-FreaksSEARCH ONE
 
Kryptografie und Zertifikate (Cryptoparty)
Kryptografie und Zertifikate (Cryptoparty)Kryptografie und Zertifikate (Cryptoparty)
Kryptografie und Zertifikate (Cryptoparty)tschikarski
 
HTML5-Performance: So rennt Ihre App und nicht Ihre Anwender (weg)
HTML5-Performance: So rennt Ihre App und nicht Ihre Anwender (weg)HTML5-Performance: So rennt Ihre App und nicht Ihre Anwender (weg)
HTML5-Performance: So rennt Ihre App und nicht Ihre Anwender (weg)André Krämer
 

Similaire à Internet Information Services (deutsch) (20)

Einführung in die Java-Webentwicklung - Part I - Einführung, HTTP (in german)
Einführung in die Java-Webentwicklung - Part I - Einführung, HTTP (in german)Einführung in die Java-Webentwicklung - Part I - Einführung, HTTP (in german)
Einführung in die Java-Webentwicklung - Part I - Einführung, HTTP (in german)
 
Rufen Sie nicht an – wir rufen Sie an! | Server-sent Events und Web-Sockets i...
Rufen Sie nicht an – wir rufen Sie an! | Server-sent Events und Web-Sockets i...Rufen Sie nicht an – wir rufen Sie an! | Server-sent Events und Web-Sockets i...
Rufen Sie nicht an – wir rufen Sie an! | Server-sent Events und Web-Sockets i...
 
Domino HTTP Security - Neuerungen
Domino HTTP Security - NeuerungenDomino HTTP Security - Neuerungen
Domino HTTP Security - Neuerungen
 
Citrix Day 2013: Citirx Networking
Citrix Day 2013: Citirx NetworkingCitrix Day 2013: Citirx Networking
Citrix Day 2013: Citirx Networking
 
Interaktives Web
Interaktives WebInteraktives Web
Interaktives Web
 
Ist GraphQL das bessere REST
Ist GraphQL das bessere RESTIst GraphQL das bessere REST
Ist GraphQL das bessere REST
 
PageSpeed Extreme für das große Speed Update 2021
PageSpeed Extreme für das große Speed Update 2021PageSpeed Extreme für das große Speed Update 2021
PageSpeed Extreme für das große Speed Update 2021
 
node.js - Eine kurze Einführung
node.js - Eine kurze Einführungnode.js - Eine kurze Einführung
node.js - Eine kurze Einführung
 
VIT 5-2014
VIT 5-2014VIT 5-2014
VIT 5-2014
 
Pimp My SharePoint - Performanceprobleme vorbeugen, analysieren und beheben
Pimp My SharePoint - Performanceprobleme vorbeugen, analysieren und behebenPimp My SharePoint - Performanceprobleme vorbeugen, analysieren und beheben
Pimp My SharePoint - Performanceprobleme vorbeugen, analysieren und beheben
 
WordPress Grundlagen Kurs
WordPress Grundlagen KursWordPress Grundlagen Kurs
WordPress Grundlagen Kurs
 
Typo3 und Varnish
Typo3 und VarnishTypo3 und Varnish
Typo3 und Varnish
 
Avoid Network-Issues and Polling
Avoid Network-Issues and PollingAvoid Network-Issues and Polling
Avoid Network-Issues and Polling
 
Making the internet faster HTTP/3 und QUIC
Making the internet faster HTTP/3 und QUICMaking the internet faster HTTP/3 und QUIC
Making the internet faster HTTP/3 und QUIC
 
Bit sosem 2016-wieners-sitzung-07_rechnerkommunikation-ii
Bit sosem 2016-wieners-sitzung-07_rechnerkommunikation-iiBit sosem 2016-wieners-sitzung-07_rechnerkommunikation-ii
Bit sosem 2016-wieners-sitzung-07_rechnerkommunikation-ii
 
Echtzeitvisualisierung von Twitter und Co.
Echtzeitvisualisierung von Twitter und Co.Echtzeitvisualisierung von Twitter und Co.
Echtzeitvisualisierung von Twitter und Co.
 
Echtzeitvisualisierung von Twitter & Co
Echtzeitvisualisierung von Twitter & CoEchtzeitvisualisierung von Twitter & Co
Echtzeitvisualisierung von Twitter & Co
 
SEO Day 2016: Perfekte Ladezeiten und SEO-Hosting für Speed-Freaks
SEO Day 2016: Perfekte Ladezeiten und SEO-Hosting für Speed-FreaksSEO Day 2016: Perfekte Ladezeiten und SEO-Hosting für Speed-Freaks
SEO Day 2016: Perfekte Ladezeiten und SEO-Hosting für Speed-Freaks
 
Kryptografie und Zertifikate (Cryptoparty)
Kryptografie und Zertifikate (Cryptoparty)Kryptografie und Zertifikate (Cryptoparty)
Kryptografie und Zertifikate (Cryptoparty)
 
HTML5-Performance: So rennt Ihre App und nicht Ihre Anwender (weg)
HTML5-Performance: So rennt Ihre App und nicht Ihre Anwender (weg)HTML5-Performance: So rennt Ihre App und nicht Ihre Anwender (weg)
HTML5-Performance: So rennt Ihre App und nicht Ihre Anwender (weg)
 

Internet Information Services (deutsch)

  • 1. joergkrause.de Internet Information Services Grundkurs für Softwareentwickler Schwerpunkt Webentwicklung (HTTP Service) Jörg Krause Berater, Trainer, Autor
  • 2. © joergkrause.de Wer bin ich? E-Mail: joerg@krause.net Profil: de.linkedin.com/pub/joerg-krause/b/16a/a15 Twitter: @joergisageek Profilname: www.xing.com/profile/Joerg_Krause6 About.me: joerg.krause Web: www.joergkrause.de www
  • 3. © joergkrause.de Agenda 1 2 3 4 5 6 Geschichte + Grundlagen Installation + Konfiguration Fehlersuche + Optimierung Architektur + Arbeitsweise Administration + Werkzeuge Sicherheit
  • 4. © joergkrause.de Anti-Agenda • Was hier nicht behandelt wird: – Programmierung von Webanwendungen – FTP – SMTP – PHP-Integration – Common Gateway Interface, CGI / FastCGI – DNS / DHCP – Windows Server allgemein
  • 5. © joergkrause.de Agenda 1 2 3 4 5 6 Geschichte + Grundlagen Installation + Konfiguration Fehlersuche Optimierung Architektur + Arbeitsweise Administration + Werkzeuge Sicherheit
  • 7. © joergkrause.de Versionen • 1.0 NT 3.5.1 • 2.0 NT 4 • 3.0 SP 1 NT 4 (ASP) • 4.0 Option Pack NT 4 • 5.0 Windows 2000 • 5.1 Windows XP • 6.0 Windows Server 2003, XP Pro 64Bit • 7.0 Windows Server 2008, Vista • 7.5 Windows Server 2008 R2, Windows 7 • 8.0 Windows Server 2012, Windows 8 • 8.5 Windows Server 2012 R2, Windows 8.1 Aktuell Redesign
  • 8. © joergkrause.de Neues… • 8.0 (Windows Server 2012 / Windows 8) – Application Initialization – Initialisierungsschritte (Warm-up) – Konfiguration für ASP.NET 4.5 angepasst – Mehr Leistungsbegrenzungsoptionen (Throttling) für Sandbox- und Testumgebungen – Dynamische Beschränkung von IP-Adressen – WebSocket-Protokoll – Server Name Indication (SNI) und Multi-Tenant SSL Deployment – Präventation gegen Angriffe auf FTP-Kennwörter (nur FTP-Server)
  • 9. © joergkrause.de Neues… • 8.5 (Windows Server 2012 R2 / Windows 8.1) – Protokollierung in das Windows-Ereignisprotokoll – Mehr Logging-Optionen, z.B. eigene Felder möglich für: • Request Header – If-Match, Proxy-Authorization, Max-Forwards • Response Header – Last-Modified, ETag • Server Variable – ALL_RAW, REMOTE_HOST, SCRIPT_NAME – Dynamische Site-Aktivierung – Suspend für Worker-Prozess (vorher nur Terminierung) bei Erreichen des Schwellwertes
  • 11. © joergkrause.de Gut zu wissen • ISO OSI • TCP/IP • HTTP • WebSockets • Server Name Indication (SNI)
  • 12. © joergkrause.de ISO OSI-Modell • International Organization for Standardization (ISO) • Open Systems Interconnection (OSI) Modell Schicht Name Protokolle Einheiten 7 Anwendung HTTP, FTP Daten 6 Darstellung 5 Sitzung 4 Transport TCP, UDP Segmente 3 Vermittlung ICMP, IP Pakete 2 Sicherung Ethernet Frames 1 Bitübertragung Bits
  • 13. © joergkrause.de OSI auf TCP/IP • Vereinfachtes Modell • Diverse Protokoll-Stacks Ebene Name Stack I Stack II Stack III 5 Anwendung HTTP, FTP DHCP, DNS PING 4 Transport TCP UDP ICMP 3 Internet IP 2 Netzwerk ARP 1 Physikalisch / Link Ethernet
  • 14. © joergkrause.de TCP/IP • IP = Internet Protocol – Adressierung – IPv4 – IPv6 • TCP = Transmission Control Protocol – Übertragung – Dienst über Port
  • 15. © joergkrause.de IP • IPv4 • Adressraum 256*256*256*256 = 232 • Einteilung in Klassen Klasse Erste Bits Präfix-Bits Netzwerke Suffix-Bits Hosts/NW A 0xxx 7 128 24 16.777.216 B 10xx 14 16.384 16 65.536 C 110x 21 2.097.152 8 256 D 1110 Multicast E 1111 Reserviert
  • 16. © joergkrause.de IP • Punktschreibweise 0.0.0.0 nur für Menschen • "0" reserviert für Netzwerke (mehrere Adressen) • 255.255.0.0 ist ein Netzwerk (als Maske) • 123.117.11.76 mit der Maske 255.255.0.0 ist – das Netzwerk 123.117.0.0 – mit dem Host 11.76 (2892)
  • 17. © joergkrause.de TCP • Ports dienen der Identifizierung von Dienstapplikationen Port Dienst 7 Echo 20/21 FTP 23 Telnet 25 SMTP 53 DNS 80 HTTP Standard 443 HTTPS Standard (SSL)
  • 18. © joergkrause.de HTTP • Hypertext Transfer Protocol Anforderung (Request) Antwort (Response) HTTP Client (Browser) HTTP Server (IIS)
  • 19. © joergkrause.de Bausteine • Uniform Resource Locator (URL) • HTTP – Die Anforderung • Verb + URL + Version • Header • Daten – Die Antwort • Version + Statuscode + Statustext • Header • Daten protocol://hostname:port/path-and-file-name
  • 20. © joergkrause.de Bausteine • HTTP – Die Anforderung GET http://www.iis.net/ HTTP/1.1 Accept: text/html, application/xhtml+xml, */* Accept-Language: de-DE,en-US;q=0.5 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) Accept-Encoding: gzip, deflate Host: www.iis.net DNT: 1 Proxy-Connection: Keep-Alive Cookie: omniID=1418555811742_52c0_810f_7d07_8c863dc10d32; Leerzeile
  • 21. © joergkrause.de HTTP/1.1 200 OK Cache-Control: private Content-Length: 13144 Content-Type: text/html; charset=utf-8 Vary: Accept-Encoding Server: Microsoft-IIS/8.0 X-Powered-By: ARR/2.5 X-Powered-By: ASP.NET Date: Tue, 30 Dec 2014 11:45:31 GMT <!DOCTYPE HTML> Bausteine • HTTP – Die Antwort Leerzeile
  • 22. © joergkrause.de HTTP • Eine Seite = viele Anforderungen <html> <head> <link href="some.css" /> <link href="more.css" /> <script src="active.js"> </head> <body> <img src="figure.png" /> </body> </html> Anforderung (Request) Antwort (Response) Anforderung (Request) Antwort (Response) Anforderung (Request) Antwort (Response) Anforderung (Request) Antwort (Response)
  • 24. © joergkrause.de • Wichtige Methoden in Web-Anwendungen HTTP Methoden (Verben) Methode Funktion Nutzung GET Ressource anfordern HTTP, REST HEAD Kopfzeile analog zu GET anfordern HTTP POST Daten zum Webserver senden HTTP, REST PUT Daten auf dem Webserver speichern HTTP, REST DELETE Ressource löschen REST TRACE Diagnosedaten anfordern allgemein OPTIONS Liste der unterstützten Methoden anfordern allgemein CONNECT Verbindung durch Proxy anfordern allgemein
  • 25. © joergkrause.de HTTP Statuscodes Codegruppe Bedeutung Erwartete Reaktion 1xx Information Empfangen, Server setzt Vorgang fort 2xx Erfolg Empfangen und verarbeitet, verstanden, bedient 3xx Umleitung Der Client wird zu einer Aktion aufgefordert 4xx Client Fehler Anfrage konnte nicht bedient/verstanden werden 5xx Server Fehler Der Server konnte wegen Fehlern nicht antworten • Statusgruppen
  • 26. © joergkrause.de Wichtige Statuscodes Code Name Einsatz 100 Continue Fortsetzen 101 Update Protokollwechsel 200 OK Anforderung erledigt 301 Moved Permanently Dauerhaft neuer Ort 302 Moved Temporarily Zeitweilig neuer Ort 304 Not Modified Ressource unverändert • Information, Bestätigung, Aufforderung
  • 27. © joergkrause.de • Client Fehler, Anforderungsfehler Wichtige Statuscodes Code Name Einsatz 400 Bad Request Falsche Anforderung 401 Authentication Required Anmeldung erforderlich 403 Forbidden Geschützt, Anmeldung fehlgeschlagen 404 Not Found Nicht gefunden 405 Method Not Allowed Methode nicht erlaubt 408 Timeout Zeit abgelaufen 414 URI too Large Adresszeile zu lang
  • 28. © joergkrause.de Wichtige Statuscodes Code Name Einsatz 500 Internal Server Error Fehler / Ausnahme in der Serverapplikation 501 Method Not Implemented Methode unbekannt, z.B. "Get" statt "GET" 502 Bad Gateway Proxy oder Gateway sendet unbekannte Anfrage 503 Service Unavailable Der bedienende Dienst ist nicht verfügbar 504 Gateway Timeout Proxy oder Gateway reagiert nicht • Serverfehler
  • 29. © joergkrause.de Demo • Website abrufen • Mit Fiddler untersuchen • Requests verstehen • HTTP verstehen
  • 30. © joergkrause.de WebSockets • HTTP ist "Fire and Forget" • HTTP muss immer vom Client getriggert werden • Websockets erlauben bidirektionale Verbindungen • Websockets Schema: – ws:// – wss:// (Verschlüsselt) • Im IIS ab 8.0 • Im Browser ab IE 10, Chrome, Firefox, Safari
  • 31. © joergkrause.de WebSockets im Protokollstapel • WebSockets im vereinfachten Internet-Modell Ebene Name Stack 5 Anwendung WebSocket 4 Transport TCP 3 Internet IP 2 Netzwerk ARP 1 Physikalisch / Link Ethernet
  • 32. © joergkrause.de WebSockets • Anfordern via HTTP • Bestätigung via StatusCode 101 GET ws://websocket.example.com/ HTTP/1.1 Origin: http://example.com Connection: Upgrade Host: websocket.example.com Upgrade: websocket HTTP/1.1 101 WebSocket Protocol Handshake Date: Wed, 16 Oct 2013 10:07:34 GMT Connection: Upgrade Upgrade: WebSocket
  • 33. © joergkrause.de SNI • SNI = Server Name Indication • Ab IIS Version 8.0 • Erweiterung des TLS (Transport Layer Security) Protokolls • Ablauf einer gesicherten Verbindung: – Browser fordert Zertifikat an – Browser vergleicht URL mit der des Zertifikats – Passt das wird normal weiterverfahren • Mit SNI sendet der Browser die Anforderungsdaten sofort mit  der Server kann das passende Zertifikat auswählen • Spart individuelle IP-Adressen für SSL-Sites • Mehrere Zertifikate auf einer IP-Adresse
  • 34. © joergkrause.de Agenda 1 2 3 4 5 6 Geschichte + Grundlagen Installation + Konfiguration Fehlersuche + Optimierung Architektur + Arbeitsweise Administration + Werkzeuge Sicherheit
  • 36. © joergkrause.de Komponenten • Protokollempfänger (Listener) – HTTP.sys • Dienste (Services) – W3SVC – WAS • Verwaltungswerkzeuge (MMC, PowerShell, …)
  • 37. © joergkrause.de HTTP.sys • Kernel Mode-Treiber • HTTP und HTTPS Kommunikation • Zertifikatsverwaltung • Queue für den Worker Prozess • Cache für ausgehende Daten (Response) http.sys Response CacheApp Pool Queue App Pool Queue App Pool Queue
  • 38. © joergkrause.de HTTP.sys – direkte Konfiguration • Früher: httpcfg.exe • Jetzt: netsh http Kernel Mode http.sys User Mode HTTP Server API httpcfg.exe netsh http IIS Listener
  • 39. © joergkrause.de HTTP.sys – Zugriffsrechte • Registrierung Grand IS Administrator ? User hat ACL-Rechte Deny NEIN NEIN JA URL Register allowed? Best Match for URL Grand JA
  • 40. © joergkrause.de HTTP.sys • Fehlerverhalten – Worker Prozess stoppt/startet neu/ist im Fehlerzustand – HTTP.sys queued eingehende Anfragen (Requests) – HTTP.sys bedient Anfragen ggf. mit Fehlercode (500) – HTTP.sys wartet, bis der Worker Prozess wieder aktiv ist Request WP aktiv? Aktion Queue WP aktiv? 500 JA NEIN NEIN JA Warten Response
  • 41. © joergkrause.de W3SVC und WAS • World Wide Web Publishing Service (W3SVC) • Windows Process Activation Services (WAS) svchost.exe W3SVC WAS Leistungs- überwachung HTTP.sys Verwaltung Prozess- Verwaltung Listener Adapter Interface Konfigurations- verwaltung http:// net.tcp://
  • 42. © joergkrause.de Demo • WAS und W3SVC – im Taskmanager – In der Dienstübersicht
  • 43. © joergkrause.de • Windows Process Activation Services • Verwaltung der Konfiguration – applicationHost.config – reicht Einstellungen an den W3SVC weiter – W3SVC konfiguriert den HTTP.sys Weiterreichen der Konfiguration WAS applicationHost.config WAS HTTP.sysW3SVC
  • 44. © joergkrause.de WAS • Weiterreichen zum Worker Prozess Weiterreichen der Anforderung Listener Adapter WAS W3WP? Ausführung Applikation Ja Nein App Pool Factory http:// net.tcp:// W3SVC HTTP.sys
  • 45. © joergkrause.de WAS • Verwaltet die Worker Prozesse – WAS alleine kontrolliert die Worker Prozesse – Kommunikation via HTTP wird vom W3SVC an WAS geleitet – Mapping der Application Pools zu Worker Prozessen – Startet neue Worker Prozesse bei Bedarf – Nutzt Listener Adapter für alle Anfragen außer HTTP – Nutzt W3SVC für HTTP, dieser nutzt HTTP.sys intern – WAS kümmert sich um die gesamte Konfiguration
  • 46. © joergkrause.de Worker Prozess • Verarbeitet die Anforderung • w3wp.exe • Selbststartend (kein Host), lang laufend, User Mode • Kernfunktionen eines Webservers – Anforderung  Verarbeitung  Antwort • Bedient immer einen Application Pool – Der Pool konfiguriert den Worker Prozess – Der Pool gruppiert Worker Prozesse gleicher Konfiguration
  • 47. © joergkrause.de Worker Prozess • Ein Application Pool konfiguriert einen Worker Prozess Application Pool w3wp.exe AppDomain AppDomain Application Pool w3wp.exe Application Pool w3wp.exe AppDomain AppDomain AppDomain Sonderfall WebGarden AppDomain
  • 48. © joergkrause.de Application Pool • Prozessisolation, AppDomain-Isolation • Ausführendes Konto
  • 51. © joergkrause.de Die Pipeline • Klassisch (bis IIS 5 exklusiv, danach optional) • Integriert (ab IIS 6)
  • 52. © joergkrause.de Die Pipeline • Verarbeitung von Anforderungen • Die Pipeline erzeugt Ereignisse – Ereignis-Empfänger rufen die zugeordneten Module auf – Module erzeugen dann die Antwort • Integriert meint: – ASP.NET und IIS haben ein gemeinsames Event-Modell – Verwaltete Module (.NET) für alle Anforderungen
  • 53. © joergkrause.de • Erst native Verarbeitung im W3SVC • Dann Weiterleitung an aspnet_isapi.dll • Dort wird die verwaltete Umgebung aufgerufen Nicht verwalteter Code Verwalteter Code > IIS 7.x ISAPI HTTP-Applikation Request- Handler Request- Handler Request- Handler aspnet_isapi.dll Worker Prozess w3wp.exe ISAPI Klassische Pipeline
  • 54. © joergkrause.de > IIS 7.x HTTP-Applikation Request- Handler Request- Handler Request- HandlerWorker Process w3wp.exe Integrierte Pipeline • Ein Übergang am Anfang • Ein Übergang am Ende
  • 55. © joergkrause.de Vorteile der integrierten Pipeline Request Response Authentifizierung Autorisierung Verarbeitung Ausgabe Cache Übergänge sind String-Operationen C++: ABCDEF0 .NET: 6ABCDEF Null-Terminiert Anzahl Zeichen Jeder Übergang ist teuer!
  • 56. © joergkrause.de Auf einen Blick HTTP Protocol Stack (http.sys) svchost.exe applicationHost.config WAS W3SVC w3wp.exe App Module Module Module User Mode Kernel Mode Internet
  • 58. © joergkrause.de Bausteine der Pipeline • Module – Wirken auf jede Anforderung – Merkmal: Aktiv, wenn konfiguriert • Handler – Bedienen bestimmte Anforderungen – Merkmal: Aktiv, wenn durch Dateierweiterung erreicht
  • 59. © joergkrause.de Module • Authentifizierung • Autorisierung • Kompression • Cache
  • 60. © joergkrause.de Handler • ASPX-Seitenverarbeitung • Statische Dateien ausliefern • Extensionless, z.B. für ASP.NET MVC
  • 61. © joergkrause.de Bausteine der Pipeline (ASP.NET) Request Response Pre Begin Request Begin Request Authenticate Authorize Resolve Cache Map Handler Aquire State Pre Execute Handler Execute Handler End Request Log Request Update Cache Release State Handler Managed Unmanaged ASPX ASHX FastCGI Static File
  • 62. © joergkrause.de Bausteine der Pipeline (MVC) Request Response Pre Begin Request Begin Request Authenticate Authorize Resolve Cache Map Handler Aquire State Pre Execute Handler Execute Handler End Request Log Request Update Cache Release State Handler Managed IHttpHandler RoutingModule
  • 63. © joergkrause.de Erweiterung der Pipeline (MVC) Request Response IIS Pipeline UrlRoutingModuleStatische Datei Datei gefunden? RouteTable.RoutesCustom Route Handler Custom IHttpHandler MvcRouteHandler ControllerFactory Action Method ActionResultKein ViewResult IViewEngine View Engine Direkte Ausgabe Eigene ViewEngine Standard ViewResult Routing Controller Controller Action Execution View Renderer
  • 64. © joergkrause.de Die Module • ca. 30 Standardmodule • Definition in – %windir%system32inetsrvconfigapplicationhost.config • Teils nativ (unmanaged), teils verwaltet (managed) – nativ  C++ / ISAPI – verwaltet  .NET
  • 65. © joergkrause.de Demo • Module und Handler im IIS Manager
  • 66. © joergkrause.de Übersicht Module HTTP Protocol Support ValidationRangeModule TraceVerbModule OptionsVerbModule ProtocolSupportModule Logging and Diagnostics HttpLoggingModule CustomLoggingModule Configuration and Metadata Caches TokenCacheModule UriCacheModule SiteCacheModule FileCacheModule Core Web Server DirectoryListingModule CustomErrorModule DynamicCompressionModule StaticCompressionModule StaticFileModule DefaultDocumentModule HttpCacheModule RequestMonitorModule TracingModule Authent./Author. BasicAuthModule DigestAuthModule WindowsAuthModule CertificateAuthModule AnonymousAuthModule AccessCheckModule UrlAuthorizationModule Extensibility ISAPIModule ISAPIFilterModule CGIModule ServerSideIncludeModule ManagedEngineModule Publishing DavModule RequestForwarderModule HttpRedirectionModule RequestFilteringModule
  • 67. © joergkrause.de Agenda 1 2 3 4 5 6 Geschichte + Grundlagen Installation + Konfiguration Fehlersuche + Optimierung Architektur + Arbeitsweise Administration + Werkzeuge Sicherheit
  • 70. © joergkrause.de Installation • Server Manager (Windows Server 2012 R2)
  • 71. © joergkrause.de Installation • Add Roles – Web Server (IIS)
  • 72. © joergkrause.de Installation • Role Services – Elemente der Installation
  • 74. © joergkrause.de Kommandozeile • Kommandozeile mit angehobenen Rechten • Neue Kommandozeile mit angehobenen Rechten Es folgt die Abfrage des Kennworts! runas /user:Administrator cmd.exe start /w runas /user:Administrator cmd.exe Angemeldeter Benutzer
  • 75. © joergkrause.de Der Paket-Manager • Automation der – Installation von Windows-Features – Installation von Updates / Hotfixes – Bereitstellung von aktualisierten Sprachpaketen start /w pkgmgr /ip:"Feature1;Feature2" /n:<answer_file> Paket-Manager Auf Beenden warten (/WAIT) Neues Kommandozeilenfenster Liste der Funktionen Ergebnisse in Datei
  • 76. © joergkrause.de Optionen des Paket-Managers • Wichtige Funktionen: – /ip: Installieren – /up: Deinstallieren – /norestart: Verhindert den automatischen Neustart, falls dieser erforderlich sein sollte
  • 77. © joergkrause.de Installation mit Paket-Manager • Beispiel für ein Installationsskript start /w pkgmgr /ip:IIS-WebServerRole;IIS-WebServer;IIS- CommonHttpFeatures;IIS-StaticContent;IIS-DefaultDocument;IIS- DirectoryBrowsing;IIS-HttpErrors;IIS-HttpRedirect;IIS- ApplicationDevelopment;IIS-ASPNET;IIS-NetFxExtensibility;IIS-ASP;IIS-CGI;IIS- ISAPIExtensions;IIS-ISAPIFilter;IIS-ServerSideIncludes;IIS- HealthAndDiagnostics;IIS-HttpLogging;IIS-LoggingLibraries;IIS- RequestMonitor;IIS-HttpTracing;IIS-CustomLogging;IIS-ODBCLogging;IIS- Security;IIS-BasicAuthentication;IIS-WindowsAuthentication;IIS- DigestAuthentication;IIS-ClientCertificateMappingAuthentication;IIS- IISCertificateMappingAuthentication;IIS-URLAuthorization;IIS- RequestFiltering;IIS-IPSecurity;IIS-Performance;IIS- HttpCompressionStatic;IIS-HttpCompressionDynamic;IIS- WebServerManagementTools;IIS-ManagementConsole;IIS- ManagementScriptingTools;IIS-ManagementService;IIS- IIS6ManagementCompatibility;IIS-Metabase;IIS-WMICompatibility;IIS- LegacyScripts;IIS-LegacySnapIn;IIS-FTPPublishingService;IIS-FTPServer;IIS- FTPManagement;WAS-WindowsActivationService;WAS-ProcessModel;WAS- NetFxEnvironment;WAS-ConfigurationAPI
  • 79. © joergkrause.de Installation mit der PowerShell • PowerShell CommandLets: – Install-WindowsFeature (Alias: Add-WindowsFeature) – Get-WindowsFeature – Remove-WindowsFeature • Alternativ auch Paket-Manager via PowerShell
  • 80. © joergkrause.de Installation mit der PowerShell • Alternativ auch Paket-Manager via PowerShell: $packages = "IIS-WebServerRole;" + "IIS-WebServer;" + "IIS-CommonHttpFeatures;" + "IIS-StaticContent;" + "IIS-DefaultDocument;" + # ... weitere Pakete "IIS-ManagementConsole;" + "IIS-ManagementService;" + "IIS-LegacySnapIn;" + "IIS-FTPManagement;" + "WAS-NetFxEnvironment;" + "WAS-ConfigurationAPI" Start-Process "pkgmgr" "/ip:$packages"
  • 81. © joergkrause.de Vorbereitung der PowerShell • CommandLets nicht verfügbar? import-module ServerManager
  • 82. © joergkrause.de Installation mit der PowerShell • Interaktiv via ISE (Integrated Scripting Environment) Skript-Editor Shell (Kommandozeile)
  • 83. © joergkrause.de Informationen abrufen Get-WindowsFeature -Name web-server | Format-List -Property *
  • 84. © joergkrause.de Rollen installieren Install-WindowsFeature -Name Web-Server Neustart erforderlich? Befehl erfolgreich
  • 85. © joergkrause.de Features • Verwaltungswerkzeuge: Install-WindowsFeature -Name Web-Mgmt-Tools • Wenn man alle Features haben will: Add-WindowsFeature -Name Web-Common-Http, Web-Asp-Net,Web-Net-Ext,Web-ISAPI-Ext, Web-ISAPI-Filter,Web-Http-Logging, Web-Request-Monitor,Web-Basic-Auth, Web-Windows-Auth,Web-Filtering, Web-Performance,Web-Mgmt-Console, Web-Mgmt-Compat,RSAT-Web-Server, WAS -IncludeAllSubFeature
  • 86. © joergkrause.de Weitere Installationselemente • Fernwartung (remote Zugriff auf IIS-Manager) • Standardpfade der Sites (statt c:inetpubwwwroot) • Rechte (ACLs) auf die Standardpfade • Standard-Application Pools
  • 87. © joergkrause.de Beispielskript #$Policy = "Unrestricted" $Policy = "RemoteSigned" If ((get-ExecutionPolicy) -ne $Policy) { Write-Host "Script Execution is disabled. Enabling it now" Set-ExecutionPolicy $Policy -Force Write-Host "Please Re-Run this script in a new powershell enviroment" Exit } $InetPubRoot = "D:Inetpub" $InetPubLog = "D:InetpubLog" $InetPubWWWRoot = "D:InetpubWWWRoot" Add-WindowsFeature -Name Web-Common-Http,Web-Asp-Net,Web-Net-Ext,Web-ISAPI-Ext,Web-ISAPI-Filter,Web-Http-Logging,Web-Request-Monitor,Web-Basic-Auth,Web-Windows- Auth,Web-Filtering,Web-Performance,Web-Mgmt-Console,Web-Mgmt-Compat,RSAT-Web-Server,WAS -IncludeAllSubFeature Import-Module WebAdministration New-Item -Path $InetPubRoot -type directory -Force -ErrorAction SilentlyContinue New-Item -Path $InetPubLog -type directory -Force -ErrorAction SilentlyContinue New-Item -Path $InetPubWWWRoot -type directory -Force -ErrorAction SilentlyContinue $InetPubOldLocation = @(get-website)[0].physicalPath.ToString() $InetPubOldLocation = $InetPubOldLocation.Replace("%SystemDrive%",$env:SystemDrive) Copy-Item -Path $InetPubOldLocation -Destination $InetPubRoot -Force -Recurse $Command = "icacls $InetPubWWWRoot /grant BUILTINIIS_IUSRS:(OI)(CI)(RX) BUILTINUsers:(OI)(CI)(RX)" cmd.exe /c $Command $Command = "icacls $InetPubLog /grant ""NT SERVICETrustedInstaller"":(OI)(CI)(F)" cmd.exe /c $Command #Changing Log Location $Command = "%windir%system32inetsrvappcmd set config -section:system.applicationHost/sites -siteDefaults.logfile.directory:$InetPubLog" cmd.exe /c $Command $Command = "%windir%system32inetsrvappcmd set config -section:system.applicationHost/log -centralBinaryLogFile.directory:$InetPubLog" cmd.exe /c $Command $Command = "%windir%system32inetsrvappcmd set config -section:system.applicationHost/log -centralW3CLogFile.directory:$InetPubLog" cmd.exe /c $Command #Changing the Default Website location Set-ItemProperty 'IIS:SitesDefault Web Site' -name physicalPath -value $InetPubWWWRoot If (!(Test-Path "C:inetpubtempapppools")) { New-Item -Path "C:inetpubtempapppools" -type directory -Force -ErrorAction SilentlyContinue } Remove-Item $InetPubOldLocation -Recurse -Force $Command = "IISRESET" Invoke-Expression -Command $Command
  • 88. © joergkrause.de Demo • Rollen mit PowerShell installieren
  • 90. © joergkrause.de Was ist bei der Installation wichtig? • Sorgfältige Auswahl der Module • Weniger Module heißt – weniger Angriffsfläche – bessere Performance – höhere Stabilität – geringere Updatebedarf
  • 91. © joergkrause.de Installation • Module, die explizit installiert werden (können): – HTTP: • Default Document • Directory Browsing • HTTP Errors • Static Content • HTTP Redirection • WebDAV Publishing – Health & Diagnostics: • Logging, Custom Logging, Logging Tools • Request Monitor • Tracing
  • 92. © joergkrause.de Installation • Module, die explizit installiert werden (Fortsg.): – Performance: • Static Content Compression • Dynamic Content Compression – Security: • Request Filtering • IP Filtering • Auth Modules: Basic, Digest, Windows • SSL Certificates, Client Mapping • URL Authorization – Development • .NET / ASP.NET / CGI / ISAPI / SSI / WebSockets
  • 93. © joergkrause.de Installation • Module, die explizit installiert werden (Fortsg.): – FTP – Web Core – Management Tools
  • 94. © joergkrause.de Demo • IIS-Module nachinstallieren • Installationsskript exportieren • Installation überprüfen
  • 96. © joergkrause.de WAS Konfiguration • Global • Protokoll • Application Pools • Sites
  • 97. © joergkrause.de Konfiguration web.config Virtual Directory web.config Sub Directory web.config Application web.config Sub Directory web.config Site Abschnitte können geblockt werden Vererbung setzt sich auf Verzeichnisebene fort Virtuelle Vererbung der Einstellungen machine.config .NET Global applicationHost.config IIS Global Global web.config ASP.NET Global
  • 98. © joergkrause.de Speicherort der Dateien • machine.config • web.config • applicationHost.config
  • 99. © joergkrause.de Konfigurationsschema • XML basiert • Delegierbar • Vererbung steuerbar • Zugriff über – Editor – IIS Manager (MMC) – Skripte – Programmierung (.NET) – Kommandozeilenwerkzeug – PowerShell
  • 100. © joergkrause.de Konfigurationsschema • Standardmäßig sind… – …alle IIS Abschnitte gesperrt, außer: • Default Document • Directory Browsing • HTTP Header • HTTP Redirects – …alle .NET-Framework- / ASP.NET-Abschnitte offen
  • 101. © joergkrause.de Konfigurationsschema • Delegierung heißt: – Konfiguration sperren, “overrideMode” – ACLs auf alle Dateien anwenden <section name="defaultDocument" overrideModeDefault="Allow" /> Allow Deny <location overrideMode="Allow"> <system.webServer> <security> <authentication> </authentication> </security> </system.webServer> </location> Allow Deny
  • 102. © joergkrause.de Konfigurationsschema • Elemente sperren • Beispiel: lockElements="providers,element1,element2" lockAllElementsExcepts="" <location overrideMode="Allow"> <system.webServer> <security> <authentication> <windowsAuthentication enabled="true" lockElements="providers"> <providers> <add value="Negotiate" /> <add value="NTLM" /> </providers> </windowsAuthentication> </authentication> </security> </system.webServer> </location> Name des Elements
  • 103. © joergkrause.de Konfigurationsschema • Attribute sperren lockAttributes="attribute1,attribute2,attribute3" lockAllAttributesExcept="" <location overrideMode="Allow"> <system.webServer> <security> <authentication> <windowsAuthentication enabled="true" lockAttributes="enabled"> <providers> <add value="Negotiate" /> <add value="NTLM" /> </providers> </windowsAuthentication> </authentication> </security> </system.webServer> </location> Name des Attributes Beispiel:
  • 104. © joergkrause.de Konfigurationsschema • Oft sind Listen erforderlich (Collections) • Beispiel: Provider • Listen haben Steuerelemente: – <add> – <remove> – <clear>
  • 105. © joergkrause.de Konfigurationsschema • Sperren der Elemente zum Entfernen • Sperren von einzelnen Elementen einer Collection: <windowsAuthentication enabled="true" > <providers lockElements="remove,clear"> <add value="Negotiate" /> <add value="NTLM" /> </providers> </windowsAuthentication> <windowsAuthentication enabled="true" > <providers> <add value="Negotiate" /> <add value="NTLM" lockItem="true" /> </providers> </windowsAuthentication>
  • 106. © joergkrause.de Konfigurationsschema • Schema-Datei (XML Schema, XSD): • Konfiguration ist Case Sensitive – Gilt auch für Anweisungen in Skriptumgebungen – applicationPool ≠ ApplicationPool %windir%system32inetsrvconfigschemaIIS_schema.xml
  • 107. © joergkrause.de Demo • Konfiguration anschauen: – machine.config – web.config – applicationHost.config
  • 108. © joergkrause.de Gemeinsame Konfiguration • Load Balancer • Serverfarmen / Fail Over Cluster • Migrationsszenarien applicationHost.config
  • 109. © joergkrause.de Gemeinsame Konfiguration • Wie kommt die applicationHost.config auf den gemeinsamen Server? – Exportfunktion
  • 110. © joergkrause.de Gemeinsame Konfiguration 1. MMC Funktion 2. Pfadeinstellungen
  • 111. © joergkrause.de Gemeinsame Konfiguration • Auswirkung auf die Konfigurationsdatei: • Mit Domänen-User: <configSections> <section name="configurationRedirection" /> </configSections> <configurationRedirection enabled="true" path="machinenamecentralconfig$" userName="LocalUser" password="p@ssw0rd" /> <configurationRedirection enabled="true" path="machinenamecentralconfig$" userName="domainuser" password="p@ssw0rd" />
  • 112. © joergkrause.de Demo • Konfiguration verteilen: – User einrichten (Nicht-Domäne) – Konfiguration exportieren – Konfiguration kopieren – Konfiguration auf UNC-Pfad
  • 114. © joergkrause.de Agenda 1 2 3 4 5 6 Geschichte + Grundlagen Installation + Konfiguration Fehlersuche + Optimierung Architektur + Arbeitsweise Administration + Werkzeuge Sicherheit + Härtung
  • 115. © joergkrause.de Allgemeine Hinweise • Nur installieren, was benötigt wird – Angriffsfläche reduzieren – Speicherbedarf verringern – Kontrolle erhöhen • Installation identisch auf allen Servern – Vermeide "503 Service Unavailable"
  • 118. © joergkrause.de Sites und ihre Bausteine • Site – Applikation – Bindung – Virtuelle Verzeichnisse • Container für – Applikationen und virtuelle Verzeichnisse • Zugriff – erfolgt über eine oder mehrere Bindungen Site Applikation Virtuelles Verzeichnis Virtuelles Verzeichnis Bindung Internet
  • 119. © joergkrause.de Site: Definition <sites> <site name="Default Web Site" id="1"> <application path="/"> <virtualDirectory path="/" physicalPath="%SystemDrive%inetpubwwwroot" /> </application> <bindings> <binding protocol="http" bindingInformation="*:80:" /> </bindings> </site> <siteDefaults> <logFile logFormat="W3C" directory="%SystemDrive%inetpublogsLogFiles" /> <traceFailedRequestsLogging directory="%SystemDrive%inetpublogsFailedLogs" /> </siteDefaults> <applicationDefaults applicationPool="DefaultAppPool" /> <virtualDirectoryDefaults allowSubDirConfig="true" /> </sites>
  • 120. © joergkrause.de Bindung • Definiert den physikalischen Endpunkt • Besteht aus: – Adresse (Wo?) – Protokoll (Wie?)
  • 121. © joergkrause.de Bindung: Adresse • Je nach Protokoll • Bei HTTP / HTTPS: – IP (oder * zur Bindung an alle physischen Adressen) – Port – Host Header (optional) Ein oder mehrere Bindungen pro Site Protokoll IP Port
  • 122. © joergkrause.de Besonderheit Host Header • Typischer HTTP-Request: • Header "Host" liefert die Host-Information • DNS bindet mehrere Namen an eine IP • "Host Header" löst dies in den IIS wieder auf GET http://www.iis.net/ HTTP/1.1 Accept: text/html, application/xhtml+xml, */* Accept-Language: de-DE,en-US;q=0.5 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) Accept-Encoding: gzip, deflate Host: www.iis.net DNT: 1 Proxy-Connection: Keep-Alive Cookie: s_cc=true; s_sq=%5B%5BB%5D%5D;
  • 123. © joergkrause.de Besonderheit Host Header • Durchleitung der Anfrage-Informationen • Spart öffentliche IP-Adressen • DNS ist nicht Teil der IIS www.iis.net Auflösung auf 212.17.42.100 www.asp.net www.wcf.net www.iis.net www.asp.net www.wcf.net Browser DNS Applikationen IIS Bindung an 212.17.42.100
  • 124. © joergkrause.de Applikationen • Gruppe von Dateien, die Inhalte liefern • Pfad zur Applikation ist Teil des URL der Site • Jede Site muss eine Root-Applikation haben • Jede Site kann mehrere Applikationen enthalten • Die Isolation der Applikationen erfolgt über den Application Pool
  • 125. © joergkrause.de Virtuelles Verzeichnis • Pfad im IIS der einen externen Teil des URL auf einen physikalischen Pfad auf der Festplatte abbildet
  • 127. © joergkrause.de Übersicht • IIS Manager (MMC GUI) • Kommandozeile – CMD: appcmd.exe – PS1: IIS CommandLet • Code – WMI Scripting (VBScript auf "rootWebAdministration") – .NET (VB/C# auf Microsoft.Web.Administration)
  • 128. © joergkrause.de Eigenschaften • IIS und ASP.NET gemeinsam verwalten • Eine Datenbasis für alle Werkzeuge • Administration ist delegierbar Kontrollfluss der Werkzeuge IIS Manager .NET Wrapper Microsoft.Web.Administration appcmd WMI COM API *.config*.config
  • 129. © joergkrause.de IIS Manager • Grafische Oberfläche via Management Console • Fernzugriff auf Server (über HTTP) • Erweiterbar via .NET/WinForms
  • 130. © joergkrause.de Globale Konfiguration • Generischer Editor • Funktionsdelegation • Zugriffsrechte auf MMC (nur Site-Ebene) • Benutzer (Nur wenn andere als Windows-Auth) • Entfernte Verwaltungsdienste (Remote Zugriff) • Gemeinsame Konfiguration • Web Plattform Installer
  • 131. © joergkrause.de Remote Zugriff • Freigabe • Authentifizierung • Verbindung • Verschlüsselung • Protokollierung • IP-Beschränkungen
  • 133. © joergkrause.de Kommandozeile • Für Batch-Dateien • appcmd.exe • Syntax: – appcmd (cmd) (object) <identifier> < /param:value … >* – cmd = Kommando, z.B. • add, list, delete, set – object = Ziel des Kommandos, muss Kommando kennen • Site, App, VDir, Apppool, Config, Backup, WP, Request, Module, Trace – identifier = Name oder ID – param:value = Parameter, optional, wiederholbar, u.a. • /text, /config, /xml, /commit – /? = Hilfe, (object) /? = Hilfe zu Ziel
  • 134. © joergkrause.de C:> appcmd list sites SITE "Default Web Site" (id:1,bindings:HTTP/*:80:,state:Started) SITE "Site1" (id:2,bindings:http/*:81:,state:Started) SITE "Site2" (id:3,bindings:http/*:82:,state:Stopped) C:> appcmd list requests REQUEST "fb0000008000000e" (url:GET /wait.aspx?time=10000,time:4276 msec,client:localhost) C:> appcmd list requests /apppool.name:DefaultAppPool C:> appcmd list requests /wp.name:3567 C:> appcmd list requests /site.id:1 Filter nach Application Pool, Worker Process oder Site Anzeigen und Filtern
  • 135. © joergkrause.de C:> appcmd list config /section:? | findstr system.webServer system.webServer/globalModules system.webServer/serverSideInclude system.webServer/httpTracing ... C:> appcmd list config /section:directoryBrowse <system.webServer> <directoryBrowse enabled="true" /> </system.webServer> C:> appcmd list config /section:directoryBrowse /config:* <system.webServer> <directoryBrowse enabled="true" showFlags="Extension, Size, Time, Date" /> </system.webServer> C:> appcmd list config /section:directoryBrowse /text:* CONFIG CONFIG.SECTION: system.webServer/directoryBrowse path: MACHINE/WEBROOT/APPHOST overrideMode: Inherit [system.webServer/directoryBrowse] enabled:"true" showFlags:"Extension, Size, Time, Date" IIS Abschnitt – ebenso “system.web” und “system.applicationHost” Zeigt nicht explizit gesetzte Attribute an Konfiguration
  • 136. © joergkrause.de set appcmd=%systemroot%system32inetsrvAPPCMD.EXE %appcmd% add site /name:MyNewSite /bindings:"http/*:81:" /physicalPath:"D:New folder" %appcmd% add apppool /name:MyNewSiteAppPool /managedRuntimeVersion:"v4.0" /managedPipelineMode:"Integrated" %appcmd% set app "MyNewSite/" /applicationPool:"MyNewSiteAppPool" %appcmd% list site /name:MyNewSite pause Sites und Application Pool
  • 137. © joergkrause.de Demo • Batch erstellen: – Application Pool – Site – Einstellungen Protokoll etc.
  • 138. © joergkrause.de PowerShell • Muss als Admin laufen • Bis IIS7 separate Installation • Ab IIS 8 Teil des Windows Betriebssystems • Snap-In: – Web-ScriptingTools http://technet.microsoft.com/en-us/library/hh867899.aspx
  • 139. © joergkrause.de Demo • Skript erstellen: – Application Pool – Site – Einstellungen Protokoll etc.
  • 140. © joergkrause.de Programmierung • Verwaltete API für IIS – Microsoft.Web.Administration – Typisiert für IIS-Objekte (Pool, Site) – Schwach typisiert für ASP.NET • Verwaltete API für Konfiguration – System.Configuration – Typisiert für .NET und ASP.NET – Eigene Typisierung
  • 141. © joergkrause.de Programmierung ServerManager iisManager = new ServerManager(); foreach(WorkerProcess w3wp in iisManager.WorkerProcesses) { Console.WriteLine("W3WP ({0})", w3wp.ProcessId); foreach(Request request in w3wp.GetRequests(0)) { Console.WriteLine("{0} - {1},{2},{3}", request.Url, request.ClientIPAddr, request.TimeElapsed, request.TimeInState); } }
  • 142. © joergkrause.de Demo • Kommandozeile erstellen: – Application Pool – Site – Einstellungen Protokoll etc.
  • 143. © joergkrause.de Agenda 1 2 3 4 5 6 Geschichte + Grundlagen Installation + Konfiguration Fehlersuche + Optimierung Architektur + Arbeitsweise Administration + Werkzeuge Sicherheit + Härtung
  • 144. joergkrause.de Sicherheit Absichern einer IIS-Installation Verschlüsseln von Verbindungen Beschränken von Verbindungen Verschlüsselung der Konfiguration
  • 146. © joergkrause.de TLS (SSL) Einrichten • TLS = Transport Layer Security – (früher SSL = Secure Socket Layer) – Seit SSL 3.0 nur noch TLS genannt – TLS 1.0 = SSL 3.1 – Einsatz überwiegend mit HTTPS • Zertifikat erstellen / beschaffen • Verwendung konfigurieren • Bindungen einstellen
  • 147. © joergkrause.de Grundlagen Verschlüsselung • Der Weg vom Sender zum Empfänger • Problem: Wie kommt der Schlüssel zum Empfänger? Schlüssel Daten Daten verschlüsselt Schlüssel Daten
  • 148. © joergkrause.de Grundlagen Verschlüsselung • Lösung: Asymmetrische Kryptografie Öffentlicher Schlüssel Daten Daten verschlüsselt Privater Schlüssel Daten Empfänger A gibt ein Schlüsselpaar heraus, mit dem der Sender B mittels des öffentlichen Teils die Nachricht verschlüsselt und nur der Empfänger A kann diese wieder entschlüsseln
  • 149. © joergkrause.de Grundlagen Verschlüsselung • Asymmetrische Verfahren sind aufwändig – (RSA ca. Faktor 1000 langsamer als AES) • Sie werden nur benutzt, um einen symmetrischen Schlüssel sicher auszutauschen • Asymmetrisches Verfahren: – RSA (Rivest Shamir Adleman) • Symmetrische Verfahren sind billiger • Symmetrische Verfahren bei TLS: – DES – Triple DES – AES (auch Rijndael genannt)
  • 150. © joergkrause.de Grundlagen Verschlüsselung • Zertifikat – digitaler Datensatz mit Eigenschaften – Standard für Zertifikate mit öffentlichem Schlüssel: – X.509 – Aktuell X.509v3 (Version 3) • Bindung an ein "Distinguished Name" oder "Alternative Name" – E-Mail, DNS-Eintrag (URL), IP
  • 151. © joergkrause.de Grundlagen der Verschlüsselung • Dateierweiterungen – .CER – DER- oder Base64-kodiertes Zertifikat – .CRT – DER- oder Base64-kodiertes Zertifikat – .CSR – Base64-kodierte Zertifizierungsanfrage – .DER – DER-kodiertes Zertifikat – .P12 / .PFX – PKCS#12, kann öffentliche Zertifikate und private Schlüssel (Kennwort-geschützt) enthalten. – .P7C – PKCS#7-signierte Datenstruktur ohne Dateninhalt, nur mit Zertifikaten oder Zertifikatsperrlisten – .PEM – Base64-kodiertes Zertifikat -----BEGIN CERTIFICATE----- -----END CERTIFICATE----- Anfang und Ende, wenn der Inhalt Base64-kodiert ist
  • 152. © joergkrause.de Grundlagen Verschlüsselung Certificate: Data: Version: 3 (0x2) Serial Number: 1 (0x1) Signature Algorithm: md5WithRSAEncryption Issuer: C=FJ, ST=Fiji, L=Suva, O=SOPAC, OU=ICT, CN=SOPAC Root CA/Email=administrator@sopac.org Validity Not Before: Nov 20 05:47:44 2001 GMT Not After : Nov 20 05:47:44 2002 GMT Subject: C=FJ, ST=Fiji, L=Suva, O=SOPAC, OU=ICT, CN=www.sopac.org/Email=administrator@sopac.org Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:ba:54:2c:ab:88:74:aa:6b:35:a5:a9:c1:d0:5a: 9b:fb:6b:b5:71:bc:ef:d3:ab:15:cc:5b:75:73:36: b8:01:d1:59:3f:c1:88:c0:33:91:04:f1:bf:1a:b4: 7a:c8:39:c2:89:1f:87:0f:91:19:81:09:46:0c:86: 08:d8:75:c4:6f:5a:98:4a:f9:f8:f7:38:24:fc:bd: 94:24:37:ab:f1:1c:d8:91:ee:fb:1b:9f:88:ba:25: da:f6:21:7f:04:32:35:17:3d:36:1c:fb:b7:32:9e: 42:af:77:b6:25:1c:59:69:af:be:00:a1:f8:b0:1a: 6c:14:e2:ae:62:e7:6b:30:e9 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: FE:04:46:ED:A0:15:BE:C1:4B:59:03:F8:2D:0D:ED:2A:E0:ED:F9:2F X509v3 Authority Key Identifier: keyid:E6:12:7C:3D:A1:02:E5:BA:1F:DA:9E:37:BE:E3:45:3E:9B:AE:E5:A6 DirName:/C=FJ/ST=Fiji/L=Suva/O=SOPAC/OU=ICT/CN=SOPAC Root CA/Email=administrator@sopac.org serial:00 -----BEGIN CERTIFICATE----- MIIDoTCCAwqgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBiTELMAkGA1UEBhMCRkox DTALBgNVBAgTBEZpamkxDTALBgNVBAcTBFN1dmExDjAMBgNVBAoTBVNPUEFDMQww CgYDVQQLEwNJQ1QxFjAUBgNVBAMTDVNPUEFDIFJvb3QgQ0ExJjAkBgkqhkiG9w0B CQEWF2FkbWluaXN0cmF0b3JAc29wYWMub3JnMB4XDTAxMTEyMDA1NDc0NFoXDTAy MTEyMDA1NDc0NFowgYkxCzAJBgNVBAYTAkZKMQ0wCwYDVQQIEwRGaWppMQ0wCwYD VQQHEwRTdXZhMQ4wDAYDVQQKEwVTT1BBQzEMMAoGA1UECxMDSUNUMRYwFAYDVQQD Ew13d3cuc29wYWMub3JnMSYwJAYJKoZIhvcNAQkBFhdhZG1pbmlzdHJhdG9yQHNv cGFjLm9yZzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAulQsq4h0qms1panB 0Fqb+2u1cbzv06sVzFt1cza4AdFZP8GIwDORBPG/GrR6yDnCiR+HD5EZgQlGDIYI 2HXEb1qYSvn49zgk/L2UJDer8RzYke77G5+IuiXa9iF/BDI1Fz02HPu3Mp5Cr3e2 JRxZaa++AKH4sBpsFOKuYudrMOkCAwEAAaOCARUwggERMAkGA1UdEwQCMAAwLAYJ YIZIAYb4QgENBB8WHU9wZW5TU0wgR2VuZXJhdGVkIENlcnRpZmljYXRlMB0GA1Ud DgQWBBT+BEbtoBW+wUtZA/gtDe0q4O35LzCBtgYDVR0jBIGuMIGrgBTmEnw9oQLl uh/anje+40U+m67lpqGBj6SBjDCBiTELMAkGA1UEBhMCRkoxDTALBgNVBAgTBEZp amkxDTALBgNVBAcTBFN1dmExDjAMBgNVBAoTBVNPUEFDMQwwCgYDVQQLEwNJQ1Qx FjAUBgNVBAMTDVNPUEFDIFJvb3QgQ0ExJjAkBgkqhkiG9w0BCQEWF2FkbWluaXN0 cmF0b3JAc29wYWMub3JnggEAMA0GCSqGSIb3DQEBBAUAA4GBADSN+2ULhVviRAnw VTE7KSv0/apf27gRGsarM2dZwQTeNN8IVy7GYNz31OLxc5dXI1ACY/x4ljSzysQb xUzIFmm7nEp+ABlIYuJRqzr6/YjN4J3vZ1Da/ksTxQyM/K1ute5A4/00EJ+tNL3b Bu0JPfKmgSJjFtyuMwxw/Qpsr7xa -----END CERTIFICATE-----
  • 153. © joergkrause.de Grundlagen Verschlüsselung • Begriffe (Auswahl): – PKI = Public Key Infrastructure • System zum Herausgeben digitaler Zertifikate – CA = Certificate Authority • Hierarchisches System von Zertifizierungsstellen – CRL = Certificate Revocation List • Zertifikatssperrliste, Liste ungültiger Zertifikate – RA = Registration Authority • Organisation, wo Zertifikate beantragt werden können – VA = Validation Authority • Dienst, wo Zertifikate geprüft werden können – DS = Directory Service • Durchsuchbares Verzeichnis mit ausgestellten Zertifikaten
  • 154. © joergkrause.de -----BEGIN CERTIFICATE----- MIIDoTCCAwqgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBiTELMAkGA1UEBhMCRkox DTALBgNVBAgTBEZpamkxDTALBgNVBAcTBFN1dmExDjAMBgNVBAoTBVNPUEFDMQww CgYDVQQLEwNJQ1QxFjAUBgNVBAMTDVNPUEFDIFJvb3QgQ0ExJjAkBgkqhkiG9w0B CQEWF2FkbWluaXN0cmF0b3JAc29wYWMub3JnMB4XDTAxMTEyMDA1NDc0NFoXDTAy MTEyMDA1NDc0NFowgYkxCzAJBgNVBAYTAkZKMQ0wCwYDVQQIEwRGaWppMQ0wCwYD VQQHEwRTdXZhMQ4wDAYDVQQKEwVTT1BBQzEMMAoGA1UECxMDSUNUMRYwFAYDVQQD Ew13d3cuc29wYWMub3JnMSYwJAYJKoZIhvcNAQkBFhdhZG1pbmlzdHJhdG9yQHNv cGFjLm9yZzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAulQsq4h0qms1panB 0Fqb+2u1cbzv06sVzFt1cza4AdFZP8GIwDORBPG/GrR6yDnCiR+HD5EZgQlGDIYI 2HXEb1qYSvn49zgk/L2UJDer8RzYke77G5+IuiXa9iF/BDI1Fz02HPu3Mp5Cr3e2 JRxZaa++AKH4sBpsFOKuYudrMOkCAwEAAaOCARUwggERMAkGA1UdEwQCMAAwLAYJ YIZIAYb4QgENBB8WHU9wZW5TU0wgR2VuZXJhdGVkIENlcnRpZmljYXRlMB0GA1Ud DgQWBBT+BEbtoBW+wUtZA/gtDe0q4O35LzCBtgYDVR0jBIGuMIGrgBTmEnw9oQLl uh/anje+40U+m67lpqGBj6SBjDCBiTELMAkGA1UEBhMCRkoxDTALBgNVBAgTBEZp amkxDTALBgNVBAcTBFN1dmExDjAMBgNVBAoTBVNPUEFDMQwwCgYDVQQLEwNJQ1Qx FjAUBgNVBAMTDVNPUEFDIFJvb3QgQ0ExJjAkBgkqhkiG9w0BCQEWF2FkbWluaXN0 cmF0b3JAc29wYWMub3JnggEAMA0GCSqGSIb3DQEBBAUAA4GBADSN+2ULhVviRAnw VTE7KSv0/apf27gRGsarM2dZwQTeNN8IVy7GYNz31OLxc5dXI1ACY/x4ljSzysQb xUzIFmm7nEp+ABlIYuJRqzr6/YjN4J3vZ1Da/ksTxQyM/K1ute5A4/00EJ+tNL3b Bu0JPfKmgSJjFtyuMwxw/Qpsr7xa -----END CERTIFICATE----- Arbeitsweise der PKI (Nutzersicht) CA VA RA 4. Ausstellung 3. Information 6. Prüfung 5. Authentifizierung Nutzer Shop -----BEGIN CERTIFICATE----- MIIDoTCCAwqgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBiTELMAkGA1UEBhMCRkox DTALBgNVBAgTBEZpamkxDTALBgNVBAcTBFN1dmExDjAMBgNVBAoTBVNPUEFDMQww CgYDVQQLEwNJQ1QxFjAUBgNVBAMTDVNPUEFDIFJvb3QgQ0ExJjAkBgkqhkiG9w0B CQEWF2FkbWluaXN0cmF0b3JAc29wYWMub3JnMB4XDTAxMTEyMDA1NDc0NFoXDTAy MTEyMDA1NDc0NFowgYkxCzAJBgNVBAYTAkZKMQ0wCwYDVQQIEwRGaWppMQ0wCwYD VQQHEwRTdXZhMQ4wDAYDVQQKEwVTT1BBQzEMMAoGA1UECxMDSUNUMRYwFAYDVQQD Ew13d3cuc29wYWMub3JnMSYwJAYJKoZIhvcNAQkBFhdhZG1pbmlzdHJhdG9yQHNv cGFjLm9yZzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAulQsq4h0qms1panB 0Fqb+2u1cbzv06sVzFt1cza4AdFZP8GIwDORBPG/GrR6yDnCiR+HD5EZgQlGDIYI 2HXEb1qYSvn49zgk/L2UJDer8RzYke77G5+IuiXa9iF/BDI1Fz02HPu3Mp5Cr3e2 JRxZaa++AKH4sBpsFOKuYudrMOkCAwEAAaOCARUwggERMAkGA1UdEwQCMAAwLAYJ YIZIAYb4QgENBB8WHU9wZW5TU0wgR2VuZXJhdGVkIENlcnRpZmljYXRlMB0GA1Ud DgQWBBT+BEbtoBW+wUtZA/gtDe0q4O35LzCBtgYDVR0jBIGuMIGrgBTmEnw9oQLl uh/anje+40U+m67lpqGBj6SBjDCBiTELMAkGA1UEBhMCRkoxDTALBgNVBAgTBEZp amkxDTALBgNVBAcTBFN1dmExDjAMBgNVBAoTBVNPUEFDMQwwCgYDVQQLEwNJQ1Qx FjAUBgNVBAMTDVNPUEFDIFJvb3QgQ0ExJjAkBgkqhkiG9w0BCQEWF2FkbWluaXN0 cmF0b3JAc29wYWMub3JnggEAMA0GCSqGSIb3DQEBBAUAA4GBADSN+2ULhVviRAnw VTE7KSv0/apf27gRGsarM2dZwQTeNN8IVy7GYNz31OLxc5dXI1ACY/x4ljSzysQb xUzIFmm7nEp+ABlIYuJRqzr6/YjN4J3vZ1Da/ksTxQyM/K1ute5A4/00EJ+tNL3b Bu0JPfKmgSJjFtyuMwxw/Qpsr7xa -----END CERTIFICATE-----
  • 155. © joergkrause.de Zertifikat beschaffen Root CA Intermediate CA Intermediate CA Intermediate Issuing CAs Issuing CAs Issuing CAs
  • 156. joergkrause.de SSL in den IIS Einrichtung und Konfiguration
  • 157. © joergkrause.de Vorbereitung • Wahl des Zertifikats: – Valid From und Valid To gültig / sinnvoll? – Common Name (CN) passend zur URL der Site? – Issuer (Herausgeber) in der Liste vertrauter Stammzertifikate?
  • 158. © joergkrause.de Testzertifikat • "Self Signed" • Test-Root-Zertifikat und Test-Zertifikat mit makecert • Test-Zertifikat mit Powershell – New-SelfSignedCertificate
  • 159. © joergkrause.de Testzertifikat mit makecert • Anlegen und Speichern eines Testzertifikats makecert -r -pe -n "CN=www.yourserver.com" -b 01/01/2015 -e 01/01/2036 -eku 1.3.6.1.5.5.7.3.1 -ss my -sr localMachine -sky exchange -sp "Microsoft RSA SChannel Cryptographic Provider" -sy 12 "Self-Signed" Privater Schlüssel exportierbar Name nach X.500 Gültig ab (Valid From/begin) Gültig bis (Valid To/end) Store (X.509 store name) Location (currentuser/localmachine) Key Type (exchange/signature) Provider CryptoAPI Provider Type Zertifikatstyp (OID-Format)
  • 160. © joergkrause.de OID • Object Identifier – Baum mit Objektbeschreibungswerten – Private Knoten (kostenlose Registrierung) möglich – Wurzel: • 0: ITU-T (Telecommunication Standardization Sector) • 1: ISO • 2: ITU-T + ISO Joint • OID ist ein Meta-Standard http://www.oid-info.com/faq.htm http://www.codingfreaks.de/2012/04/02/gultige-oids-in-makecert-exe/
  • 161. © joergkrause.de OID • So entsteht die OID 1. ISO 3. Identified Organization 6. dod (US department of defence) 1. Internet 5. Security 5. mechanisms 7. pkix (Public Key Infrastructure) 3. kp (Extended Key Purpose) 1 serverAuth Test eines OID: http://oid-info.com/get/1.3.6.1.5.5.7.3.1 "Indicates that a certificate can be used as an SSL server certificate"
  • 162. © joergkrause.de Aktuelle Konfiguration • Entscheidend ist http.sys! netsh http show sslcert
  • 163. © joergkrause.de Konfiguration • SSL optional oder zwingend
  • 164. © joergkrause.de Bindungen • Standard-Port für SSL: 443 • Einstellungen Via IIS Manager / Skript / .NET • Konfiguration: <bindings> <binding bindingInformation="mystore:443:" protocol="https" sslFlags="0"> </bindings> 0: IP/Port, ein Zertifikat pro Kombination 1: Host Name und IP (SNI Verfahren) 2: Zentrales SSL-Zertifikat (kein SNI) 3: Zentrales SSL-Zertifikat mit SNI
  • 165. © joergkrause.de Ablauf • Zwei Plätze: 1. Bindungsinformationen in applicationHost.config 2. Assoziierte SSL-Konfiguration in http.sys • Beim Start der Site – IIS sendet Bindungsdaten von Konfiguration an http.sys – http.sys beginnt auf dem Port zu lauschen • Beim Verbindungsaufbau: – http.sys schaut in seine Konfiguration nach der IP:Port- Kombination – http.sys sucht Zertifikat anhand Hash & Store
  • 166. © joergkrause.de Kommandozeile appcmd.exe set config -section:system.applicationHost/sites /siteDefaults.bindings .[protocol='https', bindingInformation='*:443:mysite.de'] .bindingInformation:"127.0.0.1:80:" /commit:apphost
  • 167. © joergkrause.de .NET-Code • Ausführung in einer Konsolenapplikation using (ServerManager serverManager = new ServerManager()) { var config = serverManager.GetApplicationHostConfiguration(); var sitesSection = config.GetSection("system.applicationHost/sites"); var siteDefaultsElement = sitesSection.GetChildElement("siteDefaults"); var bindingsCollection = siteDefaultsElement.GetCollection("bindings"); var bindingElement = bindingsCollection.CreateElement("binding"); bindingElement["protocol"] = @"http"; bindingElement["bindingInformation"] = @"127.0.0.1:8080:"; bindingsCollection.Add(bindingElement); serverManager.CommitChanges(); }
  • 168. © joergkrause.de Demo • Zertifikat erstellen • Installieren • Testen
  • 171. © joergkrause.de Beschränken von Verbindungen • Authentifizierung • Autorisierung: – IP-Beschränkungen – URL Autorisierung – ISAPI- und CGI-Beschränkungen – Anforderungsfilter
  • 172. © joergkrause.de Authentifizierung & Autorisierung 1. Authentifizierung – Wer bist du? – Diverse Verfahren 2. Autorisierung – Was darfst du? – Diverse Stufen
  • 173. © joergkrause.de Authentifizierung Methode Anmeldeverfahren Benutzerdatenbank Anonymer Zugriff Keines AD, lokales Konto Basic Abfragedialog AD, lokales Konto Client Zertifikat Zertifikatsauswahl AD IIS Zertifikat mit Mapping Zertifikatsauswahl AD, lokales Konto Digest Abfragedialog AD Forms HTML-Formular ASP.NET Membership Windows Abfragedialog AD, lokales Konto
  • 174. © joergkrause.de Das "anonyme" Konto • Keine Operation ohne Identität • Die anonymen Zugriffe laufen unter IUSR ab • IUSR ist in der Gruppe IIS_IUSRS • Minimale Ausführungsrechte in der ACL: – Read • Für aktive Programme: – Read & Execute – List folder contents
  • 175. © joergkrause.de IUSR • IUSR – Kein Kennwort ("built in") – Für Gastzugang einfach ACL auf IUSR setzen (Read) – Kennwort kann nicht ablaufen – Kopieren der ACL mit xcopy /o • Identische SID auf allen Windows-Systemen • IIS_USRS – Worker Prozess fügt Token der Pool-Identität dynamisch der Gruppe hinzu – Das Pool-Konto muss deshalb nicht konfiguriert werden <anonymousAuthentication enabled="true" userName="IUSR" defaultLogonDomain="" />
  • 176. © joergkrause.de Start Authentifizierungsablauf Anonym ? Start Impersonate IUSR Send 401 Per- missions OK? 200 OK Other Auth? config config config Success ? Authenticate Send 403 Impersonate User HTTP Request config Per- missions OK? config Yes No No No Yes Yes Yes No
  • 178. © joergkrause.de IP-Beschränkungen • Standard: – IP oder IP-Bereich – Explizit erlauben oder explizit verbieten • Erweiterung: – Dynamische Beschränkung – Anzahl konkurrierender Anforderungen http://www.iis.net/downloads/microsoft/dynamic-ip-restrictions
  • 179. © joergkrause.de URL-Autorisierung • Zugriffsbeschränkungen durch URLs • Ersetzt Beschränkungen durch ACLs • Funktion "Authorization Rules" – Ebene Verzeichnis – Ebene Datei
  • 180. © joergkrause.de URL-Autorisierung • In der web.config der Anwendung • Element <location> ist das Elternelement <location path="bobsSecret.aspx"> <system.webServer> <security> <authorization> <remove users="" roles="BobAndFriends" verbs="" /> <add accessType="Allow" users="Bob" /> </authorization> </security> </system.webServer> </location>
  • 181. © joergkrause.de Anforderungsfilter • Standardbeschränkungen: – Kritische Dokumente sind ausgefiltert (Configs, DLLs, …) • Beschränkungsfunktionen: – Dateierweiterung – URL-Segmente – Verbs (HTTP-Methoden) – Non-ASCII (z.B. UTF-8) – Doppelt encodete Anfragen – Maximale Länge der Anfrage – Maximale Länge des URL – Maximale Länge des Query Strings
  • 182. © joergkrause.de Anforderungsfilter • Beispiel Kommandozeile • Im IIS-Manager (MMC) appcmd set config /section:requestfiltering /allowhighbitcharacters:true |
  • 183. © joergkrause.de Anforderungsfilter • Spezifische Fehler bei Verstoß gegen die Regeln URL Sequenz verboten 404.5 Verb verboten 404.6 Dateierweiterung nicht zugelassen 404.7 Verstecktes Segment (Verzeichnis) erkannt 404.8 Anforderungs-Kopfzeile (Request Header) zu lang 404.10 URL doppelt encodet 404.11 Non-ASCII (high bit) Zeichen 404.12 Inhalt zu lang 404.13 URL zu lang 404.14 Query String zu lang 404.15
  • 185. © joergkrause.de IIS Absichern (Checkliste I) • Verzeichniszugriff – Beschränkungen anonym zugreifbarere Verzeichnisse – IISAdmin, IISHelp, IISSamples entfernen – PARENT PATH config entfernt – Website Root nicht auf dem Systemlaufwerk – Verzeichnis durchsuchen abgeschaltet – Kein SDK, Visual Studio etc. installiert
  • 186. © joergkrause.de IIS Absichern (Checkliste II) • Konfiguration – DEBUG OFF in web.config – TRACE FALSE in web.config – Nicht benötigte HTTP-Module entfernt – Nicht benötigte Handler entfernt (z.B. *.hta, *.shtml)
  • 187. © joergkrause.de IIS Absichern (Checkliste III) • Sicherung der Kommunikation – HTTPS aktiviert – Zertifikate aktuell, vertraut und korrekt – Remote Administration aus oder abgesichert – Standardkommunikation nur Port 80 und 443 – IPSec für alle internen Verbindungen
  • 188. © joergkrause.de IIS Absichern (Checkliste IV) • Protokollierung und Überwachung – Misslungene Anmeldeversuche regelmäßig prüfen – Protokolle auswerten – Erweitertes Protokollierungsformat benutzen
  • 189. © joergkrause.de IIS Absichern (Checkliste V) • Konten – Verwaltete Konten für Application Pools – IUSR abgeschaltet – Anonymer Zugriff aus – Remote Login aus (außer Admin, wenn Bedarf) – Lokaler Login aus (außer Admin)
  • 190. © joergkrause.de IIS Absichern (Checkliste VI) • ASP.NET – State Service aus (speziell bei MVC) • System – WebDAV aus – FTP und SMTP aus – System-Shares aus (C$, D$ usw.) – SMB aus – TELNET aus – IIS nicht auf Domain Controller – DMZ konfiguriert – Updates aktuell (Windows, .NET)?
  • 191. © joergkrause.de Hilfreiche Werkzeuge • Microsoft Security Compliance Manager 3.0 • SQL Server Express benötigt • Nicht nur IIS, allgemeines Werkzeug
  • 192. © joergkrause.de Security Compliance Manager 3.0 • Liste von Einstellungen über alle Produkte • Empfehlung und Erklärung zu allen Einstellungen Aktueller Status Empfehlung Erklärungen
  • 193. © joergkrause.de Agenda 1 2 3 4 5 6 Geschichte + Grundlagen Installation + Konfiguration Fehlersuche + Optimierung Architektur + Arbeitsweise Administration + Werkzeuge Sicherheit + Härtung
  • 195. © joergkrause.de Werkzeuge • Fiddler (Telerik, Freeware) • LogParser 2.2 • Microsoft Network Monitor 3.4 • Wireshark • SSLDiag • MSConfig.exe • JMeter (Apache, Open Source) • Loadrunner (HP, Freemium)
  • 196. © joergkrause.de HTTP Diagnose • Pakete korrekt? • Bandbreite okay? • Authentifizierung passt? • Verschlüsselung aktiv? • Angriffe gesehen?
  • 198. © joergkrause.de Verstehen • Einfluss auf Performance des Servers: – Bandbreite – Anzahl HTTP-Requests • Einfluss im Browser: – JavaScript – Rendering
  • 201. © joergkrause.de Tools • Fiddler (Telerik) • F12 (IE, Chrome), Firebug (Firefox) – Profiler – Netzwerk – CSS – HTML – JavaScript Debugger • Vieles auch online, z.B. – Pingdom – Browserstack http://tools.pingdom.com/fpt/ http://www.browserstack.com
  • 202. © joergkrause.de IIS/Server-Optimierung • Pipeline Optimierung • Prozess Konfiguration Optimierung • CDN
  • 203. © joergkrause.de Pipeline Optimierung • Ziel: – Schnellere Verarbeitung • Vorgehensweise: – Entfernen nicht benutzter Module in der web.config ?
  • 205. © joergkrause.de Prozesskonfiguration • Ziel: – Optimale Nutzung von Ressourcen • Vorgehensweise: – Anpassen der Prozesskonfiguration an die konkreten Hardwarebedingungen ?
  • 206. © joergkrause.de Prozesskonfiguration • maxWorkerThreads: 20 pro Kern (4 Kerne == 80 Threads) – Höher möglich, wenn wenige CPU-intensive Arbeit (z.B. viel Async, Service Calls), dann sind Werte bis 100 möglich. • maxIOThreads: 20 pro Kern – Für Dateioperationen, Datenbankzugriff, Web Service Calls, interne Requests etc. Bei schneller Hardware, 10 Gbit Netz, SSD etc, sind Werte bis 100 möglich. • minWorkerThreads, minIOThreads: Standard 1 – Steuert Beginn der Request-Warteschlange, mindestens der Wert muss frei sein, damit NICHT gequeued wird. • memoryLimit: Anteil (%) vom Systemspeicher, den der Worker-Prozess belegen darf – Wenn die Anwendung alleine ist, darf der Wert hoch sein, z.B. 80. Bei vielen Lecks oder anderen Anwendungen, vor allem COM, Wert verringern.
  • 207. © joergkrause.de Verbindungskonfiguration • Anzahl gleichzeitiger Verbindungen zu einer IP- Adresse: – Standard 2 – Höhere Werte heute mehr als sinnvoll
  • 208. © joergkrause.de • Ziel: – Schnellere Requests – Weniger Latenz • Technik: – CDN nutzen ? CDN (Content Delivery Network)
  • 209. © joergkrause.de • Für allgemeine Dateien, wie jQuery, Knockout etc. bietet sich Microsoft, Google etc. an CDN (Content Delivery Network)
  • 210. © joergkrause.de • Für eigene gibt es kostenpflichtige Dienste – Cachefly (einfach, Upload/Distribute) – EdgeCast (komplex, DNS Caching) CDN (Content Delivery Network)

Notes de l'éditeur

  1. RFC 2616
  2. RFC 2616
  3. RFC 2616
  4. http://blog.teamtreehouse.com/an-introduction-to-websockets
  5. Mit HTTP.sys können sich mehrere Applikation denselben Port teilen! HTTP.sys is the protocol listener that listens for HTTP and HTTPS requests. HTTP.sys was introduced in IIS 6.0 as an HTTP-specific protocol listener for HTTP requests. In IIS 7.0, HTTP.sys also includes support for Secure Sockets Layer (SSL), which Lsass.exe provided in IIS 6.0. HTTP.sys is a kernel-mode device driver for HTTP protocol stack. It is part of the networking subsystem of the Windows operating systems. Beginning with IIS 6.0, this kernel-mode driver replaced Windows Sockets API (Winsock), which was a user-mode component that previous versions of IIS used to receive HTTP requests and send HTTP responses. When a client browser requests a Web page from a site on the IIS 7.0 server, HTTP.sys picks up the request on the site binding on the server machine and then passes it to the worker process for processing. After the request has been processed, HTTP.sys returns a response to the client browser. Apart from intercepting and returning HTTP requests, HTTP.sys also performs the following tasks: Preprocessing and security filtering of the incoming HTTP requests Queuing of HTTP requests for the application pools Caching of the outgoing HTTP responses
  6. http://www.codeproject.com/Articles/437733/Demystify-http-sys-with-HttpSysManager
  7. HTTP.sys maintains a request queue for each worker process. It sends the HTTP requests it receives to the request queue for the worker process that serves the application pool where the requested application is located. For each application, HTTP.sys maintains the URI namespace routing table with one entry. The routing table data is used to determine which application pool responds to requests from what parts of the namespace. Each request queue corresponds to one application pool. An application pool corresponds to one request queue within HTTP.sys and one or more worker processes. If a faulty application causes a worker process failure, service is not interrupted, and the failure is undetectable by an end user because the kernel queues the requests while the WAS service starts a new worker process for that application pool. When the WAS service identifies an unhealthy worker process, it starts a new worker process if outstanding requests are waiting to be serviced. Although a temporary disruption occurs in user-mode request processing, the user does not experience the failure, because TCP/IP connections are maintained, and requests continue to be queued and processed. Only those requests that are running in the worker process when it fails will result in users seeing an error status. The requests that haven’t been processed yet will be redirected to the new worker process. Other than retrieving a stored response from its internal cache, HTTP.sys does not process the requests that it receives. Therefore, no application-specific code is ever loaded into kernel mode but is processed inside the worker process that runs in the user mode. As a result, bugs in application-specific code cannot affect the kernel or lead to system failures.
  8. Demo : Taskmanager
  9. Vereinfacht! Komplette: http://www.dotnet-tricks.com/Content/images/mvc/ASP.NETMVC5Pipeline.png
  10. http://www.iis.net/learn/install/installing-iis-85/installing-iis-85-on-windows-server-2012-r2#ModulesinIIS85
  11. # -------------------------------------------------------------------- # Checking Execution Policy # -------------------------------------------------------------------- #$Policy = "Unrestricted" $Policy = "RemoteSigned" If ((get-ExecutionPolicy) -ne $Policy) { Write-Host "Script Execution is disabled. Enabling it now" Set-ExecutionPolicy $Policy -Force Write-Host "Please Re-Run this script in a new powershell enviroment" Exit } # -------------------------------------------------------------------- # Define the variables. # -------------------------------------------------------------------- $InetPubRoot = "D:\Inetpub" $InetPubLog = "D:\Inetpub\Log" $InetPubWWWRoot = "D:\Inetpub\WWWRoot" # -------------------------------------------------------------------- # Loading Feature Installation Modules # -------------------------------------------------------------------- Import-Module ServerManager # -------------------------------------------------------------------- # Installing IIS # -------------------------------------------------------------------- Add-WindowsFeature -Name Web-Common-Http,Web-Asp-Net,Web-Net-Ext,Web-ISAPI-Ext,Web-ISAPI-Filter,Web-Http-Logging,Web-Request-Monitor,Web-Basic-Auth,Web-Windows-Auth,Web-Filtering,Web-Performance,Web-Mgmt-Console,Web-Mgmt-Compat,RSAT-Web-Server,WAS -IncludeAllSubFeature # -------------------------------------------------------------------- # Loading IIS Modules # -------------------------------------------------------------------- Import-Module WebAdministration # -------------------------------------------------------------------- # Creating IIS Folder Structure # -------------------------------------------------------------------- New-Item -Path $InetPubRoot -type directory -Force -ErrorAction SilentlyContinue New-Item -Path $InetPubLog -type directory -Force -ErrorAction SilentlyContinue New-Item -Path $InetPubWWWRoot -type directory -Force -ErrorAction SilentlyContinue # -------------------------------------------------------------------- # Copying old WWW Root data to new folder # -------------------------------------------------------------------- $InetPubOldLocation = @(get-website)[0].physicalPath.ToString() $InetPubOldLocation = $InetPubOldLocation.Replace("%SystemDrive%",$env:SystemDrive) Copy-Item -Path $InetPubOldLocation -Destination $InetPubRoot -Force -Recurse # -------------------------------------------------------------------- # Setting directory access # -------------------------------------------------------------------- $Command = "icacls $InetPubWWWRoot /grant BUILTIN\IIS_IUSRS:(OI)(CI)(RX) BUILTIN\Users:(OI)(CI)(RX)" cmd.exe /c $Command $Command = "icacls $InetPubLog /grant ""NT SERVICE\TrustedInstaller"":(OI)(CI)(F)" cmd.exe /c $Command # -------------------------------------------------------------------- # Setting IIS Variables # -------------------------------------------------------------------- #Changing Log Location $Command = "%windir%\system32\inetsrv\appcmd set config -section:system.applicationHost/sites -siteDefaults.logfile.directory:$InetPubLog" cmd.exe /c $Command $Command = "%windir%\system32\inetsrv\appcmd set config -section:system.applicationHost/log -centralBinaryLogFile.directory:$InetPubLog" cmd.exe /c $Command $Command = "%windir%\system32\inetsrv\appcmd set config -section:system.applicationHost/log -centralW3CLogFile.directory:$InetPubLog" cmd.exe /c $Command #Changing the Default Website location Set-ItemProperty 'IIS:\Sites\Default Web Site' -name physicalPath -value $InetPubWWWRoot # -------------------------------------------------------------------- # Checking to prevent common errors # -------------------------------------------------------------------- If (!(Test-Path "C:\inetpub\temp\apppools")) { New-Item -Path "C:\inetpub\temp\apppools" -type directory -Force -ErrorAction SilentlyContinue } # -------------------------------------------------------------------- # Deleting Old WWWRoot # -------------------------------------------------------------------- Remove-Item $InetPubOldLocation -Recurse -Force # -------------------------------------------------------------------- # Resetting IIS # -------------------------------------------------------------------- $Command = "IISRESET" Invoke-Expression -Command $Command
  12. http://blogs.technet.com/b/bernhard_frank/archive/2011/02/17/iis-f-252-r-einsteiger-teil-1-installation.aspx
  13. http://www.iis.net/learn/get-started/planning-for-security/how-to-use-locking-in-iis-configuration
  14. http://www.iis.net/learn/manage/managing-your-configuration-settings/shared-configuration_264
  15. Ausschnitt applicationHost.config
  16. function AppPool-Exists{ param([parameter(Mandatory=$true)] [String] $AppPoolName) # Test is AppPool exists if(Test-Path IIS:\AppPools\$AppPoolName) { return $true; } else { return $false; } } function Site-Exists{ param([parameter(Mandatory=$true)] [String] $SiteName) # Test is AppPool exists if(Test-Path IIS:\Sites\$SiteName) { return $true; } else { return $false; } } # # IIS-Pool erstellen/einrichten Clear-Host Write-Host "Start IIS Konfiguration" # Protokoll $logFolder = "Z:\logs" # Variable mit Pool Name erstellen $IISAppPoolName="ShopPool" # Größe Worker Prozess $maxMemKB = 500000 # Variable mit Site Name erstellen $Sitename = "ShopSite" $ipAddress = "10.74.179.107" $port = 30000 # Variable mit SitePfad erstellen $SitePath = "C:\inetpub\wwwroot\shop" # Pool User $poolUserName = "ShopPoolUser" $poolUserPassword = "p@ssw0rd" # Modul "webadministration" importieren Import-Module webadministration # Ins IIS Apppool Verzeichins wechseln cd IIS: Write-Host "Teste AppPool" # Pool erstellen, hier wird mit "New-Item" ein AppPool erstellt da Kontext = IIS-AppPool. Sonst "New-WebAppPool" if (AppPool-Exists($IISAppPoolName)) { Write-Host "AppPool vorhanden..entfernen" Remove-Item ("\Apppools\$IISAppPoolName") -Confirm:$False } Write-Host "AppPool anlegen" $AppPool = New-Item ("\Apppools\$IISAppPoolName") -Force # TODO: Username, User-Kennwort, LogfilePfad als Variablen definieren # AppPooleigenschaften setzen 32-Bit, Set-ItemProperty ("\Apppools\$IISAppPoolName") "enable32BitAppOnWin64" 1 # AppPooleigenschaften setzen Startmodus, Set-ItemProperty ("\Apppools\$IISAppPoolName") -Name "startMode" -Value 1 # AppPooleigenschaften setzen, Runtime Version Set-ItemProperty ("\Apppools\$IISAppPoolName") -Name "managedRuntimeVersion" -Value "v4.0" # AppPooleigenschaften setzen Pipeline Modus Set-ItemProperty ("\Apppools\$IISAppPoolName") -Name "managedPipelineMode" -Value "integrated" # AppPooleigenschaften setzen Service Account (WindowsAuthentifizierung => IdentityType=3) Set-ItemProperty ("\Apppools\$IISAppPoolName") -Name "ProcessModel" -Value @{ UserName=$poolUserName;Password=$poolUserPassword;IdentityType=3} # AppPooleigenschaften setzen Prozess Recycling ab 500000KB RAM Verbrauch, memory bei 64 nicht sinnvoll Set-ItemProperty ("\Apppools\$IISAppPoolName") -Name recycling.periodicRestart.privateMemory -Value $maxMemKB # AppPooleigenschaften setzen Prozess Recycling wird nicht automatisch nach Ablauf eines Zeitintervalls (Minuten) erneut gestartet Set-ItemProperty ("\Apppools\$IISAppPoolName") -Name recycling.periodicRestart.time -value "00:00" # # # IIS-Site erstellen/einrichten # VZ fuer AppSite erstellen sollte auf Datenpartition liegen !!! Write-Host "Ordner für Site anlegen: $SitePath" $siteFolder = New-Item -ItemType Directory -Path $SitePath -Force # TODO: TESTEN!!!!! Berechtignung des Siteverzeichnisses anpassen (User wird angezeigt ohne aber Berechtigung auf VZ!) Write-Host "Brechtigungen setzen" $acl=get-acl $siteFolder.FullName $InheritanceFlag = ([System.Security.AccessControl.InheritanceFlags]::ContainerInherit, [System.Security.AccessControl.InheritanceFlags]::ObjectInherit) $PropagationFlag = [System.Security.AccessControl.PropagationFlags]::None $objType =[System.Security.AccessControl.AccessControlType]::Allow $aclPermission = New-Object System.Security.AccessControl.FileSystemAccessRule($poolUserName,"FullControl", $InheritanceFlag, $PropagationFlag, $objType) $acl.SetAccessRule($aclPermission) Set-Acl $SitePath $acl Write-Host "Site testen" # Site erstellen; Pfad sollte auf Datenpartition liegen !!! if (Site-Exists($Sitename)) { Write-Host "Site $Sitename vorhanden..entfernen" Remove-Item ("\Sites\$Sitename") -Confirm:$False } Write-Host "Site anlegen" $AppSite = new-Website -name $Sitename -Port $port -IPAddress $ipAddress -PhysicalPath $SitePath -Force # App Pool der Site zuweisen Set-ItemProperty ("\Sites\$Sitename") -Name "applicationPool" -Value $AppPool.name # TODO: TESTEN!!!! - Logging in VZ C:\install aktivieren (Fehler bei Ausfuehrung) $folder_exist = Test-Path -Path $logFolder if ($folder_exist -eq $false) { Write-Host "Log Ordner erstellen" #create it New-Item -Path $logFolder -ItemType directory } else { Write-Host "Log Ordner vorhanden: $logFolder" } Set-ItemProperty ("\Sites\$Sitename") -Name "logfile" -Value @{logFormat="W3C"; directory=$logFolder } Write-Host "Ende IIS Konfiguration" cd C:\Windows\System32
  17. function AppPool-Exists{ param([parameter(Mandatory=$true)] [String] $AppPoolName) # Test is AppPool exists if(Test-Path IIS:\AppPools\$AppPoolName) { return $true; } else { return $false; } } function Site-Exists{ param([parameter(Mandatory=$true)] [String] $SiteName) # Test is AppPool exists if(Test-Path IIS:\Sites\$SiteName) { return $true; } else { return $false; } } # # IIS-Pool erstellen/einrichten Clear-Host Write-Host "Start IIS Konfiguration" # Protokoll $logFolder = "Z:\logs" # Variable mit Pool Name erstellen $IISAppPoolName="ShopPool" # Größe Worker Prozess $maxMemKB = 500000 # Variable mit Site Name erstellen $Sitename = "ShopSite" $ipAddress = "10.74.179.107" $port = 30000 # Variable mit SitePfad erstellen $SitePath = "C:\inetpub\wwwroot\shop" # Pool User $poolUserName = "ShopPoolUser" $poolUserPassword = "p@ssw0rd" # Modul "webadministration" importieren Import-Module webadministration # Ins IIS Apppool Verzeichins wechseln cd IIS: Write-Host "Teste AppPool" # Pool erstellen, hier wird mit "New-Item" ein AppPool erstellt da Kontext = IIS-AppPool. Sonst "New-WebAppPool" if (AppPool-Exists($IISAppPoolName)) { Write-Host "AppPool vorhanden..entfernen" Remove-Item ("\Apppools\$IISAppPoolName") -Confirm:$False } Write-Host "AppPool anlegen" $AppPool = New-Item ("\Apppools\$IISAppPoolName") -Force # TODO: Username, User-Kennwort, LogfilePfad als Variablen definieren # AppPooleigenschaften setzen 32-Bit, Set-ItemProperty ("\Apppools\$IISAppPoolName") "enable32BitAppOnWin64" 1 # AppPooleigenschaften setzen Startmodus, Set-ItemProperty ("\Apppools\$IISAppPoolName") -Name "startMode" -Value 1 # AppPooleigenschaften setzen, Runtime Version Set-ItemProperty ("\Apppools\$IISAppPoolName") -Name "managedRuntimeVersion" -Value "v4.0" # AppPooleigenschaften setzen Pipeline Modus Set-ItemProperty ("\Apppools\$IISAppPoolName") -Name "managedPipelineMode" -Value "integrated" # AppPooleigenschaften setzen Service Account (WindowsAuthentifizierung => IdentityType=3) Set-ItemProperty ("\Apppools\$IISAppPoolName") -Name "ProcessModel" -Value @{ UserName=$poolUserName;Password=$poolUserPassword;IdentityType=3} # AppPooleigenschaften setzen Prozess Recycling ab 500000KB RAM Verbrauch, memory bei 64 nicht sinnvoll Set-ItemProperty ("\Apppools\$IISAppPoolName") -Name recycling.periodicRestart.privateMemory -Value $maxMemKB # AppPooleigenschaften setzen Prozess Recycling wird nicht automatisch nach Ablauf eines Zeitintervalls (Minuten) erneut gestartet Set-ItemProperty ("\Apppools\$IISAppPoolName") -Name recycling.periodicRestart.time -value "00:00" # # # IIS-Site erstellen/einrichten # VZ fuer AppSite erstellen sollte auf Datenpartition liegen !!! Write-Host "Ordner für Site anlegen: $SitePath" $siteFolder = New-Item -ItemType Directory -Path $SitePath -Force # TODO: TESTEN!!!!! Berechtignung des Siteverzeichnisses anpassen (User wird angezeigt ohne aber Berechtigung auf VZ!) Write-Host "Brechtigungen setzen" $acl=get-acl $siteFolder.FullName $InheritanceFlag = ([System.Security.AccessControl.InheritanceFlags]::ContainerInherit, [System.Security.AccessControl.InheritanceFlags]::ObjectInherit) $PropagationFlag = [System.Security.AccessControl.PropagationFlags]::None $objType =[System.Security.AccessControl.AccessControlType]::Allow $aclPermission = New-Object System.Security.AccessControl.FileSystemAccessRule($poolUserName,"FullControl", $InheritanceFlag, $PropagationFlag, $objType) $acl.SetAccessRule($aclPermission) Set-Acl $SitePath $acl Write-Host "Site testen" # Site erstellen; Pfad sollte auf Datenpartition liegen !!! if (Site-Exists($Sitename)) { Write-Host "Site $Sitename vorhanden..entfernen" Remove-Item ("\Sites\$Sitename") -Confirm:$False } Write-Host "Site anlegen" $AppSite = new-Website -name $Sitename -Port $port -IPAddress $ipAddress -PhysicalPath $SitePath -Force # App Pool der Site zuweisen Set-ItemProperty ("\Sites\$Sitename") -Name "applicationPool" -Value $AppPool.name # TODO: TESTEN!!!! - Logging in VZ C:\install aktivieren (Fehler bei Ausfuehrung) $folder_exist = Test-Path -Path $logFolder if ($folder_exist -eq $false) { Write-Host "Log Ordner erstellen" #create it New-Item -Path $logFolder -ItemType directory } else { Write-Host "Log Ordner vorhanden: $logFolder" } Set-ItemProperty ("\Sites\$Sitename") -Name "logfile" -Value @{logFormat="W3C"; directory=$logFolder } Write-Host "Ende IIS Konfiguration" cd C:\Windows\System32
  18. function AppPool-Exists{ param([parameter(Mandatory=$true)] [String] $AppPoolName) # Test is AppPool exists if(Test-Path IIS:\AppPools\$AppPoolName) { return $true; } else { return $false; } } function Site-Exists{ param([parameter(Mandatory=$true)] [String] $SiteName) # Test is AppPool exists if(Test-Path IIS:\Sites\$SiteName) { return $true; } else { return $false; } } # # IIS-Pool erstellen/einrichten Clear-Host Write-Host "Start IIS Konfiguration" # Protokoll $logFolder = "Z:\logs" # Variable mit Pool Name erstellen $IISAppPoolName="ShopPool" # Größe Worker Prozess $maxMemKB = 500000 # Variable mit Site Name erstellen $Sitename = "ShopSite" $ipAddress = "10.74.179.107" $port = 30000 # Variable mit SitePfad erstellen $SitePath = "C:\inetpub\wwwroot\shop" # Pool User $poolUserName = "ShopPoolUser" $poolUserPassword = "p@ssw0rd" # Modul "webadministration" importieren Import-Module webadministration # Ins IIS Apppool Verzeichins wechseln cd IIS: Write-Host "Teste AppPool" # Pool erstellen, hier wird mit "New-Item" ein AppPool erstellt da Kontext = IIS-AppPool. Sonst "New-WebAppPool" if (AppPool-Exists($IISAppPoolName)) { Write-Host "AppPool vorhanden..entfernen" Remove-Item ("\Apppools\$IISAppPoolName") -Confirm:$False } Write-Host "AppPool anlegen" $AppPool = New-Item ("\Apppools\$IISAppPoolName") -Force # TODO: Username, User-Kennwort, LogfilePfad als Variablen definieren # AppPooleigenschaften setzen 32-Bit, Set-ItemProperty ("\Apppools\$IISAppPoolName") "enable32BitAppOnWin64" 1 # AppPooleigenschaften setzen Startmodus, Set-ItemProperty ("\Apppools\$IISAppPoolName") -Name "startMode" -Value 1 # AppPooleigenschaften setzen, Runtime Version Set-ItemProperty ("\Apppools\$IISAppPoolName") -Name "managedRuntimeVersion" -Value "v4.0" # AppPooleigenschaften setzen Pipeline Modus Set-ItemProperty ("\Apppools\$IISAppPoolName") -Name "managedPipelineMode" -Value "integrated" # AppPooleigenschaften setzen Service Account (WindowsAuthentifizierung => IdentityType=3) Set-ItemProperty ("\Apppools\$IISAppPoolName") -Name "ProcessModel" -Value @{ UserName=$poolUserName;Password=$poolUserPassword;IdentityType=3} # AppPooleigenschaften setzen Prozess Recycling ab 500000KB RAM Verbrauch, memory bei 64 nicht sinnvoll Set-ItemProperty ("\Apppools\$IISAppPoolName") -Name recycling.periodicRestart.privateMemory -Value $maxMemKB # AppPooleigenschaften setzen Prozess Recycling wird nicht automatisch nach Ablauf eines Zeitintervalls (Minuten) erneut gestartet Set-ItemProperty ("\Apppools\$IISAppPoolName") -Name recycling.periodicRestart.time -value "00:00" # # # IIS-Site erstellen/einrichten # VZ fuer AppSite erstellen sollte auf Datenpartition liegen !!! Write-Host "Ordner für Site anlegen: $SitePath" $siteFolder = New-Item -ItemType Directory -Path $SitePath -Force # TODO: TESTEN!!!!! Berechtignung des Siteverzeichnisses anpassen (User wird angezeigt ohne aber Berechtigung auf VZ!) Write-Host "Brechtigungen setzen" $acl=get-acl $siteFolder.FullName $InheritanceFlag = ([System.Security.AccessControl.InheritanceFlags]::ContainerInherit, [System.Security.AccessControl.InheritanceFlags]::ObjectInherit) $PropagationFlag = [System.Security.AccessControl.PropagationFlags]::None $objType =[System.Security.AccessControl.AccessControlType]::Allow $aclPermission = New-Object System.Security.AccessControl.FileSystemAccessRule($poolUserName,"FullControl", $InheritanceFlag, $PropagationFlag, $objType) $acl.SetAccessRule($aclPermission) Set-Acl $SitePath $acl Write-Host "Site testen" # Site erstellen; Pfad sollte auf Datenpartition liegen !!! if (Site-Exists($Sitename)) { Write-Host "Site $Sitename vorhanden..entfernen" Remove-Item ("\Sites\$Sitename") -Confirm:$False } Write-Host "Site anlegen" $AppSite = new-Website -name $Sitename -Port $port -IPAddress $ipAddress -PhysicalPath $SitePath -Force # App Pool der Site zuweisen Set-ItemProperty ("\Sites\$Sitename") -Name "applicationPool" -Value $AppPool.name # TODO: TESTEN!!!! - Logging in VZ C:\install aktivieren (Fehler bei Ausfuehrung) $folder_exist = Test-Path -Path $logFolder if ($folder_exist -eq $false) { Write-Host "Log Ordner erstellen" #create it New-Item -Path $logFolder -ItemType directory } else { Write-Host "Log Ordner vorhanden: $logFolder" } Set-ItemProperty ("\Sites\$Sitename") -Name "logfile" -Value @{logFormat="W3C"; directory=$logFolder } Write-Host "Ende IIS Konfiguration" cd C:\Windows\System32
  19. http://de.wikipedia.org/wiki/Transport_Layer_Security
  20. http://de.wikipedia.org/wiki/Advanced_Encryption_Standard
  21. -sp: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\Defaults\Provider -sy HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\Defaults\Provider Types -eku 1.3.6.1.5.5.7.3.1 == PKIX_KP_SERVER_AUTH
  22. function AppPool-Exists{ param([parameter(Mandatory=$true)] [String] $AppPoolName) # Test is AppPool exists if(Test-Path IIS:\AppPools\$AppPoolName) { return $true; } else { return $false; } } function Site-Exists{ param([parameter(Mandatory=$true)] [String] $SiteName) # Test is AppPool exists if(Test-Path IIS:\Sites\$SiteName) { return $true; } else { return $false; } } # # IIS-Pool erstellen/einrichten Clear-Host Write-Host "Start IIS Konfiguration" # Protokoll $logFolder = "Z:\logs" # Variable mit Pool Name erstellen $IISAppPoolName="ShopPool" # Größe Worker Prozess $maxMemKB = 500000 # Variable mit Site Name erstellen $Sitename = "ShopSite" $ipAddress = "10.74.179.107" $port = 30000 # Variable mit SitePfad erstellen $SitePath = "C:\inetpub\wwwroot\shop" # Pool User $poolUserName = "ShopPoolUser" $poolUserPassword = "p@ssw0rd" # Modul "webadministration" importieren Import-Module webadministration # Ins IIS Apppool Verzeichins wechseln cd IIS: Write-Host "Teste AppPool" # Pool erstellen, hier wird mit "New-Item" ein AppPool erstellt da Kontext = IIS-AppPool. Sonst "New-WebAppPool" if (AppPool-Exists($IISAppPoolName)) { Write-Host "AppPool vorhanden..entfernen" Remove-Item ("\Apppools\$IISAppPoolName") -Confirm:$False } Write-Host "AppPool anlegen" $AppPool = New-Item ("\Apppools\$IISAppPoolName") -Force # TODO: Username, User-Kennwort, LogfilePfad als Variablen definieren # AppPooleigenschaften setzen 32-Bit, Set-ItemProperty ("\Apppools\$IISAppPoolName") "enable32BitAppOnWin64" 1 # AppPooleigenschaften setzen Startmodus, Set-ItemProperty ("\Apppools\$IISAppPoolName") -Name "startMode" -Value 1 # AppPooleigenschaften setzen, Runtime Version Set-ItemProperty ("\Apppools\$IISAppPoolName") -Name "managedRuntimeVersion" -Value "v4.0" # AppPooleigenschaften setzen Pipeline Modus Set-ItemProperty ("\Apppools\$IISAppPoolName") -Name "managedPipelineMode" -Value "integrated" # AppPooleigenschaften setzen Service Account (WindowsAuthentifizierung => IdentityType=3) Set-ItemProperty ("\Apppools\$IISAppPoolName") -Name "ProcessModel" -Value @{ UserName=$poolUserName;Password=$poolUserPassword;IdentityType=3} # AppPooleigenschaften setzen Prozess Recycling ab 500000KB RAM Verbrauch, memory bei 64 nicht sinnvoll Set-ItemProperty ("\Apppools\$IISAppPoolName") -Name recycling.periodicRestart.privateMemory -Value $maxMemKB # AppPooleigenschaften setzen Prozess Recycling wird nicht automatisch nach Ablauf eines Zeitintervalls (Minuten) erneut gestartet Set-ItemProperty ("\Apppools\$IISAppPoolName") -Name recycling.periodicRestart.time -value "00:00" # # # IIS-Site erstellen/einrichten # VZ fuer AppSite erstellen sollte auf Datenpartition liegen !!! Write-Host "Ordner für Site anlegen: $SitePath" $siteFolder = New-Item -ItemType Directory -Path $SitePath -Force # TODO: TESTEN!!!!! Berechtignung des Siteverzeichnisses anpassen (User wird angezeigt ohne aber Berechtigung auf VZ!) Write-Host "Brechtigungen setzen" $acl=get-acl $siteFolder.FullName $InheritanceFlag = ([System.Security.AccessControl.InheritanceFlags]::ContainerInherit, [System.Security.AccessControl.InheritanceFlags]::ObjectInherit) $PropagationFlag = [System.Security.AccessControl.PropagationFlags]::None $objType =[System.Security.AccessControl.AccessControlType]::Allow $aclPermission = New-Object System.Security.AccessControl.FileSystemAccessRule($poolUserName,"FullControl", $InheritanceFlag, $PropagationFlag, $objType) $acl.SetAccessRule($aclPermission) Set-Acl $SitePath $acl Write-Host "Site testen" # Site erstellen; Pfad sollte auf Datenpartition liegen !!! if (Site-Exists($Sitename)) { Write-Host "Site $Sitename vorhanden..entfernen" Remove-Item ("\Sites\$Sitename") -Confirm:$False } Write-Host "Site anlegen" $AppSite = new-Website -name $Sitename -Port $port -IPAddress $ipAddress -PhysicalPath $SitePath -Force # App Pool der Site zuweisen Set-ItemProperty ("\Sites\$Sitename") -Name "applicationPool" -Value $AppPool.name # TODO: TESTEN!!!! - Logging in VZ C:\install aktivieren (Fehler bei Ausfuehrung) $folder_exist = Test-Path -Path $logFolder if ($folder_exist -eq $false) { Write-Host "Log Ordner erstellen" #create it New-Item -Path $logFolder -ItemType directory } else { Write-Host "Log Ordner vorhanden: $logFolder" } Set-ItemProperty ("\Sites\$Sitename") -Name "logfile" -Value @{logFormat="W3C"; directory=$logFolder } Write-Host "Ende IIS Konfiguration" cd C:\Windows\System32
  23. http://msdn.microsoft.com/en-us/library/zhhddkxy(v=vs.140).aspx
  24. function AppPool-Exists{ param([parameter(Mandatory=$true)] [String] $AppPoolName) # Test is AppPool exists if(Test-Path IIS:\AppPools\$AppPoolName) { return $true; } else { return $false; } } function Site-Exists{ param([parameter(Mandatory=$true)] [String] $SiteName) # Test is AppPool exists if(Test-Path IIS:\Sites\$SiteName) { return $true; } else { return $false; } } # # IIS-Pool erstellen/einrichten Clear-Host Write-Host "Start IIS Konfiguration" # Protokoll $logFolder = "Z:\logs" # Variable mit Pool Name erstellen $IISAppPoolName="ShopPool" # Größe Worker Prozess $maxMemKB = 500000 # Variable mit Site Name erstellen $Sitename = "ShopSite" $ipAddress = "10.74.179.107" $port = 30000 # Variable mit SitePfad erstellen $SitePath = "C:\inetpub\wwwroot\shop" # Pool User $poolUserName = "ShopPoolUser" $poolUserPassword = "p@ssw0rd" # Modul "webadministration" importieren Import-Module webadministration # Ins IIS Apppool Verzeichins wechseln cd IIS: Write-Host "Teste AppPool" # Pool erstellen, hier wird mit "New-Item" ein AppPool erstellt da Kontext = IIS-AppPool. Sonst "New-WebAppPool" if (AppPool-Exists($IISAppPoolName)) { Write-Host "AppPool vorhanden..entfernen" Remove-Item ("\Apppools\$IISAppPoolName") -Confirm:$False } Write-Host "AppPool anlegen" $AppPool = New-Item ("\Apppools\$IISAppPoolName") -Force # TODO: Username, User-Kennwort, LogfilePfad als Variablen definieren # AppPooleigenschaften setzen 32-Bit, Set-ItemProperty ("\Apppools\$IISAppPoolName") "enable32BitAppOnWin64" 1 # AppPooleigenschaften setzen Startmodus, Set-ItemProperty ("\Apppools\$IISAppPoolName") -Name "startMode" -Value 1 # AppPooleigenschaften setzen, Runtime Version Set-ItemProperty ("\Apppools\$IISAppPoolName") -Name "managedRuntimeVersion" -Value "v4.0" # AppPooleigenschaften setzen Pipeline Modus Set-ItemProperty ("\Apppools\$IISAppPoolName") -Name "managedPipelineMode" -Value "integrated" # AppPooleigenschaften setzen Service Account (WindowsAuthentifizierung => IdentityType=3) Set-ItemProperty ("\Apppools\$IISAppPoolName") -Name "ProcessModel" -Value @{ UserName=$poolUserName;Password=$poolUserPassword;IdentityType=3} # AppPooleigenschaften setzen Prozess Recycling ab 500000KB RAM Verbrauch, memory bei 64 nicht sinnvoll Set-ItemProperty ("\Apppools\$IISAppPoolName") -Name recycling.periodicRestart.privateMemory -Value $maxMemKB # AppPooleigenschaften setzen Prozess Recycling wird nicht automatisch nach Ablauf eines Zeitintervalls (Minuten) erneut gestartet Set-ItemProperty ("\Apppools\$IISAppPoolName") -Name recycling.periodicRestart.time -value "00:00" # # # IIS-Site erstellen/einrichten # VZ fuer AppSite erstellen sollte auf Datenpartition liegen !!! Write-Host "Ordner für Site anlegen: $SitePath" $siteFolder = New-Item -ItemType Directory -Path $SitePath -Force # TODO: TESTEN!!!!! Berechtignung des Siteverzeichnisses anpassen (User wird angezeigt ohne aber Berechtigung auf VZ!) Write-Host "Brechtigungen setzen" $acl=get-acl $siteFolder.FullName $InheritanceFlag = ([System.Security.AccessControl.InheritanceFlags]::ContainerInherit, [System.Security.AccessControl.InheritanceFlags]::ObjectInherit) $PropagationFlag = [System.Security.AccessControl.PropagationFlags]::None $objType =[System.Security.AccessControl.AccessControlType]::Allow $aclPermission = New-Object System.Security.AccessControl.FileSystemAccessRule($poolUserName,"FullControl", $InheritanceFlag, $PropagationFlag, $objType) $acl.SetAccessRule($aclPermission) Set-Acl $SitePath $acl Write-Host "Site testen" # Site erstellen; Pfad sollte auf Datenpartition liegen !!! if (Site-Exists($Sitename)) { Write-Host "Site $Sitename vorhanden..entfernen" Remove-Item ("\Sites\$Sitename") -Confirm:$False } Write-Host "Site anlegen" $AppSite = new-Website -name $Sitename -Port $port -IPAddress $ipAddress -PhysicalPath $SitePath -Force # App Pool der Site zuweisen Set-ItemProperty ("\Sites\$Sitename") -Name "applicationPool" -Value $AppPool.name # TODO: TESTEN!!!! - Logging in VZ C:\install aktivieren (Fehler bei Ausfuehrung) $folder_exist = Test-Path -Path $logFolder if ($folder_exist -eq $false) { Write-Host "Log Ordner erstellen" #create it New-Item -Path $logFolder -ItemType directory } else { Write-Host "Log Ordner vorhanden: $logFolder" } Set-ItemProperty ("\Sites\$Sitename") -Name "logfile" -Value @{logFormat="W3C"; directory=$logFolder } Write-Host "Ende IIS Konfiguration" cd C:\Windows\System32
  25. http://blogs.technet.com/b/bernhard_frank/archive/2011/04/08/iis-f-252-r-einsteiger-teil-4-authentifizierung-und-autorisierung-mit-dem-iis.aspx
  26. http://www.iis.net/downloads/microsoft/dynamic-ip-restrictions
  27. http://www.iis.net/learn/manage/configuring-security/understanding-iis-url-authorization
  28. http://www.iis.net/learn/troubleshoot/diagnosing-http-errors
  29. http://www.codeproject.com/Articles/23306/10-ASP-NET-Performance-and-Scalability-Secrets
  30. Module sind an JEDEM Request beteiligt