Héberger votre propre serveur CalDAV et CardDAV sur OpenBSD avec Radicale

Contexte

Lorsque j’ai changé de téléphone mobile il m’a fallu transférer tous mes contacts de l’ancien appareil vers le nouveau.

Je n’ai jamais aimé l’idée de partager les coordonnées de mes proches ainsi que toutes mes allées et venues avez les GAFAM. C’est pourquoi j’ai décidé de réaliser cette idée qui me trottait derrière la tête depuis plusieurs mois: auto-héberger mes calendriers et contacts avec Radicale.

Installation

Installer Radicale 2 qui se trouve dans les ports de OpenBSD.

# pkg_add radicale

Modifier le fichier de configuration /etc/radicale/config. Le serveur écoutera uniquement sur localhost au port 5232. Pour plus d’options consulter https://radicale.org/v2.html#basic-setup.

[server]
hosts = 0.0.0.0:5232

[auth]
# Authentication method
type = htpasswd
htpasswd_filename = /etc/radicale/users
htpasswd_encryption = bcrypt

Définir un utilisateur et son mot de passe.

# cd /etc/radicale
# htpaswd users phil
# chown _radicale /etc/radicale/users

Activer le service.

# rcctl enable radicale
# rcctl start radicale

Pour sécuriser la connection avec SSL il existe plusieurs méthodes. Je redirige les requêtes via un proxy avec le serveur nginx.

Définir le proxy dans /etc/nginx/nginx.conf:

    server {
        server_name radicale.neutrino.pw;

        listen [::]:443 ssl;
        listen 443 ssl;

        access_log logs/radicale-access.log;
        error_log  logs/radicale-error.log;

        ssl_certificate /etc/ssl/neutrino.pw.fullchain.pem;
        ssl_certificate_key /etc/ssl/private/neutrino.pw.key;
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_prefer_server_ciphers on;
        ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";

        location / {
                        proxy_set_header Host $http_host;
                        #proxy_set_header X-Real-IP $remote_addr;
                        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                        #proxy_set_header X-Forwarded-Proto $scheme;
                        proxy_set_header X-Script-Name /;
                        proxy_pass_header Authorization;
                        proxy_pass http://localhost:5232;
                }
    }

Recharger nginx.

# rcctl restart nginx 

Prérequis pour utiliser un sous-domaine

Les étapes suivantes ne sont requises que si vous souhaitez diriger les requêtes de radicale vers un sous-domaine.

Ajouter un enregistrement CNAME auprès du régistraire.

Ajouter le nouveau sous-domaine à la clé. Dans mon cas, c’est avec Letsencrypt et acme-client. Modifier /etc/acme-client.conf:

domain neutrino.pw {
        alternative names { radicale.neutrino.pw comments.neutrino.pw www.neutrino.pw }
        domain key "/etc/ssl/private/neutrino.pw.key"
        domain full chain certificate "/etc/ssl/neutrino.pw.fullchain.pem"
        sign with letsencrypt
}

Renouveler les clés.

# acme-client neutrino.pw && rcctl reload nginx

Utilisation

Une fois Radicale en marche, il suffit de naviger vers l’adresse du serveur afin de se connecter dans l’interface web avec l’utilisateur et mot de passe définis plus tôt.

On peut y créer des calendriers et des listes de contacts. Pour chaque base de données, Radicale produira les URL requises pour configurer vos appareils mobiles (pomme ou androïde) ou ordinateurs (thunderbird).

Liens utiles




Par Philippe St-Jacques