Wie man SSL für local self hosted Services mit Kubernetes für Mac und IOS einrichtet

Wenn man lokal ein paar Services hosted, dann möchte man natürlich trotzdem SSL Verschlüsselung nutzen – zum einen um einfach die ständigen Sicherheitswarnungen vom Browser zu unterbinden, aber auch da man einfach keinem Netzwerk blind vertrauen sollte – selbst dem eigenen. In meinem Fall kam dann noch hinzu, dass manche iOS Apps zwingend nach gültigen SSL Zertifikaten verlangen.

Lokale SSL Zertifikate sind self-signed bzw. Selbst-Signiert. Normalerweise werden Zertifikate von diveresen Anbietern im Netz gegen Geld angeboten, damit diese sicherstellen, dass man auch die Person/Firma ist, die man vorgibt zu sein. In den letzten Jahren hat Let’s encrypt diese Abzocke endlich beendet und das ganze kostenlos gemacht, indem die Verifizierung automatisiert per DNS+HTTP Abfragen automatisiert werden konnte.

Alle diese Anbieter funktionieren nur, weil Betriebssysteme und Browser diesen Stellen vertrauen und damit Zertifikaten, die von diesen sogn. root certificates beglaubigt wurden, auch vertrauen . Dabei ist das root Zertifikat in der Regel unendlich lange gültig, alle Sub-Zertifikate die von dieser Stelle ausgegeben wurden sind jedoch in der Regel zeitlich begrenzt.

Dieser ganze Hokuspokus wird erstmal nur gemacht, um Vertrauen herzustellen und sicherzustellen, dass wenn ich google.com aufrufe und dort steht, dass die Verbindung gesichert ist und der Gegenstelle vertraut wird, dass dem auch so ist. Damit wird z.b. verhindert, dass ich zwar mit einer Website spreche, die behauptet google.com zu sein, aber eigentlich ein Man-in-the-middle Angreifer ist, der mich verdeckt auf einen anderen Server geleitet hat.

Denn unabhängig vom Vertrauen kann man natürlich die Verbindung mit den Zertifikaten verschlüsseln, nur bringt das eben nicht viel wenn ich nicht weiß, ob mein Gegenüber das richtige Gegenüber ist.

Das erstmal zu den Grundlagen.

Das Vorgehen für lokale Self-Signed Zertifikate ist etwas anders: Zunächst erstellen wir uns eine CA, also eine eigene Ausgabestelle für Zertifikate. Anschließend müssen wir diese CA auf allen unseren Geräten hinterlegen und ihr das Vertrauen aussprechen. Ab diesem Moment können wir damit neue Unterzertifikate erstellen, denen dann auf allen diesen Geräten automatisch auch vertraut wird und eine SSL Verbindung zustande kommt.

In meinem Fall wollte ich das ganze so einfach wie möglich halten und habe mich daher für ein Lokales Wildcard Zertifikat (*.bytelude.intern) entschieden.

Die Schritte dafür sind folgende:

Zertifikate erstellen

1. CA Key und Cert anlegen (bitte ein sicheres Passwort verwenden, wenn danach gefragt wird und dieses sicher hinterlegen!):

openssl genpkey -algorithm RSA -aes128 -out private-ca.key -outform PEM -pkeyopt rsa_keygen_bits:2048
openssl req -x509 -new -nodes -sha256 -days 3650 -key private-ca.key -out self-signed-ca-cert.crt

2. Key und Certificate Request für das Bytelude Unterzertifikat anlegen

openssl genpkey -algorithm RSA -out bytelude.key -outform PEM -pkeyopt rsa_keygen_bits:2048
openssl req -new -key bytelude.key -out bytelude.csr

3. Config für das Bytelude Unterzertifikat anlegen. Inhalt der Datei bytelude.ext:

authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1 = *.bytelude.intern
# Optionally add IP if you're not using DNS names:
IP.1 = 192.168.1.3

Sowohl für den DNS als auch den IP Eintrag könnt ihr mehrere Einträge mit fortlaufender Nummer machen.

4. Bytelude Unterzertifikat erzeugen

openssl x509 -req -in bytelude.csr -CA self-signed-ca-cert.crt -CAkey private-ca.key -CAcreateserial -out bytelude.crt -days 365 -sha256 -extfile bytelude.ext

