Jump to content
  • entries
    16
  • comments
    22
  • views
    6466

Kerberos Delegation (Μέρος 2ο, Protocol Transition)


SOF

886 views

 Share

Γεια σας και πάλι, Sof σπικινγκ (κλεμμένο :P) . Ύστερα απο ένα αναπάντεχο disk failure που με ανάγκασε να ξαναφτιάξω το virtual environment είμαι πάλι εδώ για να συνεχίσουμε την εξερεύνηση μας. Το θέμα μας σήμερα είναι: Protocol Transition.

Στο πρώτο μέρος είδαμε πώς μπορούμε να μεταφέρουμε τα credentials ενός χρήστη από tier σε tier χρησιμοποιώντας Kerberos Constrained Delegation.

Προφανώς προβληματιστήκατε από το γεγονός ότι αφορά μόνο περιβάλλοντα όπου ο web client, web server και SQL server βρίσκονται εντός του Active Directory.

Τι γίνεται στην περίπτωση που ο client βρίσκεται εκτός Active directory; Πριν ανοίξετε το Visual Studio για να αρχίσετε να χτίζετε την custom λύση προώθησης των credentials, ρίχτε μια ματιά στα παρακάτω, είμαι σίγουρος ότι θα τα βρείτε χρήσιμα!!!

Στα Windows Server 2003 έγιναν από την Microsoft κάποιες επεκτάσεις στο πρωτόκολλο Kerberos.

Αυτές οι επεκτάσεις δίνουν την δυνατότητα σε ένα application να αποκτήσει ένα Kerberos ticket εκ μέρους του τελικού χρήστη, έστω και αν αυτός (ο τελικός χρήστης) χρησιμοποίησε κάποιο άλλο πρωτόκολλο κατά την πιστοποίηση στο application. Και όχι μόνο αυτό αλλά και ανεξάρτητα εντελώς με το πιο πρωτόκολλο χρησιμοποιήθηκε.

Αν ακούγεται περίπλοκο δείτε το παρκάτω σχήμα.

ev_003

Ο τελικός χρήστης πιστοποιείται με μία από τις παραπάνω μεθόδους στον web server αλλά ο web server με την σειρά του "μιλάει" πάντα Kerberos με τον SQL.

Το application αναλαμβάνει την ευθύνη να πιστοποιήσει τον χρήστη και  να ζητήσει ένα Kerberos ticket εκ μέρους του χρήστη.

Οι δυνατότητες που έχουμε με αυτού του τύπου την υλοποίηση είναι απεριόριστες!

Πχ. μπορούμε να εκδώσουμε user certificates που θα είναι αντιστοιχισμένα (mapped) στο Active Directory Account, για να  δίνουμε την δυνατότητα σε χρήστες εκτός δικτύου Active Directory να καλούν τα queries του SQL για τα οποία έχουν επαρκή rights μέσω SSL.

Ή απλά να υλοποιήσουμε ένα μηχανισμό forms authentication για να αντιστοιχίσουμε τον χρήστη σε ένα Active Directory account.

Η να πάρουμε τα NTLM credentials από ένα trusted Active Directory Domain και να τα μετατρέψουμε σε Kerberos!

Εντυπωσιαστήκατε; Ας δούμε πως υλοποιείται.

Για λόγους συντομίας θα κρατήσω τις ρυθμίσεις από το πρώτο μέρος και θα "χτίσω" πάνω σε αυτές. Οι ρυθμίσεις είναι για ένα application με forms authentication. Προφανώς δεν θα ασχοληθούμε με τις ρυθμίσεις του web client αφού αυτές δεν επηρεάζουν την υλοποίηση μας.

Μια ανασκόπηση στις ρυθμίσεις:

SQL.

1)     Ρυθμίζουμε τον SQL να χρησιμοποιεί Windows Integrated Security.

2)     Δίνουμε στον χρήστη (TestUser) τα απαραίτητα rights στην βάση δεδομένων.

3)     Βεβαιωνόμαστε ότι έχουμε καταχωρίσει το σωστό Service Principal Name (SPN) στο Active Directory.

setspn -a MSSQLSvc/SQL-SRV:1433 SqlServerSvcAccount

setspn -a MSSQLSvc/SQL-SRV.sof.local:1433 SqlServerSvcAccount

