Die NTLM-Authentifizierung in Apache 2.4 mit mod_authnz_sspi

Habe ich Schwierigkeiten erreichen eine Datei auf einem Apache-web-server von einem anderen web-server. Oder sogar aus dem gleichen web-server.

Zuerst lassen Sie mich geben Sie die Beschreibungen der beiden beteiligten Servern.

Server 1:

Windows Server 2003
Apache 2.2 32bit
PHP 5.2.10

Server 2:

Windows Server 2012 R2 Standard
Apache 2.4 64bit
PHP 5.6.5

Lesen Sie die Windows remote-Benutzer (für ein Single-Sign-on) ich benutze das Modul mod_auth_sspi auf den älteren server. Leider ist dieses Modul nicht mehr unterstützt, die in Apache 2.4
also wechselte ich zu mod_authnz_sspi. Das Lesen der user-name funktioniert gut, aber wenn ich ein PHP-script auf dem alten server eine Verbindung zu dem neuen server und eine Datei Lesen es, das Skript bekommt
abgelehnt mit HTTP-code 401 (nicht autorisiert). Bei mir lief das script auf dem neuen server, um zu versuchen und Lesen der gleichen Datei auf dem alten server funktioniert es perfekt (ich hoffe das
klingt nicht zu verwirrend. Auch Englisch ist nicht meine Muttersprache, wie Sie vielleicht erkannt haben).

Habe ich die Funktion get_headers() auf die Datei zugreifen, vereinfacht das Skript sieht wie folgt aus:

<?php
    print_r(get_headers("http://server1/test.txt", 1));
    print_r(get_headers("http://server2/test.txt", 1));
?>

test.txt ist eine leere Datei auf beiden Servern. Also erstmal das script versucht die Datei zu Lesen, auf einem server, dann die andere.
Das Ergebnis sieht auf beiden Servern identisch. Beide können eine Verbindung zum ersten server:

[0] => HTTP/1.1 200 OK
[Date] => Mon, 01 Jun 2015 13:18:56 GMT
[Server] => Apache/2.2.11 (Win32) mod_auth_sspi/1.0.4 PHP/5.2.10
[Last-Modified] => Mon, 01 Jun 2015 13:12:58 GMT
[Accept-Ranges] => bytes
[Content-Length] => 0
[Connection] => close
[Content-Type] => text/plain

Aber keine zweite:

[0] => HTTP/1.1 401 Unauthorized
[Date] => Mon, 01 Jun 2015 13:18:56 GMT
[Server] => Apache/2.4.12 (Win64) mod_authnz_sspi/0.1.0 PHP/5.6.5
[WWW-Authenticate] => Array
    (
        [0] => NTLM
        [1] => Basic realm="mycompany_proxy.loc"
    )
[Content-Length] => 381
[Connection] => close
[Content-Type] => text/html; charset=iso-8859-1

Blickte ich in die Apache access.log auf beiden Servern. In Bezug auf test.txt der alte zeigt keine Probleme:

[IP address server1] - - [01/Jun/2015:15:22:00 +0200] "GET /test.txt HTTP/1.0" 200 -
[IP address server2] - - [01/Jun/2015:15:18:56 +0200] "GET /test.txt HTTP/1.0" 200 -

Dem neuen auf der anderen Seite:

[IP address server1] - - [01/Jun/2015:15:22:00 +0200] "GET /test.txt HTTP/1.0" 401 381 "-" "-"
::1 - - [01/Jun/2015:15:18:56 +0200] "GET /test.txt HTTP/1.0" 401 381 "-" "-"

Also weder die alten server (server1) noch die neue (über localhost) auf die Datei zugreifen kann.

Wenn ich auf die test.txt vom neuen server über einen browser auf meinem Rechner (funktioniert perfekt), wird die folgende Einträge finden Sie in der log-Datei:

