XAMPP + LDAP über SSL

Alles, was PHP betrifft, kann hier besprochen werden.

XAMPP + LDAP über SSL

Postby Leeloo5E » 26. October 2006 14:54

Hallo an alle,

ich verwende u.a. XAMPP für Linux. Nun möchte ich mich per LDAP authentifizieren. Jedoch soll das ganze über SSL laufen. XAMPP bringt doch schon ein SSL-Zertifikat mit. Wird dies auch automatisch von PHP genutzt, wenn ich versuche eben ein ldap-connect mit ldaps:// auszuführen oder muss ich dieses Zertifikat noch in /php5/cert kopieren? Das Problem hierbei wäre, dass es dieses Verzeichnis im XAMPP nicht gibt.

Hat jemand eine Idee?

Gruß,
Leeloo5E
Leeloo5E
 
Posts: 37
Joined: 16. April 2006 16:55

neues Zertifikat in XAMPP einspielen

Postby Leeloo5E » 27. October 2006 09:29

Ich formuliere mal um. LDAP akzeptiert das Zertifikat von XAMPP nämlich nicht. Es ist nämlich selbstzertifiziert. Also muss ich dieses Zertifikat austauschen. Die Frage ist: WIE?
Gibts da ne Doku zu?
Wär schön, wenn mir jemand einen Tipp dazu geben könnte.

Vielen Dank.
Gruß,
Leeloo5E
Leeloo5E
 
Posts: 37
Joined: 16. April 2006 16:55

Postby Wiedmann » 27. October 2006 11:05

Wird dies auch automatisch von PHP genutzt,

Du redest von einem PHP-Script das nicht tut?

Dann solltest du natürlich einen Beispielcode samt Fehlermeldungen (!) posten, damit wir wissen um was es überhaupt geht.
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby Leeloo5E » 27. October 2006 11:43

