Bonjour!
Je m’adresse à vous car j’ai un soucis de configuration nginx servant une instance Nextcloud.
Contexte:
J’ai déjà une instance Nextcloud pour mes besoins personnels. Étant assez frileux niveau sécurité, elle n’est aujourd’hui accessible que via une connexion VPN à mon serveur.
Aujourd’hui je souhaite la rendre accessible à quelques personnes supplémentaires tout en gardant un niveau de sécurité assez important.
Après avoir fait quelques recherches, je souhaite rendre mon instance directement accessible en HTTPS (sans la connexion VPN) mais en utilisant une authentification client via un certificat (SSL client certificat).
Pour cela pas de soucis particulier, je suis arrivé à une config qui tient la route : HTTPS Letsecnrypts, CA perso pour les certificats clients, vérification certificats client au niveau de nginx, jail Fail2ban pour bloquer les requêtes sans ou avec mauvais certificats clients, …
Problème
Le problème vient du faite que je souhaite pouvoir utiliser la fonction de partage de fichier via une URL publique et ce même pour des personnes qui n’ont pas de certificat SSL client. En faite je souhaite pouvoir débrayer la vérification des certificats clients uniquement pour les URL associées aux fichiers partagés via une URL publique.
Je n’ai pas trouvé de doc spécifiant le format des URL de partage de fichiers publiques. A priori, il s’agit d’URL de la forme "mon.domain.fr/s/<id>" donc les URL qui commencent par "/s/"
Après pas mal de recherche je n’ai pas trouvé de solution miracles:
- Il n’est pas possible d’utiliser la commande "ssl_verify_client on;" dans un bloc "location" de nginx
- A priori, il n’est pas possible de configurer NextCloud pour générer les URL de partage publiques sur un sous-domaine du domaine de l’instance
La seule solution qu’il me reste est de bidouiller la config nginx :
- En passant la vérification ssl à optionnel et "ssl_verify_client optional;"
- Vérifier le status de cette vérification dans différents blocs "location" de nginx
1 2 3 | if ($ssl_client_verify != "SUCCESS") { return 403; } |
Mais avec ça, je n’arrive pas à faire une config nginx propre qui me donne confiance au niveau sécurité.
Du coup, je me retourne vers vous pour prendre quelques idées, retours d’expériences sur des cas similaires.
Des conseils?
Merci!