Initial vault setup
This commit is contained in:
@@ -0,0 +1,159 @@
|
||||
---
|
||||
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
|
||||
Reference in New Issue
Block a user