Smart Clients in .NET: Leicht installieren, einfach verteilen, sicher betreiben Christof Sprenger Technologieberater .NET Strategy & Developer Group Microsoft GmbH.

Download Report

Transcript Smart Clients in .NET: Leicht installieren, einfach verteilen, sicher betreiben Christof Sprenger Technologieberater .NET Strategy & Developer Group Microsoft GmbH.

Smart Clients in .NET:
Leicht installieren,
einfach verteilen,
sicher betreiben
Christof Sprenger
Technologieberater
.NET Strategy & Developer Group
Microsoft GmbH
Agenda
Motivation

„Definition“ des Begriffs Smart Client
Grundlagen


Versioning in .NET
Security in .NET
Einzelne Aspekte



No-Touch Deployment
Security und No-Touch Deployment
Automatisches Update
Zusammenfassung
2
Motivation
3
Thin Clients
Applikation die mit einem Browser zu
bedienen ist
Denkbar einfaches Deployment
Benutzbarkeit nicht gut wurde/wird
aber immer besser




Menu Bars
Toolbars
Keyboard Shortcuts
„Standard“-UI
Was ist mit State?



Benutzereinstellungen
Session
Speichern von Dokumenten
4
Typische Thin Client Layer
Layer
Purpose
User State
Thin Client
User
Interaction
Current UI
Web Server
UI Generation
Session State
Web Service
Services/“Logi
c“
Data
Database
5
Rich Clients
Auch Desktop Applikationen genannt
Jedes UI Feature verfügbar
State Handling denkbar einfach
Die Resourcen/Dienste des
Betriebssystems und der Hardware
sind vollständig nutzbar




Prozessor,
Festplatte,
Graphik,
Eingabegeräte, …
Die Folge daraus:

Bessere Responsiveness,
6
Smart Clients
Es gibt nicht nur die beiden Wege


Rich (Fat) Clients
Thin Clients
Smart Client nutzen die Vorteile
beider Architekturen




Reichhaltiges UI
Einfaches State Management
Deployment über das Web
Daten und Services über das Web
7
Smart Client Layer
Layer
Purpose
Smart Client
User
Interaction
Web Service
Services/“Logi
c“
Data
Database
User State
UI und Session
8
Weitere mögliche Features
Offline/Online Fähigkeit
Logik beliebig auf Client oder
Server ausführbar
Auto Update
9
.NET Framework & Smart Clients
Was bietet .NET um das zu
ermöglichen?






Windows Forms für reichhaltiges UI
Einfachen Zugriff auf
! Server Logik mit Web
Services
!
No Touch Deployment
!
Zero Impact Install
Sauberes Versioning
von Komponenten
!
 Ende der DLL-Hell
Security Modell
 Rechtezuweisung an Code (nicht nur
Benutzer)
10
Grundlagen:
Versioning in .NET
11
Das Problem
Eine Applikation wird installiert…


… und läuft nicht, weil benötigte DLLs
nicht gefunden werden oder nicht
kompatibel sind
… und läuft problemlos, aber andere
Applikationen auf der Maschine haben
plötzliche Probleme mit fehlenden oder
inkompatiblen Versionen von benötigten
DLLs
12
Was erreicht werden soll
Verhinderung von "Nebenwirkungen"


Neue Applikationen sollen bereits
installierte Applikationen nicht negativ
beeinflussen
Zero Impact Install
Unkompliziertes Deployment


Installation durch Kopieren
Verschieben von Applikationen
Pflege der Software


Bugfixes auf einfache Weise ausliefern
Krisenmanagement: Was tun, wenn der
Bugfix neue Bugs enthält?
13
Sorgenkind Registry
Aufgabe der Registry


Auffinden von gemeinsam genutzen
Komponenten (Identity, Binding)
Informationen über Komponenten
speichern (Metadaten)
Probleme


Es gibt nur eine Registry nicht eine Pro
Applikation
Registry-Pflege bei Installation,
Deinstallation und Wartung ist mühsam
und fehleranfällig
14
Versionierungsärger
Bisher: Der „Highlander-Effekt“


Eine gemeinsam genutzte Komponente
konnte nur einmal vorhanden sein
Die Komponente musste deshalb
abwärtskompatibel sein mit allen
Vorgängerversionen
Direkte Konsequenzen



Aufwändiges Testen auf Kompabilität
Was tun, wenn eine Applikation mit einer
neuen Komponentenversion Probleme
hatte?
Die Folge war/ist die sogenannte DLLHell
15
Ein neues Komponentenmodell
Komponenten unter .NET


