Apache, mod_authn_dbd, SHA1 und MySQL

Hi,

wie bereits im vorherigen Eintrag angekündigt, will ich euch natürlich mitteilen, wie ich den Apache dazu gebracht habe sich an einem MySQL-Server zu authentifizieren.

An sich ist das ja kein Problem, solange man sich aussuchen kann in welcher verschlüsselten Form die Passwörter in der Datenbank abgespeichert sind. Will man aber ein bereits bestehendes System nutzen kann es unter Umständen schon heikler werden. In meinem Fall lagen die Passwörter als SHA1-Hash vor.

Wie bereits erwähnt, mangelt es MySQL an Funktionen für die Base64 De-/Kodierung. Hat man diese aber nachgerüstet, lässt sich der Apache relativ einfach dazu bewegen auch SHA1 zu schlucken.

Es hat eine Weile gedauert bis ich auf diese Seite gestoßen bin, die genau erklärt, in welchem Format mod_authn_dbd die Passwörter erwartet.

Danach war es nur noch eine Kleinigkeit und herausgekommen ist:

AuthDBDUserPWQuery "SELECT CONCAT('{SHA}',BASE64_ENCODE(UNHEX(hashed_password))) AS pass FROM users WHERE login=%s"

Ich hoffe, ich konnte dem ein oder anderen ein paar Stunden Suche ersparen!

Eine Antwort auf „Apache, mod_authn_dbd, SHA1 und MySQL“

  1. Danke für die Tipps, hat mir zunächst geholfen, nur scheint etwas nicht ganz zu passen:
    Mit htpasswd und mysql (base64_encode) erhalte ich unter Umständen unterschiedliche Ergebnisse:
    htpasswd -nbs olli Mon12Mae
    olli:{SHA}YIrMKloY7OoNINS9Gabf7+nJnA0=

    concat(‚{SHA1}‘,BASE64_ENCODE(unhex(passwort)))
    {SHA1}YIrMKloY7OoNANS9Gabf7+nJnA0=

    Nach dem OoN kommt bei htpasswd ein I, im Ergebnis der mysql-Abfrage aber ein A – das Ergebnis ist also unterschiedlich und der Login funktioniert nicht. Apache+MySQL laufen unter Solaris.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.