Das PHP-Skript tut und ist völlig in Ordnung - ohne SSL. Mit SSL kommt jedoch kein Bind zu stande. Das error_log des Apache zeigt mir folgende Meldungen:
ldap_create
ldap_url_parse_ext(ldaps://10.12.6.1)
ldap_bind_s
ldap_simple_bind_s
ldap_sasl_bind_s
ldap_sasl_bind
ldap_send_initial_request
ldap_new_connection
ldap_int_open_connection
ldap_connect_to_host: TCP 10.12.6.1:636
ldap_new_socket: 2464
ldap_prepare_socket: 2464
ldap_connect_to_host: Trying 10.12.6.1:636
ldap_connect_timeout: fd: 2464 tm: -1 async: 0
ldap_ndelay_on: 2464
ldap_ndelay_off: 2464
TLS trace: SSL_connect:before/connect initialization
TLS trace: SSL_connect:SSLv2/v3 write client hello A
TLS trace: SSL_connect:SSLv3 read server hello A
TLS certificate verification: depth: 1, err: 19, subject: /OU=Organizational CA/O=Organisatoin, issuer: /OU=Organizational CA/O=Organisation
TLS certificate verification: Error, self signed certificate in certificate chain
TLS trace: SSL3 alert write:fatal:unknown CA
TLS trace: SSL_connect:error in SSLv3 read server certificate B
TLS trace: SSL_connect:error in SSLv3 read server certificate B
TLS: can't connect.
ldap_err2string


Ich mache ein normales ldap_connect (mit ldaps und auch wahlweise mit port 636) und danach ein ldap_bind und letzteres schlägt fehl.

Ich vermute also, dass ich in den Apachen ein ordentliches SSL-Zertifikat einspielen muss. Nur wie? Damit hab ich noch überhaupt keine Erfahrung.

Reicht es einfach das Zertifikat in den Ordner xampp/apache/conf/ssl.crt einzuspielen? Soll ich dieses noch in server umbenennen und den Apachen dann neu starten?
Leeloo5E
 
Posts: 37
Joined: 16. April 2006 16:55

Postby Wiedmann » 27. October 2006 12:36

Das error_log des Apache zeigt mir folgende Meldungen:

Wieso stehen bei dir dir PHP-Fehlermeldungen im Log vom Apache? (Wobei PHP Meldungen aber anders aussehen)

Ich mache ein normales ldap_connect (mit ldaps und auch wahlweise mit port 636) und danach ein ldap_bind und letzteres schlägt fehl.

Und warum schlägt es fehl? Aktiviere doch mal ein gescheites error_reporting und lass dir Fehler auch anzeigen.

Und dann nocheinmal die Frage nach dem Code den du in den Zeilen fürs Connect und Bind im PHP-Script benutzt-
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby Leeloo5E » 27. October 2006 13:29

Hallo,

es geht hier nicht direkt ums PHP, sondern eben um den Apachen, deshalb habe ich die Meldungen im error_log gepostet und hoffte, die könnten weiterhelfen. Die Fehlermeldung vom PHP-Skript sagt mir auch nix anderes als die vom error_log des Apachen.

Also hier mal mein verkürzter Code:

Code: Select all
//macht, dass im error_log die obigen Ausgaben kommen
ldap_set_option(NULL, LDAP_OPT_DEBUG_LEVEL, 7);

//connect to LDAP-Server - läuft super durch
$ldap_conn = ldap_connect($LDAP_Server, $port);

//wenn das erfolgreich war:
if ($ldap_conn) {

echo "ldap_connection successfull <br/>";

//Bindung des Users - user besteht aus cn, ou und o
$ldap_bind_user = ldap_bind($ldap_conn, $user, $password);

//Schlägt mit SSL fehl
if (!$ldap_bind_user) {
   echo "ldap_bind_user not successfull <br/>";
}
}


Über den Inhalt der Variablen braucht sich kein Kopf zu machen. Ohne SSL klappts nämlich. An dem Code kann man eigentlich nix besonderes sehen.

Und hier die PHP-Fehlermeldung:
Warning: ldap_bind() [function.ldap-bind]: Unable to bind to server: Can't contact LDAP server in testLDAP.php on line 36.


Und nun?
Leeloo5E
 
Posts: 37
Joined: 16. April 2006 16:55

Postby Wiedmann » 27. October 2006 14:21

Code: Select all
ldap_set_option(NULL, LDAP_OPT_DEBUG_LEVEL, 7);

Ich schätze mal dadurch kommen die EInträge im error_log?

Code: Select all
$ldap_conn = ldap_connect($LDAP_Server, $port);

Da kann ich natürlich nur spekulieren ob dir Vars (Servername und Port den dein LDAP für SSL benutzt) jetzt stimmen...

Grudsätzlich sollte das ale IMHO erstmal so aussehen:
Code: Select all
<?php
$LDAP_Server = 'ldaps://ldap.example.com';
$port = 636;
$user ='foo';
$password = 'bar';

$ldap_conn = ldap_connect($LDAP_Server, $port);
ldap_set_option($ldap_conn, LDAP_OPT_PROTOCOL_VERSION, 3);

$ldap_bind_user = ldap_bind($ldap_conn, $user, $password);
?>

So tut es jedendfalls bei mir (aber kein Linux). Kannst ja mal mit dieser simplen Datei testen.
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby Leeloo5E » 27. October 2006 14:53

Wiedmann wrote:
Code: Select all
ldap_set_option(NULL, LDAP_OPT_DEBUG_LEVEL, 7);

Ich schätze mal dadurch kommen die EInträge im error_log?


Ja klar.

Wiedmann wrote:
Code: Select all
$ldap_conn = ldap_connect($LDAP_Server, $port);

Da kann ich natürlich nur spekulieren ob dir Vars (Servername und Port den dein LDAP für SSL benutzt) jetzt stimmen...

Die sind in Ordnung

Wiedmann wrote:Grudsätzlich sollte das ale IMHO erstmal so aussehen:
Code: Select all
<?php
$LDAP_Server = 'ldaps://ldap.example.com';
$port = 636;
$user ='foo';
$password = 'bar';

$ldap_conn = ldap_connect($LDAP_Server, $port);
ldap_set_option($ldap_conn, LDAP_OPT_PROTOCOL_VERSION, 3);

$ldap_bind_user = ldap_bind($ldap_conn, $user, $password);
?>

So tut es jedendfalls bei mir (aber kein Linux). Kannst ja mal mit dieser simplen Datei testen.


Tjo, selber Fehler:
Warning: ldap_bind() [function.ldap-bind]: Unable to bind to server: Can't contact LDAP server in test.php


Aber diesmal ist das error_log nicht sehr ausführlich:
ldap_create
ldap_url_parse_ext(ldaps://ldap.example.com)
ldap_bind_s
ldap_simple_bind_s
ldap_sasl_bind_s
ldap_sasl_bind
ldap_send_initial_request
ldap_new_connection
ldap_int_open_connection
ldap_connect_to_host: TCP ldap.example.com:636
ldap_err2string


Im Moment sitze an einer Windows-Maschine und teste das. Funktionieren sollte es dann natürlich auch unter Linux. Muss mir das erstmal installieren. Da geht dann wieder nen halber Tach oder so druff ... *grmpf* Aber das Wochende ist ja auch noch da ;)
Leeloo5E
 
Posts: 37
Joined: 16. April 2006 16:55

Postby Wiedmann » 27. October 2006 14:56

Tjo, selber Fehler:

Nein, es steht ein anderer Zielserver im Log.

Den Servername, Port, User und Passwort von dem DemoScript, musst du natürlich schon genau auf deinen Server und wie der Konfiguriert ist abändern.
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby Leeloo5E » 27. October 2006 15:12

Ändert trotzdem nix an der PHP-Fehlermeldung und auch nix am error_log vom Apachen ...
Leeloo5E
 
Posts: 37
Joined: 16. April 2006 16:55

Postby Wiedmann » 27. October 2006 15:17

Läuft den ein LDAP-Server auf diesem Server mit diesem Port und wird auch nicht durch eine FW geblockt?
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby Leeloo5E » 27. October 2006 15:23

Wiedmann wrote:Läuft den ein LDAP-Server auf diesem Server mit diesem Port und wird auch nicht durch eine FW geblockt?


Ja, Ja, Ja.

Die Verbindung kommt doch zu stande. Nur das Bind schlägt fehl. Außerdem müsste es in deinem Codebeispiel der Wert für $user eher so aussehen:
Code: Select all
cn=foo,ou=xyz,o=org


Weiterhin sollte auch ein anonymes Bind funktionieren mit
Code: Select all
ldap_bind($ldap_conn);


Aber alles geht net. Außer ich lasse ldaps:// weg. Ohne Verschlüsselung gehts ja.
Leeloo5E
 
Posts: 37
Joined: 16. April 2006 16:55

Postby Wiedmann » 27. October 2006 17:05

Ja, Ja, Ja.

Das weist du woher (Telnet, nmap)?

Außerdem müsste es in deinem Codebeispiel der Wert für $user eher so aussehen: cn=foo,ou=xyz,o=org

Kommt darauf an... (Wenn du das so brauchst, dann ok)

Weiterhin sollte auch ein anonymes Bind funktionieren mit

Dann kannst es ja auch so testen, wenn dein LDAP-Server das zulässt.

Außer ich lasse ldaps:// weg. Ohne Verschlüsselung gehts ja.

Und den anderen Port natürlich...
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby Leeloo5E » 03. November 2006 16:30

Wiedmann wrote:
Ja, Ja, Ja.

Das weist du woher (Telnet, nmap)?

Von der Apache-Fehlermeldung, die behauptet das Zertifikat nicht zu akzeptieren, weil dies selbstzertifiziert ist und der Aussage des Admins.

Wiedmann wrote:
Weiterhin sollte auch ein anonymes Bind funktionieren mit

Dann kannst es ja auch so testen, wenn dein LDAP-Server das zulässt.

Hab ich ja auch: Fehler bleibt der selbe mit SSL - ohne gehts.

Wiedmann wrote:
Außer ich lasse ldaps:// weg. Ohne Verschlüsselung gehts ja.

Und den anderen Port natürlich...

Ja sicher ... Geht auch ganz ohne Port :P

Zusatz:
Entweder ich muss den Apachen mit einem gültigen Zertifikat füttern oder PHP. Denn in der Anweisung bei Novell steht auch, man müsse das Zertifikat nach /etc/php5/ kopieren bzw. dort ablegen. Allerdings gibts das ja net bei XAMPP. Also wo muss es hin?
Leeloo5E
 
Posts: 37
Joined: 16. April 2006 16:55

XAMPP + LDAPs geht immer noch nicht

Postby Leeloo5E » 13. November 2006 11:53

So, da hab ich mir mal nen frisches SUSE Linux installiert und den mitgelieferten Webserver Apache2 mit PHP aufgesetzt und mein Testskript ausprobiert. Und du glaubst es nicht, es funktioniert ... Hinten kommen die gewünschten Daten raus. Auch ein anonymes Bind funzt wunderbar. Keine Fehlermeldung alla
Warning: ldap_bind() [function.ldap-bind]: Unable to bind to server: Can't contact LDAP server


Allerdings tritt eben dieser Fehler auf, wenn ich XAMPP nutze. Der selbe Quellcode, der selbe Rechner, nur eben der XAMPP-Apache und das XAMPP-PHP. Es wurden keine weiteren Einstellungen vorgenommen. Pur wie er in Version 1.5.4 kommt.

Code: Select all
<?php
   $LDAP_Server = 'ldaps://meinldapserver';
   $port = 636;

   ldap_set_option(NULL, LDAP_OPT_DEBUG_LEVEL, 7);

   $ldap_conn = ldap_connect($LDAP_Server, $port);
   
   ldap_set_option($ldap_conn, LDAP_OPT_PROTOCOL_VERSION, 3);

   if ($ldap_conn) {
      echo "Connect erfolgreich";

      $ldap_bind_user = ldap_bind($ldap_conn);
      
      if (!$ldap_bind_user) {
                   echo "anonymer Bind nicht erfolgreich";
                }else{
                   echo "anonymer Bind erfolgreich";
               }
   }

?>


Und dann folgt folgende Fehlermeldung:
Connect erfolgreich
Warning: ldap_bind() [function.ldap-bind]: Unable to bind to server: Can't contact LDAP server in /opt/lampp/htdocs/test.php on line 33
anonymer Bind nicht erfolgreich


Fehler in XAMPP??? Was ist da los? Mein Code is i.O.. Da sollte dieser Thread eigentlich wieder in das Forum "XAMPP für Linux" zurück verschoben werden, oder?

Gruß,
Leeloo
Leeloo5E
 
Posts: 37
Joined: 16. April 2006 16:55

Next

Return to PHP

Who is online

Users browsing this forum: No registered users and 2 guests