#1 Le 11/03/2021, à 13:20
- alex2423
Sécuriser l'accès de son serveur Web comme SSH par un certificat privé
Hello tout le monde,
J'ai sécurisé mon accès ssh au moyen de l'authentification d'une public et privée. Si la personne n'a pas la clef privé, il lui est impossible de se connecter en ssh à mon serveur
Je pense qu'il est également possible de pouvoir effectuer cette même sécurisation en web. Sauf erreur de ma part, l'équivalent de la clef privé correspondrait au certificat.
Si l'utilisateur sur son navigateur ne dispose pas du certificat, celui-ci se fait rejeter par le serveur. Le certificat permettrait certe de sécuriser le lien entre le serveur Web et le navigateur (pour éviter de se faire sniffer) mais surtout de sécuriser l'accès au serveur. Seul les clients disposant du certificat serait habilité à accéder au serveur, et non pas en openbar.
Est il possible d'avoir ce comportement sécurisé ?
Je suis débutant dans la mise en place du https.
Pour le moment, j'ai :
- créé un CA-root autosigné pour signer les certificats
- installé ce certificat root sur Firefox comme autorité
- créé un certificat pour ma page web
- configurer mon fichier de configuration vhost virtuel de ma page web.
Sous Firefox, j'arrive bien à me connecter en sécurisé directement (sans avoir de message d'avertissement que c'est dangereux). Lorsque je clique sur le cadenas de ma page sur FIrefox, je vois bien que ma page est vérifiée par un certificat issue (non connu de Mozilla, certainement rajouté par un administrateur). Tout va bien lorsque le certificat est présent.
Par contre, lorsque je supprime mon certificat root de Firefox, j'obtiens le message
Attention : Risque potentiel
Websites prove their identity via certificates. Firefox does not trust dev.deliciousbrains.com because its certificate issuer is unknown, the certificate is self-signed, or the server is not sending the correct intermediate certificates.
Mais c'est openbar, il est possible de passer outre cet avertissement et d'accepter le risque et de continuer.
Y a t-il un paramètre sur le serveur Nginx à mettre pour accepter uniquement joignable par certificat? Si le client ne dispose pas de certicat, tant pis pour lui, on ne l'accepte pas (pas de bouton pour ajouter une exception)
Hors ligne
#2 Le 11/03/2021, à 14:40
- soshy
Re : Sécuriser l'accès de son serveur Web comme SSH par un certificat privé
Salut,
alors déjà on va clarifier certaines choses. Tes certificats servent uniquement à authentifier le serveur (prouver sa légitimité). C'est un certificat https, comme on peut trouver sur la majorité des sites internet aujourd'hui. Comme c'est un certificat auto-signé, aucune autorité de confiance n'est garante de l'authenticité de ton serveur (plus exactement, de son certificat). C'est pourquoi tu as un avertissement, et c'est aussi pourquoi si tu ajoutes le root_ca dans firefox, tu dis que tu fais confiance à ce qui a été signé par ce certificat, et le message d'avertissement disparaît alors.
En aucun cas ça légitime le client qui initie la connexion au serveur.
Ce que tu veux toi, c'est ce qu'on appelle la notion de "client certificate authentication". Et je pourrais pas t'en dire beaucoup plus parce que je n'ai jamais eu trop l'occasion de m'y frotter
Dernière modification par soshy (Le 11/03/2021, à 14:41)
Hors ligne
#3 Le 11/03/2021, à 15:18
- alex2423
Re : Sécuriser l'accès de son serveur Web comme SSH par un certificat privé
Oui tu as très bien résumé, merci pour cet éclaircissement.
J'ai trouvé entre temps le HSTS qui forcerait coute que coute au client de communiquer en HTTPS. Et si le client ne dispose du ca_root, le message d'avertissement apparait toujours mais le bouton pour ajouter l'exception disparait.
https://itsimple.info/?p=1240
et encore plus détaillé :
https://www.nginx.com/blog/http-strict- … and-nginx/
Une fois que la politique HSTS est présentée à un client, celui-ci met en cache les informations pendant la période max-age spécifiée. Pendant cette période, le navigateur refuse d'accéder au service Web par le biais d'un protocole HTTP non crypté et refuse d'accorder des exceptions aux erreurs de certificat (si le site a précédemment présenté un certificat valide et fiable).
J'ai mis un peu partout dans la conf de VHOST
add_header Strict-Transport-Security "max-age=31; includeSubdomains; preload";
mais malheureusement je vois toujours le bouton d'ajout de l'exception.
Selon le premier lien, les sites qui ont été identifié comme HSTS sont dans le profile de Firefox mais je n'ai trouvé le domaine de ma page Web.
Je ne suis pas certain que Ngnix ajout dans l'entête Strict-Transport-Security pour passer HSTS
EDIT : okay, je vais renseigner avec les mots clefs "client certificate authentication". Merci bien
Dernière modification par alex2423 (Le 11/03/2021, à 15:23)
Hors ligne
#4 Le 11/03/2021, à 15:46
- Compte supprimé
Re : Sécuriser l'accès de son serveur Web comme SSH par un certificat privé
Si l'utilisateur sur son navigateur ne dispose pas du certificat, celui-ci se fait rejeter par le serveur. Le certificat permettrait certe de sécuriser le lien entre le serveur Web et le navigateur (pour éviter de se faire sniffer) mais surtout de sécuriser l'accès au serveur. Seul les clients disposant du certificat serait habilité à accéder au serveur, et non pas en openbar.
Suite à ta question, j'ai cherché de quoi il s'agit. Si j'ai bien compris, c'est une des méthodes qui permettent l'authentification à plusieurs facteurs.
https://www.jscape.com/blog/client-cert … entication
https://stackoverflow.com/questions/245 … e/24543642
Mais je ne sais si c'est le plus pratique du côté client, et même pour la gestion du serveur. Les spécialistes nous diront.
Dernière modification par Compte supprimé (Le 12/03/2021, à 09:26)
#5 Le 12/03/2021, à 09:07
- bruno
Re : Sécuriser l'accès de son serveur Web comme SSH par un certificat privé
Je ne suis pas sûr de comprendre de quoi il s'agit : faire simplement du HTTPS (HTTP sécurisé par TLS) ou de l'authentification d'un client sur un site web via un certificat…
Pour le HTTPS, voir https://doc.ubuntu-fr.org/tutoriel/secu … 2_avec_ssl, il suffit d'utiliser Let'sEncrypt pour avoir un certificat valide pour tous les navigateurs web.
Et attention aux paramètres HSTS (ne pas recopier n'importe quoi sans en comprendre les implications).
Dernière modification par bruno (Le 12/03/2021, à 09:09)
#6 Le 12/03/2021, à 09:51
- alex2423
Re : Sécuriser l'accès de son serveur Web comme SSH par un certificat privé
Suite à ta question, j'ai cherché de quoi il s'agit. Si j'ai bien compris, c'est une des méthodes qui permettent l'authentification à plusieurs facteurs.
Ton premier lien est vraiment top.
Oui on y apprends qu'une des solutions pour améliorer la sécurité de l'accès de son serveur Web est de rajouter une autre méthode d'authentification de l'existant qui est généralement le mot de passe.
Après rien n'empêche de pas utiliser le mot de passe mais uniquement l'authentification par certificat.
De mon point de vue, le gros avantage est que l'authentification se fait à plus bas niveau, alors que le mot de passe, uniquement au niveau de l'application, du PHP en l’occurrence.
Dans le cas d'une attaque, la personne se fait rejeter par l'application car il ne dispose pas du mot de passe (tout du moins, si les mots de passe sont difficile à deviner, ce qui n'est pas toujours gagner) par contre l'assaillant peut malgré tout accéder au serveur, notamment à la page de login
Imaginons que l'authentification par mot de passe (de l'application hébergée) est représentée par la porte d'entrée d'une maison. En se faisant rejeter par le mot de passe de l'application, l'assaillant se retrouve devant la porte qu'il n'arrive pas à franchir. Je n'y connais rien mais rien ne lui empêche de faire le tour et observer si il n'y aurait pas un autre moyen de s'introduire dans la maison. Une fenêtre ouverte?
Alors qu'avec l'authentification par certificat, le visiteur se fait direct rejeter au portail de la propriété. Sauf erreur de part, dans la vie réelle, on ne laisse pas le portail ouvert du jardin ^^
Je trouve plus logique que l'on vérifie l'identité du client directement au niveau du serveur et non applicatif.
Mais je ne sais si c'est le plus pratique du côté client, et même pour la gestion du serveur. Les spécialistes nous dirons.
J'aime bien cette vidéo à ce passage qui présente les différents type d'authentification : https://youtu.be/EHd-FvKMLuM?t=23
L'authentification par empreinte me semble très compliqué et surtout pas portable du tout. L'authentification par sms, il faut payer un service (quoi que avec Free) mais c'est une authentification au niveau de l'application.
De ce que je comprends, je pense que l'authentification par certificat du client est le plus facile à mettre en place.
Après c'est certain que c'est pas très pratique coté client
Dernière modification par alex2423 (Le 12/03/2021, à 09:58)
Hors ligne
#7 Le 12/03/2021, à 10:23
- bruno
Re : Sécuriser l'accès de son serveur Web comme SSH par un certificat privé
Dans le cas d'une attaque, la personne se fait rejeter par l'application car il ne dispose pas du mot de passe (tout du moins, si les mots de passe sont difficile à deviner, ce qui n'est pas toujours gagner) par contre l'assaillant peut malgré tout accéder au serveur, notamment à la page de login
Sauf qu'une application bien sécurisée va bloquer l'utilisateur au bout d'un certain nombre de tentative infructueuses. Si l’application ne le permet pas directement, on peut recourir à fail2ban. Ce n'est pas une sécurité absolu mais cela rend les attaques par force brute beaucoup plus difficile et limite dans une certaine mesure l'impact des mots de passes faibles.
L'autre point important est de s'assurer que les identifiants ne circulent pas en clair sur le réseau. Donc il faut impérativement utiliser HTTPS.
Imaginons que l'authentification par mot de passe (de l'application hébergée) est représentée par la porte d'entrée d'une maison. En se faisant rejeter par le mot de passe de l'application, l'assaillant se retrouve devant la porte qu'il n'arrive pas à franchir. Je n'y connais rien mais rien ne lui empêche de faire le tour et observer si il n'y aurait pas un autre moyen de s'introduire dans la maison. Une fenêtre ouverte?
La méthode authentification ne changera rien à la présence d'éventuelles portes dérobées (backdoors) ou de failles dans l'application.
Je trouve plus logique que l'on vérifie l'identité du client directement au niveau du serveur et non applicatif.
Cela dépend des cas d'usage. Les serveurs web proposent des méthodes d'authentification. Mais celles-ci ne conviennent pas toujours et dans ce cas c'est à l'application web de gérer l’authentification.
#8 Le 13/03/2021, à 01:10
- jepassaitparla
Re : Sécuriser l'accès de son serveur Web comme SSH par un certificat privé
Bonsoir,
si j'ai bien compris tu cherches à faire ceci:
https://www.abyssproject.net/2020/02/au … ous-nginx/
en plus complet (mais en anglais):
https://www.endpointmanagement.org/2020 … ntication/
une remarque cependant, bien tester/valider la procédure de révocation d'un certificat (qui n'est pas indiquée dans les tutos ci-dessus) pour ne pas être pris(e) au dépourvu le jour où ce sera utile
Bon courage
Dernière modification par jepassaitparla (Le 13/03/2021, à 01:14)
Hors ligne