Der oben genannte Fehler führt dazu, dass auch der Zugriff auf die acme Challenge auf https umgeleitet wird. Sollte das aktuelle Zertifikat noch gültig sein, scheint Let’s encrypt die Challenge auch über https zu akzeptieren. Jedenfalls wurden bei uns zwei Zertifikate Ende Dezember trotz aktiviertem Force SSL aktualisiert. Auch ein manueller Refresh auf meinem Testrechner hat funktioniert. Irgendwie seltsam.
Trotzdem hier eine Anleitung, wie man den BugFix selbst einspielen kann:
Man öffnet eine ssh Verbindung zum alarmiator Server als alarmiator User.
Im folgenden wir davon ausgegangen, dass der der Proxy Manager in einem Container mit dem Namen nginxproxymanager läuft. Wenn man sich nicht sicher ist, dann kann man mit dem Befehl docker ps
sich eine Übersicht über die laufenden Container holen.
Die aktuelle force-ssl Konfig kopiert man mit dem Befehl
docker cp nginxproxymanager:/etc/nginx/conf.d/include/force-ssl.conf .
vom Container ins aktuelle Verzeichnis.
Wer mag kann eine Sicherungskopie anlegen:
cp force-ssl.conf force-ssl.conf.orig
Danach ersetzt man mit dem Texteditor seiner Wahl den Inhalt von force-ssl.conf durch folgenden Inhalt:
# Since force-ssl.conf has now moved to the server section it overrides the letsencrypt config
# which is inside a location section
# Set FORCE variable in first 2 if tests and action in the third
set $FORCE "";
if ($scheme = "http") {
set $FORCE 'H';
}
if ($request_uri !~ "^/.well-known/acme-challenge/(.*)") {
set $FORCE "${FORCE}D";
}
# If we are http and outside the letsencrypt directories redirect via 301
if ($FORCE = HD) {
return 301 https://$host$request_uri;
}
Nachdem die Änderung abgespeichert ist, kopiert man die geänderte Datei zurück in den Container:
docker cp force-ssl.conf nginxproxymanager:/etc/nginx/conf.d/include
Zur Sicherheit kann man den Inhalt von force-ssl.conf
nochmal anschauen:
docker exec nginxproxymanager cat /etc/nginx/conf.d/include/force-ssl.conf
Wenn alles passt, muss man den Container neustarten:
docker restart nginxproxymanager
Den Bugfix kann man mit folgendem Aufruf überprüfen:
wget http://<serveradresse>/.well-known/acme-challenge/test
Der Request wird immer mit 404 beantwortet. Erfolgt aber vorher KEIN Redirect 301 Moved Permanently auf https, ist der Bugfix korrekt eingespielt.
Obige Variante der force-ssl.conf
ist der Pull Request aus dem oben genannten Ticket. IMHO müsste in der RegExp auf die URL noch der Punkt escaped werden:
if ($request_uri !~ "^/\.well-known/acme-challenge/(.*)") {
Ich persönlich verwende folgende force-ssl.conf
:
set $url "${scheme}:${request_uri}";
if ($url ~ "^http:(?!/\.well-known/acme-challenge/(.*))") {
return 301 https://$host$request_uri;
}
Hoffen wir, dass es damit keine Probleme mehr gibt.
Desweiteren bleibt zu hoffen, dass der nginxproxymanager weiter entwickelt wird und das Alarmiator Team nicht noch nach einer weiteren Realisierung für SSL suchen muss.