Dieses letzte Zertifikat ist nun das konkrete Zertifikat, welches ihr z.B. im Webserver hinterlegt. Dieses ist in diesem Beispiel ein Jahr lang gültig und muss dann erneuert werden – dafür reicht dieser letzte Befehl aus, sofern die restlichen Dateien noch da sind.

Die Datei “self-signed-ca-cert.crt” ist das Zertifikat, welches ihr auf euren Geräten hinterlegen müsst.

Mac

Auf dem Mac zieht man es einfach in die Schlüsselbundverwaltung. Anschließend öffnet ihr die Informationen zu diesem Zertifikat und stellt dort das Vertrauen auf “Immer vertrauen”.

iPhone/iPad

Schickt euch das Root CA Cert (“self-signed-ca-cert.crt”) per Airdrop oder anderweitig an das entsprechende Gerät. Anschließend öffnet/installiert ihr es auf dem Gerät und geht dann in: Einstellungen, Allgemein und dann “VPN und Geräteverwaltung” und installiert dort das neue Zertifikat final.

Anschließend muss dem neu installierten Zertifikat noch das Vertrauen ausgesprochen werden, was über Einstellungen, Allgemein, Info und dann “Zertifikatsvertrauenseinstellungen” erledigt wird:

Wenn dieser Schalter aktiviert ist, dann werden ab sofort alle Zertifikate von dieser CA als vertrauenswürdig eingestuft, also auch eure Unterzertifikate.

 

Kubernetes

Als letzten Schritt muss nun noch das Unterzertifikat in eure Kubernetes Instanz eingespielt werden. Das geht über folgenden Befehl:

kubectl -n kube-system create secret tls default-ingress-cert --key=bytelude.key --cert=bytelude.crt --dry-run=client --save-config -o yaml  | kubectl apply -f -

Zusätzlich müsst ihr noch folgende Ressource in eurem Kubernetes System entweder anlegen oder editieren:

apiVersion: traefik.containo.us/v1alpha1
kind: TLSStore
metadata:
  name: default
  namespace: kube-system
spec:
  defaultCertificate:
    secretName: default-ingress-cert

In meinem Fall ist Traefik der Default Ingress, bei Nginx könnte das Vorgehen evtl abweichen.

Nachdem all das erledigt ist, muss beim jeweiligen Service nur noch der Ingress so konfiguriert werden, dass er auch TLS/SSL spricht:

---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: freshrss
  namespace: freshrss
  annotations:
    kubernetes.io/ingress.global-static-ip-name: freshrss-ip
spec:
  tls:
  - hosts:
      - freshrss.bytelude.intern
  rules:
  - host: freshrss.bytelude.intern
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: freshrss
            port:
              number: 80

Damit das funktioniert müsst ihr natürlich die entsprechende URL in eurem DNS (z.B. freshrss.bytelude.intern) hinterlegt haben. In meinem Fall habe ich in meinem Ubiquity Router einfach eine Wildcard DNS hinterlegen können, sodass alles was *.bytelude.intern ist auf die gleiche IP zeigt.

Wenn ihr nun alles richtig gemacht habt, dann sollte beim Aufruf von https://freshrss.bytelude.intern keine Sicherheits-Warnung kommen und das Schlosssymbol eures Browsers sollte auch geschlossen sein und somit eine sichere Verbindung vorhanden sein.

Wenn das eine Jahr herum ist und ihr ein neues Unterzertifikat erstellt habt, sollte ein erneutes Ausführen des Befehls

kubectl -n kube-system create secret tls default-ingress-cert --key=bytelude.key --cert=bytelude.crt --dry-run=client --save-config -o yaml | kubectl apply -f -

ausreichen, sodass ab sofort das neue Zertifikat verwendet wird. Damit sollte sich das ganze auch relativ einfach automatisieren lassen.

[Quicktip] Geteilte Fotoalben erscheinen nach iPhone-Wechsel als leer

Nachdem ich auf ein neues iPhone gewechselt bin, sind in meiner Fotos App ein paar meiner geteilten Fotoalben einfach leer geblieben. Ich glaube sogar alle waren auch von mir erstellt worden. Alles, was man sehen konnte, war das “Plus Zeichen” zum Hinzufügen von neuen Bildern, so als ob man das Album gerade erst erstellt hat. Auf allen meinen anderen Geräten mit dem gleichen iCloud Account waren sie weiterhin da.