enthalten alle wichtigen Daten über sich
selbst in Metadaten-Tabellen
nehmen diese Informationen mit, wohin
sie auch gehen
„Strong Names“ geben jeder
Komponente eine eindeutige, sichere
Identität
Die Registry wird unnötig für
Komponenten-Metadaten und
Identität
16
Assembly Binding
Laden von Komponenten



Benötigte Komponenten werden vom CLR
Loader über einen festgelegten
Algorithmus gesucht (Assembly Binding
Algorithm)
Das Suchverhalten ist bei Bedarf pro
Applikation konfigurierbar
Die Registry wird unnötig für das
Auffinden von Komponenten (Binding)
17
Assembly Manifest
Das Manifest enthält







Assembly name
Version number
Culture
Strong name Information
 Public Key des Herstellers
Liste aller FIles die das Assembly bilden
Liste der Typen die Referenziert werden
Liste von referenzierte Assemblies
 assembly's name, version, culture und
public key
18
Strong Name
Ein Strong Name einer Assembly besteht
aus




Dem einfachen textuellen Namen
Einer Versionnummer (Major, Minor, Revision,
Build)
Culture Information (optional)
Plus ein Public Key und eine Digitale Signature
der Assembly
Strong-Named Assemblies ermöglichen

Uniqueness
Versions-„Abstammungslinien“

Integrity Check

Damit die Kette nicht bricht können Strong-
19
Der Ladevorgang
Bestimmen der korrekten Version

Konfigurationsdateien: application
configuration, publisher policy, machine
configuration.
Überprüfung des Global Assembly
Cache
Lokalisieren der Datei


Suche im Codebase Verzeichniss
Sonst das sogenannte Probing
 Suche im Application Base Verzeichniss
und in den Unterverzeichnissen mit
dem Namen der Assembly und der
Culture
 Suche im binpath Verzeichniss und in
20
Diagramm zum Ladevorgang
21
Grundlagen:
Security in .NET
22
Das Problem
23
Mobiler Code heute
Code aus diversen Quellen – speziell
dem Internet/Intranet
Code darf entweder nichts oder alles
(was der Benutzer darf)
Benutzer muss Entscheidung über
vertrauenswürdigen Code "on the fly"
treffen


Kann er dies?
Zertifikate helfen wenig
24
Code Access Security
Granulares Sicherheitsmodell für "partially
trusted" Code
Orthogonal zu nutzerbasierter OSSicherheit
Beruht auf Indizien ("evidence") über
Assemblies  auch evidence-based
security genannt
Verwaltung durch Sicherheitsregeln
("policies")
CLR berücksichtigt bei Ausführung die dem
Code zugestandenen Rechte ("permissions")
Frei erweiterbar
25
Evidence
Woher/Von Wem kommt dieser Code?
Charakterisierung pro Assembly

Ist unabhängig vom Ausführenden
Stammt vom Host (Anwendung, IE,
ASP.NET, ...) oder vom Assembly
selbst
Die Base Class Library (BCL) definiert:




Publisher (Authenticode-Zertifikate)
Site (Website, von der Assembly geladen
wird)
Url
Zone (IE-Sicherheitszone)
26
Permissions
Was könnte dieser Code tun?
Feingranulare Rechte, die an .NETCode verliehen werden können
Schützen Ressourcen & Operationen
Checks zur Lauf- oder Compile-Zeit
Verwendung:



Vergeben durch Sicherheits-Policy
Von Assembly angefordert
Deklarativ & imperativ
Sind unabhängig voneinander
(orthogonal)
27
Permissions in der BCL
FileIO
FileDialog
IsolatedStorage
Environment
Registry
UI
Printing
Reflection
Security
Socket
Web
DNS
OleDb
SQLClient
MessageQueue
EventLog
DirectoryServices
… erweiterbar
Execution, Assertion, Skip Verification,
Unmanaged code, Control evidence, Control
policy, Control principal, Control threads
28
Sicherheitsregeln
Begriffe:



Bedingung (membership condition):
Boolesche Funktion, die Evidenz
auswertet
Permissionset: Gruppierung von
Permissions (FullTrust, LocalIntranet, ...)
Codegroup: besteht aus einer
membership condition und einem
permission sets
Codegruppe
Bedingung
?
P
29
Policy Level
Codegruppen werden hierarchisch in
sogenannten Policy Levels angeordnet
Meist werden alle Child-CodeGroups
untersucht nachdem eine Memership
Condition zutrifft (Union Code Group)
30
Sicherheitsrichtlinien
Richtlinien (policy levels):
Permissionsets +
Codegruppenhierarchie +
vertrauenswürdige Assemblies
Effektive Richtlinie: Schnittmenge der
einzelnen Ebenen
Enterprise policy
Machine1 policy
User A
User B
Machine2 policy
User C
User D
31
Demo
.NET Konfiguration Configuration
32
Rechteanforderung
Permission demand: Überprüfung, daß alle
Aufrufer ausreichende Rechte haben

