Nginx – Deaktivieren von htpasswd für Certbot und Letsencrypt

Der Certbot, das Tool um sich kostenlose SSL Zertifikate von Lets Encrypt zu besorgen, mag es mal so gar nicht wenn eine Domain via “htpasswd “abgesichert ist. Wie man das Problem lösen kann, könnt Ihr weiter unten erfahren.

Wenn man eine Webseite mittels htpasswd „absichert“, dann kann das wie folgt aussehen:

auth_basic "Restricted";
auth_basic_user_file /var/www/example.com/.htpasswd;

Problem: Certbot mag das gar nicht, wenn man versucht hiermit ein Letsencrypt Zertifikat neu zu erstellen bzw. zu aktualisieren. Die einfachste Lösung ist es, die Regel für das Verzeichnis zu deaktivieren, welches vom Acme Client standardmäßig verwendet wird:

  • /.well-known/ bzw.
  • https://example.com/.well-known/acme-challenge/

Die Regel ist simpel:

location ^~ /.well-known/ {
    auth_basic off;
}

Noch schnell ein Nginx reload hinterhergeschoben und schon klappt es mit dem Zertifikat.

Noch vollständigkeitshalber der Certbot Fehler, auf den man stößt wenn die Seite via htaccess/htpasswd abgesichert ist:

Failed authorization procedure. example.com (http-01): urn:ietf:params:acme:error:unauthorized :: The client lacks sufficient authorization :: Invalid response from https://example.com/.well-known/acme-challenge/xxxxxxxxxxxxxxxxxxxxx [xxx.xxx.xxx.xxx]: "<html>\r\n<head><title>401 Authorization Required</title></head>\r\n<body bgcolor=\"white\">\r\n<center><h1>401 Authorization Required</"

IMPORTANT NOTES:
 - The following errors were reported by the server:

   Domain: example.com
   Type:   unauthorized
   Detail: Invalid response from
   https://example.com/.well-known/acme-challenge/xxxxxxxxxxxxxxxxxxxxx
   [xxx.xxx.xxx.xxx]: "<html>\r\n<head><title>401 Authorization
   Required</title></head>\r\n<body
   bgcolor=\"white\">\r\n<center><h1>401 Authorization Required</"

   To fix these errors, please make sure that your domain name was
   entered correctly and the DNS A/AAAA record(s) for that domain
   contain(s) the right IP address.