HTTPS-Auth mit nginx erzwingen

Um einzelne Seiten oder ganze Verzeichnisse vor den neugierigen Augen anderer zu verbergen, bietet es sich manchmal an, auf eine einfache HTTP-Authentifizierung zuzugreifen. Diese lässt sich relativ leicht und vor allem sehr schnell realisieren, bietet aber auch dementsprechend wenig Komfort und eignet sich somit weniger für öffentliche Logins, sondern eher um ein nicht öffentliches Downloadverzeichnis oder die Statistiken von Webalizer, Munin und co zu schützen. Standardmäßig läuft der Login aber über eine unsichere HTTP-Verbindung und lässt sich somit extrem leicht mit Programmen wie Wireshark auslesen. Wer bereits ein SSL-Zertifikat hat, der wünscht sich eventuell, die Authentifizierung über HTTPS zu erzwingen.

Unter nginx geht das so ganz leicht:

server {
        listen 80;
        server_name example.net;
        location / {
                rewrite     ^(.*)   https://login.example.net$1 permanent;
        }
}
 
server {
        listen 443 ssl;
        server_name login.example.net;
 
        root /srv/www/login.example.net/;
        index index.html index.htm;
 
        ssl_certificate ......;
        ssl_certificate_key ......;
 
        location / {
                try_files $uri /index.html;
                auth_basic "Restricted";
                auth_basic_user_file  htpasswd;
        }
}

Wichtig ist noch die Datei htpasswd, der Pfad muss relativ dazu zum Konfigurationsverzeichnis von nginx sein, also etwa unter /etc/nginx/htpasswd. Die Benutzer samt Passwörter erstellt man entweder mit den Apache Tools, einigen dubiosen Webservices oder ganz einfach mit einem Python-Script, dass man im HowTo von nginx findet.

Mehr Informationen zur Authentifizierung unter nginx findet man in der Dokumentation zum Modul HttpAuthBasicModule.

Kommentar hinterlassen