Middle Tier

1)     Δημιουργούμε τον λογαριασμό χρήστη κάτω από τον οποίο θα τρέχει το web application (WebAppPoolUsr)

2)     Καταχώρηση των SPNs του λογαριασμού WebAppPoolUsr

setspn -a HTTP/iis-srv WebAppPoolUsr

setspn -a HTTP/iis-srv.sof.local WebAppPoolUsr

3)     Trust this user for delegation to specified services only” --> SQL Service (Kerberos Only)

4)     Δημιουργούμε Application Pool (DelegationAppPool). Στα Properties à Identity, εισάγουμε τον λογαριασμό  που δημιουργήσαμε (WebAppPoolUsr).

5)     Δημιουργούμε ένα Virtual Directory. Το ρυθμίζουμε να χρησιμοποιεί το Application Pool που μόλις φτιάξαμε.

6)     Στο Directory Security tab à Authentication and access control à Edit, θα διαλέξουμε Integrated Windows authentication.

7)     Το τελευταίο βήμα είναι να καταχωρήσουμε το λογαριασμό του WebAppPoolAccount στο Local Group IIS_WPG. Αυτό του δίνει το “Impersonate a client after authentication right.”

SQL

Οι ρυθμίσεις του SQL παραμένουν οι ίδιες.

Middle Tier

1) Θα ξεκινήσουμε με το Web application που θα το τροποποιήσουμε αναλόγως προκειμένου να υποστηρίζει Protocol Transition.

 

Η πιο σημαντική γραμμή κώδικα είναι η εξής

WindowsIdentity identity = new WindowsIdentity( <logon name>@<domain> );

Βλέπουμε ότι για να δημιουργήσουμε το Windows Identity που θα χρησιμοποιούμε από εδώ και πέρα δίνουμε απλά το UPN, (το οποίο το έχουμε από την διαδικασία πιστοποίησης), χωρίς να δίνουμε το password, μια και δεν χρειάζεται αφού έχουμε ήδη πιστοποιηθεί από το application.

2) Θα ρυθμίσουμε το Web App να χρησιμοποιεί πλέον Basic Authentication.

ev

3) Θα τροποποιήσουμε τον λογαριασμό του Application Pool (WebAppPoolUser) να προωθεί τα credentials για οποιοδήποτε πρωτόκολλο

ev_004

4) Θα δώσουμε στον λογαριασμό read access στο tokenGroupsGlobalAndUniversal Attribute του Active Directory.

Στο Active Directory Users and Computers, θα κάνουμε κλικ στο Builtin. θα διαλέξουμε το Windows Authorization Access Group, θα ανοίξουμε τα Properties. Θα προσθέσουμε τον λογαριασμό ως μέλος του Group.

ev_002

5) Tέλος θα δώσουμε στον WebAppPoolUsr το δικαίωμα Ast As Part of the operating system στον IIS server.

ev_005

Αυτές είναι και οι ρυθμίσεις που χρειάζονται. Η εφαρμογή μας είναι πλέον έτοιμη να ζητήσει από το KDC ένα Kerberos Ticket για πρόσβαση στον SQL εκ μέρους του δηλωμένου χρήστη!

Τελικά δεν ήταν τόσο περίπλοκο έτσι; Σας προκαλώ να το δοκιμάσετε και μόνοι σας.

Το επόμενο μέρος θα είναι αφιερωμένο εξαιρετικά στους troubleshooters, me cool tools και network traces!

Φιλικά

Sof

PS. Η συνεχής αλλαγή γλώσσας με κουράζει αφάνταστα! Θα αρχίσω να γράφω αποκλειστικά Ελληνικά!

Tεστ:

Ή απλά να υλοποιήσουμε ένα μηχανισμό πιστοποίησης με φόρμες (και όχι με τζιν) για να αντιστοιχίσουμε τον χρήστη σε έναν λογαριασμό του Ενεργού Καταλόγου®.

Η να πάρουμε τα πιστοποιητικά ΝΤΛΜ  από μία έμπιστη περιοχή Ενεργού Καταλόγου  και να τα μετατρέψουμε σε Κέρβεροοο!

 Share

1 Comment


Recommended Comments

Guest
Add a comment...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...