--- title: EteSync created: 2026-06-07 updated: 2026-06-07 type: app tags: [catalogue, calendar, contacts, e2ee, chiffrement, python, django, privacite] confidence: high contested: false sources: [https://selfh.st/apps/?tag=calendar] --- # 🔐 EteSync > **Le serveur de calendrier et contacts **chiffrĂ© de bout en bout** (E2EE)** : ni l'admin du serveur, ni un attaquant ayant accĂšs au serveur ne peuvent lire vos rendez-vous. C'est le **signal/element/proton-calendar** de l'auto-hĂ©bergement, conçu par **Tom Joshi**. | MĂ©tadonnĂ©e | Valeur | | :--- | :--- | | **Site web** | [etesync.app](https://www.etesync.app/) | | **GitHub** | [etesync/etesync-server](https://github.com/etesync/etesync-server) | | **License** | AGPL-3.0 (serveur) | | **Langage** | Python 3.11+ / Django 5.x | | **Étoiles** | 101 ⭐ (toute l'org ettesync) | | **DerniĂšre MAJ** | 2026-03 (v0.13.x) | | **CatĂ©gorie** | [[cat-calendar]] | ## Description **EteSync** est nĂ© d'un constat : tous les serveurs CalDAV ([[app-radicale]], [[app-baikal]], [[app-davical]]) stockent vos calendriers et contacts **en clair** sur le serveur. Si un attaquant, un administrateur curieux, ou une rĂ©quisition lĂ©gale accĂšde au serveur, il lit tout. EteSync rĂ©sout ce problĂšme en appliquant un **chiffrement E2E** systĂ©matique : tout passe par un **JMAP-like** ou CalDAV adaptĂ©, et tout est chiffrĂ© cĂŽtĂ© client avec une clĂ© dĂ©rivĂ©e du mot de passe de l'utilisateur avant d'atteindre le serveur. L'architecture repose sur : un **serveur Django** (REST/JMAP-like, plus CalDAV proxy en option), un **modĂšle crypto** (libsodium, AES-GCM, signed ratchet), des **clients** officiels (Android via DAVx5 + plugin EteSync, iOS via app officielle, Web via l'app web), et une **intĂ©gration CalDAV** (EteSync **expose** ses calendriers chiffrĂ©s en CalDAV en lecture, via le client web ou un proxy). Le serveur ne voit **jamais** le contenu en clair, seulement des blobs chiffrĂ©s + mĂ©tadonnĂ©es (timestamps, tailles). **Points forts** : **chiffrement E2E authentique** (vraiment, pas du marketing), basĂ© sur **signal-protocol-like** (ratchet), **interopĂ©rable CalDAV** en sortie (donc les clients standards peuvent lire), **licence AGPL-3.0** (auditable), client web responsive, **apps mobiles natives** (Android/iOS), **zero-knowledge** cĂŽtĂ© serveur (le serveur peut ĂȘtre compromis, vos donnĂ©es restent illisibles), **comptage d'invitĂ©s** pour l'auto-hĂ©bergement (compte `john@etesync.local` si DNS mal configurĂ©). **Points faibles** : **101 Ă©toiles** = signal de niche (mais c'est un signal de qualitĂ© vs de quantitĂ©), **modĂšle de menace spĂ©cifique** : si l'attaquant est sur le *client* (malware, keylogger), E2EE n'aide pas ; **pas de CalDAV complet en Ă©criture** (le proxy DAV expose seulement en lecture, l'Ă©criture passe par les apps natives) ; **clients tiers limitĂ©s** (DAVx5 + plugin, pas Thunderbird natif) ; **clĂ© = mot de passe utilisateur** : si l'utilisateur oublie son mot de passe, ses donnĂ©es sont **irrĂ©cupĂ©rables** (c'est le prix de l'E2E) ; **bus factor faible** (Tom Joshi, quelques contributeurs). > 📜 **Historique** : EteSync a eu une **offre Cloud** (etesync.com) qui a Ă©tĂ© reprise par **Proton** (Proton Calendar). Le projet open source reste la version self-hosted, active mais avec un bus factor Ă  surveiller. ## Installation ### Via Docker Compose (recommandĂ©) ```yaml # docker-compose.yml services: etesync: image: etesync/server:latest container_name: etesync restart: unless-stopped ports: - "8000:8000" environment: ETESYNC_DATA_DIR: /data ETESYNC_DB: postgres ETESYNC_DB_HOST: db ETESYNC_DB_PORT: 5432 ETESYNC_DB_NAME: etesync ETESYNC_DB_USER: etesync ETESYNC_DB_PASSWORD: changez-moi ETESYNC_SITE_URL: https://etesync.example.com ETESYNC_ALLOWED_HOSTS: etesync.example.com SECRET_KEY: changez-cette-cle-en-50-chars volumes: - ./data:/data depends_on: - db db: image: postgres:16-alpine container_name: etesync-db restart: unless-stopped environment: POSTGRES_DB: etesync POSTGRES_USER: etesync POSTGRES_PASSWORD: changez-moi volumes: - ./pgdata:/var/lib/postgresql/data ``` ### Reverse-proxy (Traefik) ```yaml # labels Traefik - "traefik.http.routers.etesync.rule=Host(`etesync.example.com`)" - "traefik.http.routers.etesync.tls.certresolver=letsencrypt" - "traefik.http.services.etesync.loadbalancer.server.port=8000" ``` ### Installation manuelle Python 3.11+, Django, PostgreSQL, Redis (optionnel). Cloner le repo, `pip install -r requirements.txt`, `python manage.py migrate`, `gunicorn etesync_server.wsgi:application`. Configuration par variables d'environnement (voir `.env.example`). ## Configuration 1. **Premier lancement** : crĂ©er un compte admin via `python manage.py createsuperuser` ou depuis l'UI. 2. **Configurer l'URL publique** : `ETESYNC_SITE_URL` doit pointer sur `https://etesync.example.com` (les apps s'en servent pour les liens d'invitation). 3. **CrĂ©er un utilisateur** : soit via l'UI Web, soit via le `createsuperuser` Django. 4. **CĂŽtĂ© client Android** : installer **DAVx5** (payant, ~5 €) + **EteSync pour DAVx5** (gratuit). Entrer l'URL `https://etesync.example.com`, son user/password. 5. **CĂŽtĂ© iOS** : installer l'app **EteSync** (App Store), mĂȘme config. 6. **CĂŽtĂ© Web** : `https://etesync.example.com` → login, crĂ©er des calendriers, contacts. 7. **CalDAV bridge** (optionnel, lecture seule) : `ETESYNC_DAV_ENABLED=true` + proxy DAV. 8. **Backups** : `pg_dump` quotidien, **sans la clĂ© utilisateur** (inutile, c'est E2E). ## Alternatives ### Open Source - [[app-radicale]] — Serveur CalDAV, **PAS chiffrĂ©** (stockage clair) - [[app-baikal]] — Idem, **PAS chiffrĂ©** - [[app-davical]] — Idem, **PAS chiffrĂ©** - [[app-sabre-dav]] — Idem, **PAS chiffrĂ©** - **Proton Calendar** — ChiffrĂ© E2E mais **SaaS** (version commerciale d'EteSync en partie) - **Tuta (Tutanota) Calendar** — ChiffrĂ© E2E, **SaaS** - **Mailcow** — Inclut SOGo avec CalDAV **non chiffrĂ©** (mais on peut chiffrer le disque) - [[app-nextcloud]] — **E2E pour fichiers** (E2EE) mais pas pour calendriers (chiffrement cĂŽtĂ© serveur uniquement) ### PropriĂ©taires (ce qu'EteSync remplace) - **iCloud Calendar** — ChiffrĂ© par Apple en transit + at rest, mais Apple a la clĂ© - **Google Calendar** — Chiffrement at rest, mais Google peut lire - **Outlook.com Calendar** — Idem - **Proton Calendar** — E2E authentique, mais **SaaS** (Proton AG) - **Tutanota Calendar** — E2E, mais **SaaS** (Tuta) ## SĂ©curitĂ© - ✅ **E2E authentique** : chiffrement cĂŽtĂ© client avec libsodium, ratchet, AES-GCM - ✅ **Zero-knowledge** : admin serveur ne peut rien lire (mĂȘme s'il a accĂšs Ă  la DB) - ✅ **AGPL-3.0** : auditable, fork = contribution - ✅ **HTTPS obligatoire** (apps refusent HTTP) - ⚠ **Mot de passe = clĂ© de chiffrement** : pas de reset possible, mot de passe faible = donnĂ©es compromises - ✅ **Pas de tĂ©lĂ©mĂ©trie** (contrairement Ă  Proton Cloud) - ⚠ **CalDAV proxy = lecture seule** : l'Ă©criture E2E passe par les apps natives - ⚠ **Mises Ă  jour** : suivre `etesync/etesync-server` sur GitHub, releases peu frĂ©quentes - ✅ **Pas de 2FA native** sur EteSync-server (compensĂ© par l'E2E : pas besoin de 2FA si crypto OK), mais peut ĂȘtre ajoutĂ©e via [[app-authelia]] en façade - ⚠ **Bus factor** : surveiller les issues GitHub, le projet est petit - ⚠ **CVE dĂ©pendances** (Django, libsodium) : mises Ă  jour rĂ©guliĂšres ## Ressources - [Site officiel](https://www.etesync.app/) - [Documentation](https://www.etesync.app/docs/) - [DĂ©pĂŽt GitHub](https://github.com/etesync) - [Blog Tom Joshi](https://tjoshi.ca/) - [Client Android DAVx5](https://www.davx5.com/) - [App iOS App Store](https://apps.apple.com/app/etesync/id1446904545) - [Reddit r/etesync](https://www.reddit.com/r/etesync/) - [selfh.st Calendar](https://selfh.st/apps/?tag=calendar) - [ModĂšle crypto (whitepaper)](https://www.etesync.app/docs/crypto/) ## Pages LiĂ©es - [[cat-calendar]] — CatĂ©gorie Calendar - [[app-radicale]] — Serveur CalDAV **non chiffrĂ©** (alternative non-E2E) - [[app-baikal]] — Idem, non chiffrĂ© - [[app-davical]] — Idem, non chiffrĂ© - [[app-sabre-dav]] — Idem, non chiffrĂ© - [[app-cal-com]] — Scheduler qui se connecte Ă  EteSync (via DAVx5) - [[recettes-docker-compose]] — Templates Docker - [[app-traefik]] — Reverse-proxy HTTPS - [[app-authelia]] — SSO/2FA en façade (optionnel, E2E = dĂ©jĂ  solide) - [[securisation-home-lab]] — Bonnes pratiques sĂ©cu