Warum einen APR1-MD5-Hash online erzeugen?
Die HTTP-Basic-Authentifizierung ist nach wie vor der schnellste Weg, einen Administrationsbereich, eine Staging-Umgebung oder ein internes Dashboard abzuriegeln. Sie stützt sich auf eine .htpasswd-Datei, in der jede Zeile einen Benutzernamen mit einem gehashten Passwort verbindet - nie mit einem Klartextpasswort.
Der Haken: Für diesen Hash braucht man normalerweise den Befehl htpasswd, also das Paket apache2-utils unter Debian oder httpd-tools unter RHEL. Auf einem Windows-Arbeitsplatz, im Shared Hosting oder in einer Weboberfläche fehlt dieser Befehl häufig.
Drei Situationen, in denen dieser Generator hilft:
- Eine Staging-Umgebung schützen → Den Zugang zu einer Testumgebung schließen, bevor Google sie indexiert
- Ein Konto ohne SSH-Zugang anlegen → Die Zeile im Browser erzeugen und über den Dateimanager des Hosters einfügen
- Eine Konfiguration migrieren → Eine verlorene
.htpasswd-Datei aus den bekannten Zugangsdaten wiederherstellen
So nutzen Sie den Generator in 3 Schritten
Schritt 1: Benutzername und Passwort eingeben
Tragen Sie den Kontonamen und das Passwort ein. Das Feld ist standardmäßig verborgen; klicken Sie auf das Auge-Symbol, um Ihre Eingabe vor dem Absenden zu prüfen.
Schritt 2: Das Salt erzeugen lassen
In nahezu allen Fällen lassen Sie das Salt-Feld leer: Serverseitig wird ein zufälliges Salt aus 8 Zeichen gezogen. Füllen Sie es nur aus, um einen bestehenden Hash exakt zu reproduzieren.
Schritt 3: Die Zeile kopieren
Zwei Ergebnisse werden angezeigt: der Hash allein und die vollständige .htpasswd-Zeile. Kopieren Sie letztere, fügen Sie sie in Ihre Datei ein und laden Sie die Serverkonfiguration neu.
Aufbau einer .htpasswd-Zeile
Eine Zeile besteht aus zwei durch einen Doppelpunkt getrennten Feldern:
admin:$apr1$Xq7nD2mR$5CqLZ.k1qLkOvVQ0uZ9Yl.
Das zweite Feld zerfällt seinerseits in drei durch $ getrennte Teile:
| Teil | Beispiel | Funktion |
|---|---|---|
| Algorithmus-Kennung | apr1 | Sagt dem Server, dass es sich um das gesalzene MD5 von Apache handelt |
| Salt | Xq7nD2mR | 8 zufällige Zeichen, im Klartext in der Datei gespeichert |
| Digest | 5CqLZ.k1qLkOvVQ0uZ9Yl. | 22 Zeichen, das Ergebnis der 1.000 Iterationen |
Das Salt ist kein Geheimnis: Es steht lesbar in der Datei. Seine Aufgabe ist es, vorberechnete Tabellen (Rainbow Tables) unbrauchbar zu machen und dafür zu sorgen, dass zwei Konten mit demselben Passwort nicht denselben Digest bekommen.
Was der $apr1$-Algorithmus tatsächlich tut
APR1-MD5 ist kein einfaches md5(Passwort + Salt). Es verkettet mehrere Schritte:
- Zwei Ausgangs-Digests - einen über
Passwort + $apr1$ + Salt, den anderen überPasswort + Salt + Passwort - Eine längenabhängige Mischung - Bruchstücke des zweiten Digests fließen Byte für Byte in den ersten zurück
- 1.000 Iterationen - in jeder Runde werden Passwort, Salt und vorheriger Digest nach einem Muster neu kombiniert, das von der Rundennummer abhängt
- Eine crypt-Base64-Kodierung - die letzten 16 Bytes werden in verschränkter Reihenfolge gelesen und über dem Alphabet
./0-9A-Za-zkodiert
Genau diese 1.000 Iterationen machen den Unterschied zu einem nackten MD5: Sie vertausendfachen die Kosten eines einzelnen Versuchs und bremsen einen Wörterbuchangriff im selben Maß aus.
Ein Verzeichnis mit Apache schützen
1. Die Datei anlegen
Legen Sie Ihre .htpasswd-Datei außerhalb des Web-Roots ab, damit sie niemals über HTTP ausgeliefert wird:
/var/www/secrets/.htpasswd
2. Den Schutz deklarieren
In der .htaccess des zu schützenden Verzeichnisses oder im <Directory>-Block Ihres VirtualHosts:
AuthType Basic
AuthName "Geschuetzter Bereich"
AuthUserFile /var/www/secrets/.htpasswd
Require valid-user
3. Die Konfiguration neu laden
sudo apachectl configtest && sudo systemctl reload apache2
Bei nginx wird dasselbe Dateipaar so deklariert:
location /admin/ {
auth_basic "Geschuetzter Bereich";
auth_basic_user_file /var/www/secrets/.htpasswd;
}
APR1-MD5 im Vergleich zu den anderen .htpasswd-Formaten
| Format | Präfix | Rechenaufwand | Urteil |
|---|---|---|---|
| bcrypt | $2y$ | Einstellbar (Kostenfaktor) | Empfohlen für jedes neue Projekt |
| APR1-MD5 | $apr1$ | 1.000 MD5-Iterationen | Vertretbar, maximale Kompatibilität |
| SHA-1 | {SHA} | 1 Iteration, ohne Salt | Meiden: kein Salt, per Tabelle knackbar |
| crypt() DES | keines | 25 Iterationen, nach 8 Zeichen abgeschnitten | Veraltet, nicht mehr verwenden |
Kurz gesagt: Akzeptiert Ihr Server bcrypt (htpasswd -B), nehmen Sie bcrypt. APR1-MD5 ist die beste verbleibende Wahl, wenn bcrypt nicht verfügbar ist - und es ist ungleich besser als ein {SHA} ohne Salt.
Den Hash auf der Kommandozeile prüfen
Bei gleichem Salt liefert dieses Werkzeug exakt dasselbe wie die Systemwerkzeuge:
# Mit htpasswd (Paket apache2-utils / httpd-tools)
htpasswd -nbm admin meinPasswort
# Mit OpenSSL, mit vorgegebenem Salt
openssl passwd -apr1 -salt Xq7nD2mR meinPasswort
Das zweite Beispiel dient zugleich als Gegenprobe: Tragen Sie dasselbe Salt im Formular ein, muss exakt dieselbe Zeichenkette herauskommen.
Um zu prüfen, ob ein Passwort zu einer bestehenden Zeile passt, lesen Sie das Salt aus dem gespeicherten Hash und wiederholen die Berechnung mit diesem Salt.
FAQ - Häufige Fragen
F: Was ist das $apr1$-Format?
A: Es ist das historische Passwortformat von Apache, auch APR1-MD5 genannt. Es wendet 1.000 MD5-Iterationen auf das Passwort und ein 8-stelliges Salt an und kodiert das Ergebnis im Base64-Alphabet von crypt. Das Präfix $apr1$ dient als Algorithmus-Kennung.
F: Ist APR1-MD5 noch sicher?
A: Es ist deutlich robuster als ein nacktes MD5, bleibt für einen Angreifer mit GPUs aber schnell berechenbar. Für neue Projekte greifen Sie besser zu bcrypt über htpasswd -B. APR1-MD5 behält seinen Wert, wo Kompatibilität vorgeht: ältere Apache-Versionen, nginx ohne bcrypt-Unterstützung, Netzwerk-Appliances.
F: Funktioniert dieser Hash mit nginx?
A: Ja. Das nginx-Modul ngx_http_auth_basic_module liest das Apache-Format, $apr1$ eingeschlossen. Die erzeugte Zeile lässt sich unverändert mit auth_basic_user_file verwenden.
F: Warum erhalte ich jedes Mal einen anderen Hash?
A: Bei jeder Erzeugung wird ein neues Zufalls-Salt gezogen. Beide Hashes sind für dasselbe Passwort gültig: Bei der Prüfung liest der Server das im Hash gespeicherte Salt und rechnet erneut. Füllen Sie das Salt-Feld aus, wenn Sie ein reproduzierbares Ergebnis wollen.
F: Wird das Passwort irgendwo gespeichert?
A: Nein. Es wandert für die Dauer der Berechnung per HTTPS zur CaptainDNS-API und wird danach verworfen. Keine Datenbank, kein Log mit dem Passwort im Klartext.
F: Sind Umlaute oder Sonderzeichen erlaubt?
A: Ja, die Berechnung läuft über die UTF-8-Bytes des Passworts. Ein Vorbehalt: Ein alter HTTP-Client kann Nicht-ASCII-Zeichen abweichend kodieren, was die Anmeldung scheitern ließe. Im Zweifel bleiben Sie bei ASCII.
F: Wohin gehört die .htpasswd-Datei?
A: Außerhalb des Web-Roots, zum Beispiel nach /var/www/secrets/. Liegt sie in einem über HTTP ausgelieferten Verzeichnis, könnte ein Besucher sie herunterladen und die Hashes offline angreifen.
Ergänzende Werkzeuge
| Werkzeug | Nutzen |
|---|---|
| Passwortgenerator | Ein starkes Passwort ziehen, bevor Sie es hashen |
| Hash-Generator | MD5, SHA-1, SHA-256 und SHA-512 eines Textes berechnen |
| Base64-Encoder | Den Authorization-Header einer Basic-Anfrage kodieren |
| HTTP-Header-Analyse | Die Header eines geschützten Bereichs prüfen |
| HSTS-Test | Sicherstellen, dass der geschützte Zugang über HTTPS läuft |
Nützliche Ressourcen
- Apache-Dokumentation - htpasswd (Optionen des Befehls und unterstützte Formate)
- Apache-Dokumentation - Authentifizierung (Einrichtung der Basic-Authentifizierung)
- RFC 7617 - The Basic HTTP Authentication Scheme (Spezifikation des Basic-Schemas)
- RFC 1321 - MD5 (Spezifikation der MD5-Funktion)
Datenschutzversprechen
Ihr Passwort wird ausschließlich zur Berechnung des Hashs an die CaptainDNS-API übertragen, über eine verschlüsselte Verbindung. Es wird weder gespeichert noch protokolliert. Erhalten bleiben nur anonyme technische Kennzahlen (Verarbeitungsdauer, Antwortcode).