Sécuriser Nextcloud en HTTPS avec Let's Encrypt et Apache
Un certificat TLS chiffre les communications vers votre instance Nextcloud. Son utilisation garantit la confidentialité, l'intégrité et l'authenticité des données échangées. Cet article détaille sa configuration automatisée avec Let's Encrypt et Apache sur votre Raspberry Pi.
Prérequis avant l'installation
L'obtention d'un certificat Let's Encrypt repose sur un système de validation automatique à distance. L'autorité de certification va chercher à joindre votre serveur web sur le port 80 (HTTP) pour s'assurer que vous êtes bien le propriétaire du domaine.
Vous devez impérativement valider ces trois étapes avant de continuer :
- Un nom de domaine configuré (Zone DNS) : L'adresse de votre cloud (par exemple
cloud.votre-domaine.fr) doit pointer vers l'adresse IP publique de votre connexion internet. Rendez-vous sur l'interface de votre fournisseur de nom de domaine (OVH, Gandi, Infomaniak, etc) et créez un enregistrement de Type A. - La redirection des ports (NAT/PAT) : Par défaut, votre box internet bloque les connexions entrantes. Vous devez lui indiquer quelle machine du réseau local doit traiter le trafic web. Cherchez l'onglet "Transfert de port" ou "Règles NAT" dans l'interface de votre routeur, puis redirigez les ports 80 (HTTP) et 443 (HTTPS) vers l'adresse IP locale de votre Raspberry Pi.
- Un hôte virtuel (VirtualHost) fonctionnel : Votre serveur Apache doit déjà distribuer votre instance Nextcloud en HTTP clair sur le port 80, il s'agit de l'étape présentée dans le guide dédié à l'installation de Nextcloud.
Les interfaces varient grandement selon les fournisseurs d'accès et les prestataires. N'hésitez pas à rechercher des tutoriels spécifiques à votre matériel en utilisant les termes « Configurer règle NAT [Nom_de_votre_box] » ou « Créer sous-domaine [Nom_de_votre_fournisseur] ».
Installation de Certbot
L'outil officiel recommandé par Let's Encrypt se nomme Certbot. Sous Raspberry Pi OS, il s'installe facilement via le gestionnaire de paquets officiel, accompagné de son module spécifique pour le serveur web Apache.
Ouvrez un terminal sur votre Raspberry Pi et exécutez la commande suivante :
# Installe le client Certbot et son module d'intégration pour Apache
sudo apt install certbot python3-certbot-apache
Génération du certificat TLS
Avant de lancer la création du certificat, l'assistant Certbot a besoin d'identifier précisément quel fichier de configuration (VirtualHost) correspond à votre nom de domaine. Si vous avez suivi notre guide d'installation initial, votre configuration pointe probablement vers localhost ou l'adresse IP de votre Raspberry Pi. Vous devez donc la mettre à jour.
Ouvrez le fichier de configuration de votre VirtualHost :
# Édite la configuration du VirtualHost HTTP
sudo nano /etc/apache2/sites-available/nextcloud.conf
Recherchez la ligne ServerName et remplacez sa valeur par votre véritable nom de domaine :
ServerName cloud.votre-domaine.fr
Enregistrez (Ctrl+O, Entrée, puis Ctrl+X) et rechargez la configuration d'Apache :
# Recharge Apache pour appliquer la modification
sudo systemctl reload apache2
Exécution de l'assistant Certbot
La création du certificat et sa configuration s’effectuent en une seule commande. Le module Apache va alors :
- lire votre configuration existante ;
- valider votre domaine auprès de Let's Encrypt ;
- télécharger le certificat ;
- créer et activer automatiquement un nouveau fichier de configuration pour le VirtualHost HTTPS sur le port 443, généralement nommé avec le suffixe
-le-ssl.conf.
Lancez la commande suivante en remplaçant l'adresse par votre propre nom de domaine :
# Lance l'assistant de configuration HTTPS pour votre domaine
sudo certbot --apache -d cloud.votre-domaine.fr
L'assistant interactif de Certbot va alors vous poser quelques questions :
- Adresse e-mail : Fournissez une adresse valide. Elle sera utilisée par Let's Encrypt pour vous avertir en cas de problème de renouvellement ou de faille de sécurité.
- Conditions d'utilisation : Acceptez les conditions d'utilisation du service.
- Partage de l'e-mail (Optionnel) : Vous pouvez refuser le partage de votre adresse avec les partenaires de l'EFF (Electronic Frontier Foundation).
À la fin du processus, Certbot redémarre automatiquement Apache et installe le certificat. Il reste maintenant à déclarer le domaine de confiance dans la configuration de Nextcloud pour finaliser l’accès sécurisé en HTTPS.
Vérification des certificats
La commande sudo certbot certificates affiche les certificats actuellement installés par Certbot.
Déclaration du domaine de confiance
Le certificat est désormais installé, mais Nextcloud n’autorise pas encore l’accès via votre nom de domaine. L’application vérifie que l’adresse demandée figure bien dans sa liste de domaines de confiance. Cette protection limite les risques d’usurpation d’en-tête HTTP.
Vous devez ajouter votre nouvelle adresse à la liste des domaines de confiance pour autoriser l'affichage de l'interface.
Ouvrez le fichier de configuration de Nextcloud :
# Édite le fichier de configuration principal de l'application
sudo nano /var/www/nextcloud/config/config.php
Repérez la section trusted_domains et ajoutez une nouvelle ligne avec votre nom de domaine (l'index dépend de votre configuration actuelle) :
'trusted_domains' =>
array (
0 => 'localhost',
1 => 'cloud.votre-domaine.fr',
),
Profitez d'être dans ce fichier pour mettre à jour l'URL de base de votre instance pour les tâches en arrière-plan. Cherchez la directive overwrite.cli.url et modifiez-la pour intégrer le protocole HTTPS et votre nom de domaine :
'overwrite.cli.url' => 'https://cloud.votre-domaine.fr',
Enregistrez les modifications (Ctrl+O, Entrée, puis Ctrl+X).
Accès sécurisé validé
Rechargez la page dans votre navigateur. L'erreur « Accès à partir d'un domaine non approuvé » a disparu et le cadenas de sécurité s'affiche bien à côté de votre URL !
Renforcement de la sécurité (HSTS)
Même avec un certificat TLS actif, le panneau d'administration de Nextcloud affiche un avertissement concernant l'absence de l'en-tête « Strict-Transport-Security » (HSTS). Cette directive indique aux navigateurs web qu'ils doivent exclusivement communiquer avec votre serveur via une connexion sécurisée HTTPS. Son activation bloque toute tentative de déclassement vers du HTTP clair.
Pour corriger cet avertissement, vous devez d'abord activer le module de gestion des en-têtes d'Apache :
# Active le module headers d'Apache
sudo a2enmod headers
Ouvrez ensuite le nouveau fichier de configuration HTTPS :
# Édite la configuration du VirtualHost sécurisé
sudo nano /etc/apache2/sites-available/nextcloud-le-ssl.conf
Ajoutez le bloc suivant juste en dessous de la ligne ServerName cloud.votre-domaine.fr :
ServerName cloud.votre-domaine.fr
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains"
</IfModule>
Enregistrez vos modifications (Ctrl+O, Entrée, puis Ctrl+X).
Pour appliquer cette dernière mesure de sécurité, redémarrez votre serveur web :
# Redémarre Apache pour prendre en compte le module et le paramètre HSTS
sudo systemctl restart apache2
Retournez dans les paramètres d'administration de Nextcloud. L'avertissement concernant les en-têtes HTTP a désormais disparu.
Renouvellement automatique du certificat
Les certificats gratuits délivrés par Let's Encrypt ont une durée de validité stricte de 90 jours. Rassurez-vous, vous n'aurez pas à répéter ces opérations tous les trois mois : le paquet Certbot a automatiquement créé une tâche planifiée sur votre système lors de son installation (/etc/cron.d/certbot).
Cette tâche interroge les serveurs de Let's Encrypt deux fois par jour et renouvelle silencieusement tout certificat expirant dans moins de 30 jours, puis recharge Apache pour appliquer la mise à jour.
Vous pouvez vérifier le bon fonctionnement de ce mécanisme en lançant une simulation de renouvellement (un test "à blanc" qui ne modifiera pas vos fichiers actuels) :
# Simule le processus de renouvellement automatique
sudo certbot renew --dry-run
Si la commande affiche un message de succès (généralement « Congratulations, all simulated renewals succeeded »), votre configuration est parfaite.
Sécurisation terminée
Félicitations, votre instance Nextcloud est maintenant accessible via une connexion HTTPS sécurisée. Vous pouvez à présent profiter d’un accès chiffré et d’une configuration plus fiable au quotidien.