Um das Problem (hoffentlich) zu beheben, kann man folgendes versuchen:

  • Fotos App beenden (richtig beenden, mittels Task Manager!)
  • Iphone Homescreen –> Einstellungen –> oben auf euren Namen tippen –> iCloud –> Fotos
  • “Geteilte Alben” ausschalten
  • auf den Homescreen wechseln
  • eine Minute warten
  • Iphone Homescreen –> Einstellungen –> oben auf euren Namen tippen –> iCloud –> Fotos
  • “Geteilte Alben” wieder einschalten
  • Fotos App öffnen

Die geteilten Alben sollten nun zeitnah erscheinen und zumindest bei mir waren dann auch alle wieder mit Bildern gefüllt.

MacOS Update Probleme auf Monterey mit APFS

Zu meiner Schande muss ich gestehen, dass mein privates Macbook irgendwann auf MacOS Mojave hängen geblieben ist. Ich hatte vor ein paar Monaten mal ein Upgrade auf Big Sur probiert, allerdings war der Rechner danach unbrauchbar, weil er nicht mehr gebootet hat. Nach einem ca. 8h oder so andauernden Recovery mittels Timemachine war er wieder einsatzbereit, aber mir war die Lust auf Updates vergangen.

Dieses Problem wollte ich nun endgültig mit dem Umstieg auf MacOS Monterey angehen und lösen. Also habe ich den Installer runtergeladen und wollte die Installation starten – als ich direkt die Fehlermeldung bekam, dass für die Installation ein Datenträger mit APFS notwending ist.
APFS ist ein alternatives Dateisystem, welches von Apple mit MacOS High Sierra verteilt wurde. Eigentlich sollte in Mojave der Datenträger automatisch dahin konvertiert werden (was sogar on-the-fly) gehen sollte, aber irgendwie ist das bei mir nicht passiert. Warum auch immer.

Um die Conversion nachträglich machen zu können, muss man den Mac im Recovery Modus starten, dann das Disk-Utility/Festplattendienstprogramm starten. Dort wirft man die Mac Festplatte aus, markiert sie und klickt dann auf Edit/Bearbeiten und “convert to apfs”. Anschließend wird das System umgestellt. Blöd nur, dass genau das den Fehler verursacht, dass man anschließend nicht mehr booten kann (Stichwort: “Running bless to place boot files failed”). Man könnte MacOS nach der Konvertierung nochmal drüber installieren, aber da Mojave nicht mehr installiert werden kann ging auch das nicht mehr für mich 😂

Die Lösung habe ich dann hier gefunden: https://www.tecklyfe.com/boot-failures-after-converting-macos-ssd-to-apfs/