stack walk: schützt gegen sog. "luring attack"
Call Stack
Methode in A4
fordert
Permission P an

Assembly A1
R1
P
Assembly A2
R2
P
Assembly A3
P
R3
Assembly A4 R4
P
Dem Assembly
gewährte Rechte
R
Vergleich von P
mit den Rechten R
aller aufrufenden
Assemblies
Kann vorzeitig abgebrochen werden

Assert(), Deny(), PermitOnly()
33
Imperative Sicherheitsprüfung
Alle Permission-Objekte haben
Demand()-Methode


Ausführung zur Laufzeit wie normale
Methode
Vorteil: flexibel & variabel
Public Sub New(fileName As String)
' Must fully qualify the path for the security check
Dim fullPath As String = _
Directory.GetFullPathInternal(fileName)
New FileIOPermission(FileIOPermissionAccess.Read, _
fullPath).Demand()
… '[rest of function]
End Sub
34
Deklarative Sicherheitsprüfung
Aktionen durch custom attributes
beschrieben


In den Metadaten abgespeichert
Können mittels PERMVIEW.EXE oder MetadatenAPIs gelesen werden
Check zur Lauf- oder Linkzeit


Demand() zur Laufzeit
LinkDemand(), InheritanceDemand() beim Linken
Linkzeit-Aktions werden automatisch vom
JIT-Compiler durchgeführt, wenn Aufrufer
kompiliert oder Klasse geladen wird
Für Laufzeit-Deklarationen erzeugt der JITCompiler Code, der die Sicherheitsprüfung
durchführt
35
Deklarative
Sicherheitsprüfung
<FileIOPermission(SecurityAction.Demand, _
Write:="c:\temp")> _
Public Sub Foo()
' Subroutine implementation
End Sub
Nachteil: Deklarationen können
keine Laufzeitvariablen enthalten
36
Und jetzt alles zusammen …
Host
Assembly A3
Evidence
Security
Policy
Permission
Requests
Assembly A1 G1
Policy
Evaluator
Assembly A2 G2
Assembly A3 G3
G3
37
Demo
Simple Applikation



Über C:\....
Über \\localhost\c$\...
Über \\127.0.0.1\c$\...
38
Starten von Applikationen
über HTTP
39
No-Touch Deployment
Der Assembly Loader ist in der Lage
Assemblies über HTTP zu laden
Assembly wird in den Download
Cache kopiert und von dort
ausgeführt
 Starten von Desktop Applikationen
über einen Link im Browser
40
No-Touch Deployment
Versioning greift
Security greift
Abhängige Assemblies werden
nachgeladen
Controls im Browser


Ähnlich, aber nicht ganz das gleiche
Sieht aus wie ActiveX Controls
 Jedoch anderes Security Modell
 Kommunikation mit HTML möglich
41
Demo
TaskManager
42
Erster Download
GET /foo.exe HTTP/1.1
Accept: */*
Accept-Language: en-us
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT
5.1; Q312461; .NET CLR 1.0.3705)
Host: localhost
Connection: Keep-Alive
HTTP/1.1 200 OK
Server: Microsoft-IIS/5.1
Date: Fri, 01 Feb 2002 02:11:29 GMT
Content-Type: application/octet-stream
Accept-Ranges: bytes
Last-Modified: Fri, 01 Feb 2002 01:41:16 GMT
ETag: "50aae089c1aac11:916"
Content-Length: 45056
…
43
Folgende Downloads
GET /foo.exe HTTP/1.1
Accept: */*
Accept-Language: en-us
Accept-Encoding: gzip, deflate
If-Modified-Since: Fri, 01 Feb 2002 01:41:16 GMT
If-None-Match: "50aae089c1aac11:916"
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT
5.1; Q312461; .NET CLR 1.0.3705)
Host: localhost
Connection: Keep-Alive
HTTP/1.1 304 Not Modified
Server: Microsoft-IIS/5.1
Date: Fri, 01 Feb 2002 02:42:03 GMT
ETag: "a0fa92bc8aac11:916"
Content-Length: 0
44
Wann wird was runtergeladen?
Beim ersten Download kann die
Runtime die Version nicht kennen
Beim zweiten Download wird auch
dann geladen wenn


Datei neuer aber
Version kleiner
Abhängige Assemblies