[Local IP address] - - [01/Jun/2015:15:47:20 +0200] "GET /test.txt HTTP/1.1" 401 381
[Local IP address] - - [01/Jun/2015:15:47:20 +0200] "GET /test.txt HTTP/1.1" 401 381
[Local IP address] - cdietzel [01/Jun/2015:15:47:20 +0200] "GET /test.txt HTTP/1.1" 200 -

mod_authnz_sspi ist das Letzte Modul geladen in httpd.conf. Für das htdocs-Verzeichnis ich habe versucht, verschiedene Einstellungen, zum Beispiel diese:

<Directory "c:/Apache24/htdocs">
    Require           all denied
    Order             allow,deny
    Allow             from all
    AllowOverride     All
    Options           None
    AuthName          "mycompany_proxy.loc"
    AuthType          SSPI
    SSPIAuth          On
    SSPIAuthoritative On
    SSPIOfferBasic    On
    SSPIOmitDomain    On
    Require           valid-user
</Directory>

Und so:

<Directory "c:/Apache24/htdocs">
    Options Indexes FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
    AuthName "mycompany_proxy.loc"
    AuthType SSPI
    SSPIAuth on
    SSPIAuthoritative on
    SSPIDomain mycompany_proxy.loc
    SSPIOmitDomain on
    SSPIOfferBasic on
    SSPIBasicPreferred on
    SSPIOfferSSPI on
    SSPIMSIE3HACK on    
    require valid-user 
</Directory>

Zusätzlich habe ich noch die Funktion apache_request_headers(), deren Ausgabe liest auf beiden Servern wie folgt:

[Host] => server1
[Connection] => keep-alive
[Cache-Control] => max-age=0
[Authorization] => NTLM TlRMTVN... [long base64 code]
[Accept] => text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
[User-Agent] => Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.81 Safari/537.36
[Accept-Encoding] => gzip, deflate, sdch
[Accept-Language] => de,de-DE;q=0.8,en;q=0.6,en-US;q=0.4

Also meiner Meinung nach eine NTLM-Authentifizierung irgendeiner Art passiert. Wenn ich aktualisieren Sie die Website, die Genehmigung Eintrag verschwindet (wahrscheinlich, weil es fertig ist).

Den Apache Dienst läuft unter einer gültigen Domäne-Benutzer (die gleichen auf beiden Servern).

Fand ich diese thread, aber ich glaube nicht, verwenden Sie eine Authentifizierungs-script auf dem alten server
also ich denke ich muss nicht mehr auf dem neuen server.

Server und meinem lokalen Rechner sind in unserem Firmen-intranet. Muss ich definieren unsere proxy (normalerweise wird der proxy ist nicht erforderlich, um Zugriff auf lokale Server) oder active directory irgendwo?

Ich fürchte, das könnte ein sehr spezielles problem, aber vielleicht können Sie mich in die richtige Richtung oder weiß, was anderes kann ich tun, um das zu finden, den Grund für die HTTP-code 401.

Jede Hilfe ist willkommen. Vielen Dank im Voraus!

BEARBEITEN 2015-06-02, 09:40 UHR

Fand ich dieses Modul, aber es nur scheint zu funktionieren für Apache 2.4 32 bit.

BEARBEITEN 2015-06-02, 09:51 UHR

Wenn ich versuche, auf die test.txt auf dem neuen server aus die alte via web-browser, bin ich aufgefordert, einen Benutzer und ein Passwort. Wenn ich dann geben Sie die gleichen Benutzer unter dem der Apache-Dienst läuft, ich kann auf die Datei zugreifen. Ein Blick in die access.log zeigt Folgendes an:

[IP address server1] - - [02/Jun/2015:09:49:23 +0200] "GET /test.txt HTTP/1.1" 401 381
[IP address server1] - apacheuser [02/Jun/2015:09:49:23 +0200] "GET /test.txt HTTP/1.1" 200 -
InformationsquelleAutor cheeZer | 2015-06-02
Schreibe einen Kommentar