Wenn der persönliche Kalender und das persönliche Adressbuch nicht in der Cloud von Goolge, Apple und Co. landen soll, muss ein privater CardDAV-Server her. Dazu bieten sich unterschiedliche Möglichkeiten an. Nach einigen Tests bin ich mit DAViCal bei einem privaten CardDAV Server auf dem Raspberry Pi gelandet.

00| Warum DAViCal?

Ich habe mich für DAViCAl entschieden, da dieser Server im Gegensatz zu anderen CalDAV-Servern wie z.B. Baïkal mit DAViCal auch Berechtigungen auf Kalender und Adressbücher vergeben werden können. So kann man auch Kalender/Adressbücher einrichten, die von mehreren User benutzt werden.

Außerdem arbeitet DAViCal perfekt mit dem Web-Frontend InfCloud zusammen, so dass die Termine und Kontakte auch über ein Web-Frontend verwaltet werden können.

Anmerkung: Im Tutorial gehe ich davon aus, dass der Raspberry Pi unter der IP-Adresse 192.168.0.10 erreichbar ist. Die muss natürlich im folgenden ggf. angepasst werden.

01| Pakete installieren und lighttpd vorbereiten

In der Regel wird DAViCAl zusammen mit Apache verwendet. Um Ressourcen zu sparen habe ich mich jedoch für den schlankeren Web-Server lighttpd entschieden. Also werden zunächst folgende Pakete installiert:

Danach werden die entsprechenden Module im lighttpd aktiviert und ein Link Web-Root erstellt, der DAViCal für lighttpd verfügbar macht:

DAViCal nutzt die Variable SERVER_NAME um die korrekte Konfigurationsdatei zu bestimmen (siehe auch unten). Daher muss die lighttpd-Konfiguration so angepasst werden, dass diese Variable auf jeden Fall gesetzt wird, auch wenn der Server über die IP-Adresse anstatt den Hostnamen aufgerufen wird. Daher müssen in der  Datei /etc/lighttpd/conf-available/10-simple-vhost.conf folgende Werte gesetzt:

Die Konfiguration wird dann folgendermaßen aktiviert:

Zur einfacheren Einrichtung der Clients kann auch noch einige Redirects in der /etc/lighttpd/lighttpd.conf eingerichtet werden:

Werden diese Änderungen vorgenommen, muss natürlich auch der lighttpd nochmal neu gestartet werden.

02| Datenbank einrichten

Da DAViCal auf Postgres aufsetzt muss zunächst die Datenbank eingerichtet werden. Dazu werden als erstes zwei neue Benutzer erstellt:

In der Konfigurationsdatei /etc/postgresql/9.X/main/pg_hba.conf muss diesen Benutzern noch der Zugriff auf die Datenbank durch folgende Einträge ermöglicht werden:

Anschließend wird Postgres neu gestartet und die DAViCal-Datenbank erstellt und der Server nochmal gestartet werden:

Wichtig: Bei der Einrichtung wird der Benutzer “admin” mit einem zufälligen Passwort angelegt und die Zugangsdaten werden nach der Einrichtung der Datenbank angezeigt. Dieser Benutzer wird später gebraucht, um über das DAViCal-Web-Frontend die Benutzer und Ressourcen zu verwalten.

Falls bei der Einrichtung der Datenbank was fehlschlagen sollte und der Benutzer nicht angezeigt werden sollte. kann eine halb eingerichtete Datenbank mit folgenden Kommandos wieder gelöscht werden:

03| Konfiguration von DAViCal

Im Verzeichnis /etc/davical wird die Datei localhost-conf.php mit folgenden Inhalt angelegt:

Anmerkung: Es ist hier laut DAViCal-Anleitung korrekt, dass das schließende ?> nicht mit angegeben wird.

Jetzt ist es wichtig das für alle Server-Namen unter denen der Server angesprochen werden soll eine entsprechende Konfiguration existiert. Am einfachsten werden dazu ein paar Links angelegt:

Nun ist eigentlich alles bereit für den ersten Zugriff auf das DAViCal-Admin-Backend unter http://192.168.0.10/caldav/.

Zur Anmeldung benötigt man nun das Passwort für den admin-User von oben. Sollte man es nicht notiert haben, kann es wie folgt nochmal abgerufen werden:

Funktioniert der Login, so sollte als erstes das Admin-Passwort gewechselt werden, damit es nicht mehr im Klartext in der Datenbank gespeichert ist.

Klappt die Anmeldung, so können nun Benutzer und Ressourcen angelegt und Berechtigungen vergeben werden. Eine Beschreibung wie DAViCal nun zu bedienen ist erspare ich mir an dieser Stelle. Entsprechende Hinweise gibt es auf der DAViCal-Seite ausreichend.

Wurden User und Kalender angelegt, so kann jetzt bereits versucht werden auf die Installation zuzugreifen (z. B. per Handy oder Sunbird). Wurden die Weiterleitungen zur Vereinfachung eingetragen so sollte in der Regel 192.168.0.10/caldav/ als URL bei der einrichtung ausreichen. Ggf. kann aber auch ein 192.168.0.10/caldav/caldav.php erforderlich sein.

04| Web-Frontend einrichten

