Eigentlich ist HTTP Basic-Auth ja eine durchaus feine Sache. Schnell eingerichtet und für die meisten Zwecke ausreichend sicher. Aber es gibt auch Nachteile, so können viele (alle?) Browsererweiterungen von gängigen Kennwortsafes diese nicht automatisch ausfüllen. Schlimmer noch, in vielen Browsern verhindert der Anmeldedialog, dass ich überhaupt an meinen Kennwortsafe herankomme (zumindest wenn diese als Browsererweiterung implementiert ist), weil das Fenster den Fokus hat und auch nicht abgeben mag. Also Anmeldevorgang abbrechen, Zugangsdaten raussuchen, neu versuchen. Nervt. Bliebe noch ein Benutzername und Kennwort die man sich merken kann, auch nicht schön.
Schön wäre SSO (und nicht nur, weil es insbesondere komfortabler ist, als das oben geschilderte Szenario). Viele Dienste für Kennwortsafes bieten SAML-IdP (Identity Provider) von Haus aus gleich mit an und wenn man sowas nicht hat, ein IdP ist z.B. mit simplesamlphp
auch recht schnell selbst aufgesetzt. Aber wie bringt man das jetzt Apache bei?
Hier hilft mod_auth_mellon
(https://github.com/latchset/mod_auth_mellon).
Eine regelmäßige Änderung von Kennwörtern ist unter gängigen Betriebssystemen kein Problem. Aber da gibt es ja auch noch SSH-Keys um sich an Servern anzumelden. Auch ein SSH-Key kann natürlich mit einem Kennwort geschützt werden. Der Server an dem man sich damit anmeldet kann aber weder prüfen ob der Key mit einem Kennwort geschützt ist, noch wann dieses gesetzt wurde. Es mag eine Spitzfindigkeit sein, aber gerade die machen ja oft besonders Spaß. In vielen Dokumenten zum Datenschutz wird eine regelmäßige Änderung von Kennwörtern gefordert, ist das bei einem SSH-Key der Fall? Und wie stellt der Admin das sicher?
Wo ich schonmal dabei war an den SSL-Zertifikaten zu schrauben habe ich gleich noch HSTS angeknipst. HSTS zwingt den Browser, für eine gewisse Zeit, nur noch HTTPS-Verbindungen zu einem Server/einer Domain herzustellen und verhindert so bestimmte Formen von Man-in-the-middle-Angriffen.
Ich weiß nicht, wie oft ich schon Mails von Bloglesern erhalten habe, mein SSL-Zertifikat sei abgelaufen und ich sollte es doch endlich mal erneuern. Nicht dass mir mein Monitoring das nicht rechtzeitig gesagt hätte, auch https://startssl.com hat mir immer rechtzeitig eine entsprechende Info geschickt. Aber Zertifikatupdates sind einfach umständlich und doof.
Um so erfreuter war ich, als https://letsencrypt.org sich anschickte hier Abhilfe zu schaffen. Doch der Betatest brachte einige Ernüchterung. Der Standard-Client brachte nicht nur zahlreiche Dependencies und damit überraschend viel Komplexität mit sich, er wollte außerdem auf genau den Ports laufen, die mein Webserver belegt. Das manuelle Verfahren, welches zumindest die letztgenannte Einschränkung nicht mit sich brachte war leider nicht sauber automatisierbar, da es ständig irgendwelche Rückfragen stellte.
Abhilfe schaffte hier [[https://github.com/lukas2511/letsencrypt.sh|letsencrypt.sh]]. Es benötigt lediglich sed
und curl
, beides ist sowieso installiert. Das eigentliche Script ist in Bash geschrieben und deutlich überschaubarer als der letsencrypt-Standard-Client. Der einzige Nachteil, die Apache-Konfiguration muss ich weiterhin selbst übernehmen, doch das hatte der letsencrypt-Client auch nicht sauber hinbekommen.