Zuerst wird überprüft ob die richtige
Version im Cache
GAC wird immer zuerst überprüft
45
Security und No-Touch
Deployment
46
Security und No-Touch Deployment
Applikationen, die über
http://www.server.com gestartet
wurden sind im Normalfall in der Code
Group Internet
In Version 1.0 war dort das
PermissionSet Internet eingetragen
Im ServicePack 1 ist dort das
PermissionSet Nothing eingetragen
47
Top-Level Code Groups
Im Auslieferungszustand haben die TopLevel CodeGroups Membership-Conditions
die sich an der Zone orientieren
48
Security Zones
MyComputer_Zone

PermissionSet: FullTrust
LocalIntranet_Zone Permissions




FileDialog
IsolatedStorage
Printing
…
Internet

PermissionSet: Nothing
49
FileIO- und FileDialogPermission
Die Permission FileIO ermöglicht
Assemblies den Zugriff aufs
FileSystem
Dies ist meist zu viel

FileIO findet sich nur im PermissionSet
Everything
Die Klasse FileDialog hat Methode
OpenFile


FileDialogPermission ist ausreichend
Property FileName benötigt
FileIOPermission
50
Rechte Erweitern
Sicherheitsrichtlinien können nur den
Administrator verändert werden
Techniken




Batchdatei mit caspol
MSI Datei aus .NET Framework
Configuration
System Management
Installer Projekt (RunInstallerAttribute)
und die Klassen in System.Security.Policy
51
Create a new code group
PermissionSet permSet1 =
new NamedPermissionSet("Internet");
StrongNamePublicKeyBlob key =
new StrongNamePublicKeyBlob(publicKey);
IMembershipCondition membership1 =
new StrongNameMembershipCondition(key, null, null);
// Create the code group
PolicyStatement policy1 =
new PolicyStatement(permSet1);
CodeGroup codeGroup1 =
new UnionCodeGroup(membership1, policy1);
codeGroup1.Description = „More permissions for me“;
codeGroup1.Name = „Foo";
// Add the code group
machinePolicyLevel.RootCodeGroup.AddChild(codeGroup1);
52
Wrap Up No-Touch Deployment
Einfache Installation
Versioning greift
Security greift

Im Internet sehr restriktiv
Gut geeignet für das Intranet
53
Automatisches Update
54
Versionen kontrollieren
Wie kann man erreichen, dass immer neue
Versionen auf den Clients verfügbar sind
Was No-Touch Deployment nicht kann




Offline arbeiten
 technisch schon, ist aber nicht praktikabel
Zum Download einer neuen Version einer
dependent Assembly ist ein neue Version der
referenzierenden Assembly notwendig
„atomarer“ Download
Download im Hintergrund
55
.NET Updater Komponent
.NET Komponente die automatisches
Update erlaubt
Artikel und Code auf
www.gotdotnet.com
Die Architektur der .NET Updater
Komponente legt fest Where, When
und How die Komponenten
aktualisiert werden
56
.NET Updater Where & When
Where




Es wird HTTP zum Download verwendet
Internet, Intranet, Extranet
Eine URL
Andere Alternative
 BITS (siehe Artikel MSDN Magazine
Februar 2003)
When

Thread, der meist wartet und zu
bestimmten Intervallen aufwacht
57
Mögliche .NET Updater How‘s
Direct File Check


Client vergleicht Datum
Problem: ist nicht atomar
Manifest Check



Konfigurationsdatei auf dem Server
Client vergleicht die enthaltene
Versionsnummer oder Datum
Ist atomar
XML Web Service Check

Logik, die serverseitig entscheidet ob
Update verfügbar
58
Aufbau im Filesystem
PROGRAM FILES
└───MyApp
│
AppStart.exe
│
AppStart.exe.config
│
├───V1.0
│
MyApp.exe
│
└───V1.1
MyApp.exe
Es wird immer AppStart.exe gestartet
Die Configurationsdatei bestimmt Name des Folder
und Name der EXE-Datei
59
Demo Updater
Demo-Client starten
Neue Version auf Server kopieren
Manifest ändern
Demo-Client erneut starten
60
Hinweis
Demo verwendet DAV


Windows XP bietet Background Intelligent
Transfer Sevice (BITS)
Siehe Artikel im MSDN Magazin Februar
2003
61
Und zum Schluss
62
Zusammenfassung
Grundlagen bilden „sauberes“
Komponentenmodell



.NET Code Access Security
.NET Deployment
.NET Komponent Versioning
Zusätzliche Techniken machen
Applikationen „smart“



Zugriff auf Web Services
No Touch Deployment
Automatic Update
63
Fragen und Antworten
64
Empower
people
through software
great
any time, any place, and on any device.
66
67