Let's Encrypt und Basic-Auth
Wie man mit Let’s Encrypt ganz einfach an SSL-Zertifikate kommt, hatte ich bereits vor mehr als einem Jahr geschildert - mittlerweile übrigens ganz einfach, denn in Debian stretch ist der Let’s Encrypt-Client (der jetzt certbot heißt) nativ dabei und bringt jetzt auch einen fertigen Cronjob mit.
Aber darum soll es heute gar nicht gehen, sondern vielmehr um die Frage, wie man Let’s Encrypt verwenden kann, wenn die entsprechende Webpräsenz mit einem einfachen Passwortschutz - der basic access authentication oder kurz Basic-Auth - versehen ist. Jeder kennt vermutlich das Popup, das nach Benutzerkennung und Passwort fragt; eine nicht sehr elegante, aber dafür mit praktisch keinem Aufwand verbundene Lösung, die zudem alle Dateien in allen Verzeichnissen der Präsenz schützt, nicht nur Scripts, sondern auch - bspw. - Bilder.
Eleganter ist natürlich eine ordentliche Session-Verwaltung mit Login- und Logout-Funktion; aber manchmal soll eben nur die private Bildergalerie oder eine “fertige” Applikation geschützt werden, die von Haus aus keinen Passwortschutz mitbringt. Ein schneller Eintrag in der .htaccess
-Datei oder der Serverkonfiguration im passenden virtual host, und schon ist alles (ein wenig) gesichert:
AuthUserFile /home/USER/.htpasswd
AuthName 'Privater Bereich'
AuthType Basic
Require valid-user
Nur wirkt dieser Schutz eben auch gegen Let’s Encrypt, das durch den Aufruf einer temporär erzeugten Datei im Verzeichnis http://domain.example/.well-known/
überprüft, ob der Antragsteller wirklich die Kontrolle über den entsprechenden Host hat. Dieser Aufruf schlägt fehl, wenn ein Passwort erforderlich ist. Natürlich könnte man jetzt jedes Mal, wenn das Zertifikat zu erneuern ist, den Passwortschutz kurzzeitig deaktivieren, aber das ist weder praktikabel (schließlich gelten die Zertifikate nur wenige Monate und sollen selbständig erneuert werden) noch sicher (was ist, wenn gerade in diesem Moment jemand die geschützte Webseite aufgerufen hat?).
Die Lösung ist aber hinreichend einfach: es genügt, das Vezeichnis /.well-known
vom Passwortschutz auszunehmen. Und das funktioniert mit folgenden Zeilen im virtual host (Apache 2.4):
<Location /.well-known>
Require all granted
</Location>
Nach einem service apache2 reload
(oder dem Äquivalent des jeweiligen Systems) arbeitet Let’s Encrypt wieder so, wie es soll, und der Rest der Webpräsenz ist weiterhin passwortgeschützt.
Kommentare
Ansicht der Kommentare: Linear | Verschachtelt