[Munich-pm] Frage zu HTTP, NTLM, LDAP

Harald Jörg Harald.Joerg at arcor.de
Do Okt 4 11:05:17 PDT 2012


Hallo Marek,

Du schreibst:

> ich habe heute mal eine Frage zum Thema Authenti(fi|)zierung?
> folgendes Szenario: Ich moechte einen einfachen Perl-basierten
> HTTP-Server bereitstellen (HTTP::Deamon?  oder gibt?s was besseres?),

Für "einfach" gibt's HTTP::Server::Simple.  Dem muss man
threading/forking beibringen, aber das ist bei HTTP::Daemon genauso.

> welcher allerdings eine halbwegs sichere Zugriffsbeschraenkung haben
> sollte. Da wir hier alle Win-Kisten haben, und den InternetExplorer
> benutzen ?duerfen?, habe ich an NTLM gedacht? etwa so:
>
>   * der HTTP-Server besteht auf NTLM (erste Response:
>   * der Client antwortet mit z.B. ?Authorization: NTLM
>     TlRMTVNTUAABAAAAB4IIogAAAAAAAAAAAAAAAAAAAAAGAbEdAAAADw==?
>     -- soweit bin ich schon gekommen, nun aber fehlt mir foldendes --
>   * der Server interpretiert diese Response, und checkt die
>     Credentials gegen LDAP(?), Samba, ?  wie auch immer, jedenfalls
>     gegen die zentrale User-DB

Tja, wie dieses Protokoll in der reinen Windows-Welt funktioniert, weiß
ich nicht.  Ich würde aber eher gegen LDAP oder Samba wetten.

Ich habe mal ein bisschen in Apache2::AuthenNTLM (sponsored by Siemens!)
geblättert, das ist ein Perl-Modul, der sich in einen Apache HTTPD
einklinken läßt, um NTLM-Authentisierung zu machen.  Der ist sieben
Jahre alt, sieht recht gruselig aus und "bedient" sich tatsächlich einer
Samba-Authentisierung beim Domain Controller (via Authen::Smb).  Ob und
wie man den sinnvoll in einen eigenen HTTP-Server einhängen kann, traue
ich mich nicht zu bewerten.

>   * der Server schickt im OK-Fall den angeforderten Inhalt, ansonsten eine
>     hoefliche Ablehnung ;-)
>  
> Hat jemand von Euch einen Hinweis, wo ich mich weiter durchkaempfen kann?
> Das Prinzip ist hier einigermassen erklaert: http://search.cpan.org/~bobtfish/
> Authen-NTLM-HTTP-0.33/lib/Authen/NTLM/HTTP.pm
> ? aber so ganz blicke ich noch nicht durch?

Dein Link beschreibt die Sache ja auch nur zwischen dem Client und dem
Webserver und nicht den Teil, der zwischen Webserver und DC abläuft.
Das Protokoll ist ja inwischen veröffentlicht
(http://msdn.microsoft.com/en-us/library/cc236621), aber auch da habe
ich nur den Teil zwischen dem Client und dem Server gefunden :(

Ich gebe ja zu, dass ich NTLM nicht mag (da bin ich mir übrigens auch
mit Microsoft einig).  Wenn Du also lieber einen ganz anderen, aber auch
nicht ganz einfachen Kampf führen willst, könntest Du die
Negotiate-Authentisierung mit Kerberos verwenden.  Das klappt auch in
einer reinen Windows-Welt, und da kenne ich mich technisch einigermaßen
aus.  Ich habe sogar mal den Server-Teil, den Du brauchst,
programmiert... allerdings in C, und für BS2000 mit ISO-TSAP (RFC 1006).

Mit Kerberos geht das im Prinzip so: Der HTTP-Server verlangt
"Negotiate" (RFC 4559), der Client (IE, Firefox, libwww-perl) kann das
und fordert beim Domain Controller ein Ticket an.  Das schickt er dem
Server, und der kann es ohne eigene Kommunikation mit dem DC auswerten.
Wenn Du Interesse hast, schicke ich längliche Details :)
--
Cheers,
haj


Mehr Informationen über die Mailingliste Munich-pm