/ scripts

Mehr für Selbermacher

Eines der (wenigen) Dinge, die ich von meinem Studium mitgenommen habe ist: Was mehr als zwei mal getan werden muss, sollte automatisiert werden. Und damit geht es wohl in keiner Branche so sehr darum, sich selbst abzuschaffen, wie in unserer. Nach dem automatisiertem Zertifikatsimport haben wir uns natürlich nicht zurück gelehnt und die Füße baumeln lassen, sondern die durch die weggefallenen Supportanfragen gewonnene Zeit genutzt, um munter weiter in die Tasten zu hauen. Et voilà: Jetzt ist es soweit. Es hat sich ein bisschen etwas getan hinter den Kulissen:

Zertifikate

Auflisten

Wie bei Domains auch gibt es nun ein Skript, das euch eure aufgeschalteten Zertifikate anzeigt. Und das ist ganz schön gesprächig und kann damit hoffentlich beim Debugging helfen. Denn auch wenn die Supportanfragen zu Zertifikaten deutlich zurück gegangen sind, ist dieses Gebiet für viele verständlicherweise Raketenwissenschaft. So kann ein Aufruf aussehen:

[wiebke@amnesia ~]$ uberspace-list-certificates 
common name: wiebke.org
issuer: Let's Encrypt Authority X1
valid until: 2016-04-24 15:18:00 CEST
will be removed in 85 days.
alternative name: www.wiebke.org
alternative name: blog.wiebke.org
alternative name: wiebke.com
alternative name: www.wiebke.com
alternative name: blog.wiebke.com

common name: wiebke.com
issuer: StartCom Certification Authority
valid until: 2017-01-02 13:11:00 CEST
will be removed in 252 days.
alternative name: www.wiebke.com
alternative name: blog.wiebke.com

Die Zertifikate sind jeweils für die Domain im common name, als auch für die als alternative name angegebenen Domains gültig. Wenn mehrere Zertifikate für die gleichen Domains gültig sind, entscheidet die Reihenfolge, welches Zertifikat ausgeliefert wird.

Funfact: Im Beispielfall würde das zweite Zertifikat niemals ausgeliefert werden, da alle Domains bereits über das erste Zertifikat abgedeckt sind. Neu importierte Zertifikate kommen bei uns immer nach ganz oben auf die Liste und werden damit - wenn die Domain stimmt - zuerst ausgespielt. Das Zertifikat könnte also auch genau so gut gelöscht werden.

Manuelles Entfernen

Auch das geht inzwischen ohne Mail an den Support:

[wiebke@amnesia ~]$ uberspace-del-certificate -c wiebke.com

... und schon ist wieder Ordnung geschaffen. Den common name, der mit dem Switch -c übergeben werden muss, liefert uberspace-list-certificates.

Automatisches Entfernen

Da abgelaufene Zertifikate eh eine Warnung im Browser provozieren, entfernen wir diese nun automatisch. Also die abgelaufenen Zertifikate, nicht die Warnung. Vom Sicherheitsaspekt her macht es keinen Unterschied, ob nun mit einem abgelaufenen Zertifikat oder mit unserem vorinstallierten Zertifikat verschlüsselt wird. Und durch Warnmails, die wir zwei und eine Woche vor Ablauf eines Zertifikates versenden, bleibt noch genug Zeit, um sich zu kümmern.

Hinzufügen

In der Vergangenheit haben wir auch Zertifikate importiert, die nicht gegen das ca-bundlevon CentOS validieren (z.B. von CAcert ausgestellte oder selbst signierte Zertifikate). Mit dem Start von Let's Encrypt sind Zertifikate für jeden einfach und kostenlos verfügbar geworden, sodass wir keinen Grund mehr sehen, an dieser Praxis fest zu halten. Natürlich geht es hier nur um die Zertifikate, die in den Webserver eingebunden sind, also über HTTPS auf Port 443 ausgeliefert und in unsere Infrastruktur eingepflegt werden. Wenn ihr eigene Dienste - wie z.B. einen XMPP-Server - betreibt, könnt ihr hier natürlich weiterhin alles an Zertifikaten nutzen, was ihr mögt. Da hatten wir ja noch nie unsere Finger im Spiel und das wird auch so bleiben.

Notiz am Rande: Da das bisherige uberspace-prepare-certificate inzwischen viel mehr macht, als reine Vorbereitung, heißt es jetzt uberspace-add-certificate (ist aber weiterhin über den bisherigen Namen aufrufbar).

Debugging

Wenn es mit den Zertifikaten mal nicht so klappen sollte wie geplant, hilft cert-info weiter. Mit --help verrät es, was es alles kann (Spoiler: Eine Menge). Hier ein paar Beispiele:

[wiebke@amnesia ~]$ cert-info --file fullchain.pem --cn
wiebke.org
[wiebke@amnesia ~]$ cert-info --file fullchain.pem --alt
www.wiebke.org
blog.wiebke.org
wiebke.com
www.wiebke.com
blog.wiebke.com
[wiebke@amnesia ~]$ cert-info --file fullchain.pem --dates
valid from: 2016-01-24 15:18:00 CEST
valid until: 2016-05-05 10:59:00 CEST
[wiebke@amnesia ~]$ cert-info --file fullchain.pem --issuer
Let's Encrypt Authority X1

Das geht übrigens nicht nur für Dateien, sondern auch für Hosts:

[wiebke@amnesia ~]$ cert-info --host wiebke.org --cn
wiebke.org
[wiebke@amnesia ~]$ cert-info --host wiebke.org --dates
valid from: 2016-01-24 15:18:00 CEST
valid until: 2016-05-05 10:59:00 CEST

Ports

Ihr könnt nun eure in der Firewall geöffneten Ports - wie die Zertifikate und aufgeschalteten Domains - selbst verwalten. Das geht per uberspace-add-port, uberspace-del-port und uberspace-list-ports. Bei mehr als 10 Ports pro User und Protokoll ist aber erst mal Schluss und ihr müsst uns - wie früher - eine Mail schreiben. Hier mal ein Beispiel an Hand eines TCP-Ports:

[wiebke@amnesia ~]$ uberspace-add-port -p tcp --firewall