Ich vermute mal dass das Problem irgendwie mit UEFI oder so zusammen hängt, jedenfalls muss man ein Pre-Boot Environment von Hand anlegen, damit der Bootvorgang wieder reibungslos funktioniert. Und das geht so:

  • Den Mac mit gedrückter Command+R Tastenkombi starten
  • Utilities > Terminal
  • diskutil apfs list ausführen und schauen, welche Nummer und welche UUID die Festplatte eures Macs hat – sie sollte “Macintosh HD” oder so heißen
  • Anschließend (natürlich ohne die eckige Klammer, als z.B. disk2:
    diskutil apfs addVolume disk[Festplatten-NUMMER] apfs Preboot -role B
  • Anschließend dieses Verzeichnis anlegen, wobei die xxx… durch die UUID, die ihr euch in Punkt 3 angesehen habt hier eintragt:
    mkdir -p /Volumes/Preboot/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/System/Library/CoreServices
  • cp -RP /Volumes/MACINTOSH HD/System/Library/CoreServices /Volumes/Preboot/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/System/Library/CoreServices
  • Mittels folgendem Commands repariert ihr nun den Pre-Boot-Eintrag. Ersetz hier das disk2s1, falls deine Partition eine andere Nummer hat:
    diskutil apfs updatepreboot disk2s1
  • Abschließend kannst du nun mit Bless den Boot-Eintrag setzen lassen:
    bless --folder /Volumes/MACINTOSH HD/System/Library/CoreServices --bootefi --verbose
  • Neu starten

[Quicktip] Mac OS ignoriert die Reihenfolge von Netzwerkanschlüssen und benutzt immer nur Wifi

Meine beiden Macbooks – eins mit Mojave und eins mit Big Sur – haben an meinem Schreibtisch das gleiche Problem: Wifi/Wlan wird immer bevorzugt verwendet. Ich merke das mit spontanen Aussetzern in Videokonferenzen, oder wenn ich im Netzwerk nicht mit dem gewohnten Gigabit Speed Kopieraktionen machen kann. Meine Vermutung ist, dass es mit meinem verwendeten USB-C Hub mit Netzwerkanschluss zu tun hat.

Normalerweise hat man in Mac OS die Möglichkeit, die Priorität für Netzwerkanschlüsse festzulegen und damit eigentlich genau mein Problem zu lösen:

Wie man sehen kann ist das WLAN unterhalb vom Thunderbold und eben meinem USB Gigabit Adapter angesiedelt. Und trotzdem wird es immer wieder bevorzugt verwendet.

Ich könnte das Wlan natürlich einfach abschalten, was ich auch getan habe, aber dann kann ich das Macbook nicht mehr mittels Apple Watch entsperren und Airdrop funktioniert auch nicht.

Nun bin ich auf die Idee gekommen, mit den Netzwerkumgebungen zu spielen, und siehe da, man kann sie zumindest als Workaround nutzen. Die Netzwerkumgebungen unter Mac OS sind eine Möglichkeit, dass man verschiedene IP Settings in seinem Mac speichern kann, sodass man z.B. schnell zwischen den Settings für die Arbeit und daheim wechseln kann.

Ich habe mir also zwei Netzwerkumgebungen “Schreibtisch” und “Unterwegs” angelegt. In der für mich relevanten Gruppe “Schreibtisch” belasse ich das Ethernet wie es ist. Schlaue Leute würden nun einfach den WLAN Apapter in der “Schreibtisch” Umgebung rauswerfen, allerdings deaktiviert sich dann das WLAN komplett und ich kann eben nicht meine Apple Watch zum Entsperren und Airdrop nutzen.

Also habe ich den Adapter drin gelassen, aber bei den IP Einstellungen für das Wlan folgendes gemacht:

Diese Einstellungen bewirken, dass der Mac sich zwar zu dem Wlan verbindet oder es zumindest versucht, allerdings weder eine IPv4 noch IPv6 bekommt. Aber: die Wlan Funktion bleibt aktiviert. Mit diesem “Hack” wird dauerhaft nur die Ethernet-Verbindung verwendet, aber ich habe trotzdem die Vorzüge von Airdrop und Apple-Watch Entsperrung 👌

Übrigens: sobald man Netzwerkumgebungen angelegt hat, kann man diese über einen neuen Menüpunkt im “Apfelmenü” schnell umschalten:

 

Jetzt muss ich nur noch etwas Zeit finden, damit ich per Automator-Script erkenne, ob der Ethernet-Adapter verwendet wird oder nicht und dementsprechend die Umgebung automatisch umschalte…

Ansible startet nicht mehr unter Mac OS Catalina

Beim Ausführen von Ansible Befehlen bekam ich seit kurzem immer wieder die Fehlermeldung

Abort trap: 6

angezeigt. Da ich Ansible direkt über pip installiert hatte, führte ich natürlich erstmal ein Update dort durch – was aber keine Abhilfe brachte. Irgendwie hatte das ganze mit dem Wegfall von python 2.7 mit Mac OS Catalina zu tun.

Die relativ plumpe, aber doch effektive Lösung war:

pip3 uninstall ansible
brew install ansible

🤷‍♂️😂

Nach Mac OS Catalina Update – Mail App Suchfunktion ist kaputt

Das Update auf Mac OS Catalina lief bei mir eigentlich ohne Probleme durch, aber heute fiel mir dann auf, dass die Suchfunktion in der Mail App sich sehr komisch verhielt bzw. einfach kaputt war.

Mir war natürlich gleich klar, dass der Suchindex wahrscheinlich einen Treffer hatte, da ich die App ja trotzdem normal bedienen und Mails senden/empfangen konnte.

Um das Problem zu beheben, musste ich also den Suchindex der Mail App zurücksetzen und neu aufbauen lassen. Dazu sind folgende Schritte nötig:

  1. Mail App beenden
  2. Im Finder den Ordner ~/Library/Mail/V7/MailData öffnen (mit CMD+SHIFT+G)
  3. Alle Dateien, die mit „Envelope Index“ beginnen löschen (oder in einen Backup-Ordner schieben)
  4. Mail App wieder starten. Es empfängt euch ein Screen, der mitteilt, dass Mail sich selbst reparieren muss. Anschließend werden die Mails neu indiziert, in dieser Zeit ist Mail nicht benutzbar.

Pinch Geste in iTerm2 deaktivieren

Im großartigen MacOS Terminal Programm iTerm2 gibt es ein sehr lästiges Feature, mit welchem man mittels Trackpad-Pinch-Geste (also die aufziehende Geste zum Vergrößern von Bildern z.B.) die Schriftgröße des aktuellen Terminals verändert. Leider gibts dafür auch keine direkte Einstellung, aber wenigstens ein hidden Setting. Und das aktivierst du so:

  1. Öffne die “terminal” Applikation
  2. gib folgenden Befehl ein:
    defaults write com.googlecode.iterm2 PinchToChangeFontSizeDisabled -bool true

     

[Quicktip] Walkie Talkie App ist nicht auf der Apple Watch vorhanden

Irgendwie ist die großartige Walkie Talkie App auf der Apple Watch total an mir vorbei gegangen. Als ich sie nun doch entdeckte, wollte ich sie natürlich gleich ausprobieren. Mit einem Freund klappte es auf Anhieb, der andere sagte mir, dass die App nicht auf seiner Uhr zu finden ist bzw. die Walkie Talkie App auf der Apple Watch fehlt.

Nachdem wir diverse Lösungvorschläge durchprobiert hatten, war die Lösung dann doch relativ leicht. Folgende Vorraussetzungen müssen erfüllt sein, damit die App auf der Apple Watch erscheint und nutzbar ist:

  • Facetime muss auf dem iPhone eingrichtet und nutzbar sein
  • die Apple Watch muss das neueste WatchOS installiert haben
  • ihr braucht mindestens eine Apple Watch 2 oder aber die zweite Revision der ersten Apple Watch, also die mit der neuen CPU
  • die Facetime App muss auf dem iPhone installiert sein

Der letzte Punkt war in unserem Fall entscheidend. Da man Facetime neben der offiziellen App auch einfach über die Telefon-App bzw. das Telefonbuch verwenden kann, hatte sich die Facetime App wegen Nicht-Nutzung automatisch de-installiert. Nachdem der Kollege die App durch einfaches drauf tippen wieder neu installiert hatte, erschien die Walkie Talkie App auch auf der Uhr.

Samsung M2070 scant seit Mac OS Mojave nicht mehr richtig per Dokumenteneinzug

Im papierlosen Büro habe ich nicht mehr so viel mit drucken/scannen zu tun, aber ab und zu passiert es dann doch. Dafür hatte ich mir vor einigen Jahren das Samsung M2070 Multifunktionsgerät mit schwarz-weiss Laser sowie Scanner mit Dokumenteneinzug besorgt, und bin auch sehr glücklich mit dem Teil. Besonders, da es auch Airprint beherscht und somit einen Betrieb nur mit dem iPad ermöglicht – sehr gut für Eltern, die keinen “richtigen” Rechner brauchen.

Aber zurück zum Gerät: seit Mac OS Mojave scannt das Teil nicht mehr so richtig. Sobald man den Dokumenteneinzug nutzt oder aber eine höhere Auflösung verwendet, bricht der Scandialog mit “Der Scanner hat einen Fehler gemeldet” ab.

Da es mir nun wirklich richtig auf die Nerven ging, habe ich mal etwas recherchiert und in den HP-Supportforen (ja, ich war auch verwundert – scheinbar haben die beiden sich beim Thema Support vereint) fand ich dann eine Lösung. Man lädt folgendes Treiberpaket herunter:

https://support.hp.com/us-en/drivers/selfservice/samsung-xpress-sl-m2070-laser-multifunction-printer-series/16450377/model/16450383

(Bitte darauf achten, dass der Filter auf “10.14” steht, dann findest du unter Basic Drivers das Paket “Samsung SL-M2070 Series Scan Driver”. Dort findest du die entsprechenden Installationspakete)

Anschließend entpackt man den Spaß und kann dann die Treiber installieren. Bei mir ging es dann trotzdem nur, indem ich die Software “Scan Assistant” (ist im Zip mit enthalten) installierte. (siehe Update). Mit diesem Tool kann man nun endlich wieder scannnen, auch unter Mac OS Mojave 🙂

 

UPDATE:

Dank des Hinweises von Timo habe ich nochmal den aktuellsten Treiber installiert (Stichwort MAC_TWAIN in der ZIP Datei). Damit geht nun endlich auch wieder das Scannen per Dokumenteneinzug mittels der Vorschau App. Die “Scan Assistant” Software ist also nicht mehr zwingend notwendig.