Der Zugriff auf die Kalender und Adressbücher ist im DAViCal-Backend nicht möglich. Soll auch per Web-Browser auf den Kalender zugegriffen werden, so muss ein entsprechender Web-Client installiert werden. Hier bietet sich InfCloud an, der sehr gut mit DAViCal zusammenarbeitet:

Nun muss die Konfiguration ein wenig angepasst werden, damit InfCloud auch korrekt auf DAViCal zugreift:

Danach sollte eine Anmeldung am Web-Frontend http://192.168.0.10. Damit sollten dann auch die Kalender- und Adressbuchinhalte verwaltet werden können. Zur Anmeldung wird dabei der Benutzername und das Passwort des DAViCal-Users verwendet.

Eigentlich ist die Installation nun abgeschlossen. Allerdings kann bis jetzt nur unverschlüsselt auf den CalDav-Server zugegriffen werden. Daher wird im folgenden Schritt auch noch das SSL für lighttpd eingerichtet.

05| SSL einrichten

Damit SSL überhaupt aktiviert werden kann muss erstmal geprüft werden ob Lighttpd überhaupt SSL unterstützt:

Sieht die Ausgabe in etwa so aus wie oben (ssl), dann kann es mit der Konfiguration von SSL/TLS weitergehen. Ansonsten muss erst eine andere Version von lighttpd installiert werden.

Zunächst muss ein Schlüssel und ein Zertifikat erstellt werden. Ich verwende für die Schlüsselverwaltung XCA und habe das Vorgehen in einem eigenen Artikel beschrieben: Private CA für interne Web-Server erstellen.

Für lighttpd muss der private Schlüssel und das zugehörige Zertifikat in einer Datei vorliegen. Der Schlüsselaustausch kann dabei am Besten per Zwischenablage erfolgen. Also beispielsweise die Datei mit dem Kommando nano /etc/lighttpd/ssl/server-key-pub.pem  anlegen. Dann wird zuerst der private Schlüssel aus XCA per Zwischenablage im PEM-Format kopieren und in die Datei eingefügt. Danach wird dann das Server-Zertifikat auf die gleiche Weise übertragen und an das Ende der Datei angehängt und die Datei gespeichert. Anschließend müssen die Berechtigungen für die Datei noch korrekt gesetzt werden:

Zusätzlich müssen auch noch die CA-Zertifikate in eine Datei geschrieben werden. Hier müssen alle Zertifikate der CAs in eine Datei geschrieben werden. Bei mir ist das meine Root CA  und zusätzlich auch die Zwischen-CA, mit der ich meine Server-Zertifikate ausstelle. Auch diese Datei wird am einfachsten per nano /etc/ssl/certs/myca.pem und über die Zwischenablage befüllt. Ich habe zunächst die Root CA und anschließend meine Server CA im PEM-Format in die Datei geschrieben und habe danach wieder die Berechtigungen angepasst:

Wenn DH-Suiten verwendet werden sollen mit einer Schlüssellänge > 1024 Bit, dann ist zusätzlich noch ein DH-File zu erzeugen:

Das Kommando erzeugt einen File für 4096 Bit. Sollten 2048-Bit ausreichen so kann das Kommando entsprechend angepasst werden. Ich empfehle das Kommando auf einem System mit mehr Rechenleistung auszuführen und die Datei anschließend zu kopieren, da der Raspberry bei der Erstellung einiges zu rechnen hat.

Nun sind alle Dateien auf dem Raspberry vorhanden und die SSL-Konfiguration in der Datei /etc/lighttpd/conf-available/10-ssl.conf  kann angepasst werden.

Bei der SSL-Konfiguration ist vor allem die Wahl der Cipher-Suiten entscheidend für die Sicherheit. Wird hier allerdings zu strikt vorgegangen, dann können einige Clients sich nicht mehr verbinden. Ich habe dabei die besten Erfahrungen mit der Empfehlung von BetterCrypto.org gemacht. Die dort empfohlene Cipher-Liste habe ich noch etwas gekürzt und entsprechend in die Konfiguration aufgenommen:

Jetzt muss die SSL-Konfiguration noch aktiviert und der lighttpd server neu gestartet werden:

Ist danach der lighttpd gestartet und können sowohl DAViCal als auch InfCloud per SSL/TLS aufgerufen werden, dann kann lighttpd so konfiguriert werden, dass alle unverschlüsselten Aufrufe auf HTTPS umgeleitet werden:

06| Clients einrichten

Die Einrichtung der Clients ist immer etwas unterschiedlich. Auf der DAViCal-Seite gibt es eine recht ausführliche Anleitung zur Einrichtung unterschiedlicher Clients.

Bei Lightning ist es zum Beispiel wichtig, dass in der Kalender-URL direkt auf den Kalender verwiesen wird (z.B. https://192.168.0.10/caldav/caldav.php/username/calendar/). Dabei muss für jeden freigegebenen Kalender eine eigene URL in Lightning eingerichtet werden.

CalDav-Sync ist da etwas weniger wählerisch. Hier reicht die Angabe der URL zur DAViCal-Installation (z.B. https://192.168.0.10/caldav/). CalDav-Sync Android ermittelt dann automatisch welche Kalender für den Benutzer verfügbar sind.

CalDAV-Sync
CalDAV-Sync
Entwickler: dmfs GmbH
Preis: 2,55 €