ESP32 en client et authentifiaction

Forum dédié aux bricolages d'objets connectés IOT et leurs communications avec DomoticZ :
- Remplacement de firmware des prises, modules relais ...
- Fabrication à base d'ESP8266, de NodeMCU, de Weemos et consorts ...
dje8269
Messages : 11
Inscription : 22 juil. 2021, 20:15

ESP32 en client et authentifiaction

Message par dje8269 »

Bonjour à tous,

J'ai créer une page web sur un serveur extérieur. Cette page me permet de piloter mon esp32 qui est à la maison.
Contrairement à de très utilisateur le serveur web est donc pas dans mon esp. L'esp agit en client.

Afin la mise en place de fichier ".htaccess" et ".htpasswd" tout fonctionnait à merveille. Après la mise au point, j'ai donc naturellement voulu protéger ma page web par mot de passe. J'ai donc rajouter les fichiers ".htaccess" et ".htpasswd" sur ma serveur.

Coté web pas de problème il me demande bien un mot de passe pour pouvoir entrer sur ma page de contrôle. Là où cela se gâte c'est donc que mon ESP n'arrive plus a se connecter à mon serveur.
Je trouve des infos que l'ESP est en mode serveur mais aucune quand l'ESP doit se connecter en tant que client sur un serveur protéger.

SI vous savez comment faire ce serait génial !

Merci de m'avoir lu
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: ESP32 en client et authentifiaction

Message par Keros »

Bonjour dje8269 et bienvenue sur le forum ;)

Tu pourrais contourner la difficulté en autorisant l'IP de ton ESP dans ton htaccess : allow from 192.168.XXX.XXX
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
dje8269
Messages : 11
Inscription : 22 juil. 2021, 20:15

Re: ESP32 en client et authentifiaction

Message par dje8269 »

Bonjour Keros ,

Merci pour cette excellent réponse qui m'as donnée espoir .

Mais de courte durée car cela ne fonctionne pas malheureusement. Cette solution me paraissait vraiment idéale pourtant.

Je pense que je mélange plein de truc en faite. entre le HTTPS le port du serveur et les requêtes dur dur de savoir d'où vient le problème !

sans fichier htaccess aucun probléme j'accéde a mon serveur comme ceci :

Code : Tout sélectionner

//-------   Connection au serveur
// avec cette fonction je me connecte au serveur avec un time-out de 2 secondes
void connection_serveur(){
  int LOC_compteur = 0 ;  
  
  client.connect(serveur,80); 
 
  while(!client.connected()){   // boucle pour tester pendant 2 secondes max
          delay(10);
          LOC_compteur++ ;
          if ( LOC_compteur >= 200){
               LOC_compteur = 0;
               break;              
             }
       }
  if (!client.connected()){
      Serial.println("la connection du serveur à échouer");    
  } else {
      Serial.println("connexion serveur OK");
  }  
  Serial.println("");
  delay(10);
}

//--------------------------------------------------------------------------------------------------------------------------
// Cette fonction envoie une requete au serveur pour recuperer les données
void lecture_BDD(){
  
    Serial.println("LECTURE_BDD");
    
    connection_serveur();                                   // Connection au serveur
    
    client.println("GET /Read_Base_ESP.php HTTP/1.1");      // Je vais lire la base de données
    client.println("Host: serveur.xxxxxxx.fr") ;
    client.println("Connection: close");
    client.println();
}; 
La réponse du serveur est impeccable je vais bien lire ma base de données

Code : Tout sélectionner

LECTURE_BDD
connexion serveur OK

HTTP/1.1 200 OK
Server: nginx
Date: Fri, 23 Jul 2021 06:34:37 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: close
X-Powered-By: PHP/5.4.45
Vary: Host,Accept-Encoding

77
 LED1=1<br>LED2=1<br>LED3=0<br>INTER=0<br>POTAR1=1773<br>POTAR2=1751<br>BUZ=0<br>MAJ=56<br>MAJ_web=56<br>MAJ_ESP=56<br>
0

ensuite je rajoute le fichier htaccess comme cela :
Donc normalement j'autorise tout le monde

Code : Tout sélectionner

AuthName "Accès restreint"
AuthType basic
AuthUserFile "/var/www/xxxx.fr/htdocs/serveur.xxxx.fr/.htpasswd"
AuthGroupFile /dev/null
Require valid-user

Allow from all
Voila la réponse que j'obtiens :
Je rentre bien dans la fonction "lecture BDD" ensuite la connexion au serveur à l'air de se faire car j'ai bine ma phrase "connexion serveur OK", c'est ensuite dans la construction de la requête pour interroger ma base qu'il y a problème non ? car il me marque unauthorized !!

Je vois un HTTP peut être ua lieu d'un HTTPS ?

Code : Tout sélectionner

Début de la connexion au WIFI..............................................................................................................

Connexion WIFI établie!
Adresse IP: 192.168.1.22
Passerelle IP : 192.168.1.1
DNS IP : 192.168.1.1
--------------------------------

LECTURE_BDD
connexion serveur OK

HTTP/1.1 401 Unauthorized
Server: nginx
Date: Fri, 23 Jul 2021 07:02:18 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: close
WWW-Authenticate: Basic realm="Accès restreint"
Vary: Host
Accept-Ranges: bytes

7ac
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="robots" content="none,noindex,nofollow">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="pragma" content="no-cache">
<TITLE>401 Authorization Required</TITLE>
</HEAD>
<BODY>
<H1>Authorization Required</H1>
<P>This server could not verify that you
are authorized to access the document
requested.  Either you supplied the wrong
credentials (e.g., bad password), or your
browser doesn't understand how to supply
the credentials required.</p>
<HR />
<H1>Autorisation Requise</H1>
<P>Ce serveur n'a pas pu vérifier votre
autorisation pour accéder au document
demandé. Vous avez fourni la mauvaise
information (identifiant ou mot de passe). </p>
<HR />
<H1>Autorizacion Requerida</H1>
<P>El servidor no pudo verificar la autorizacion para acceder al documento solicitado.
Usted pudo entrar datos erroneos (como la contraseña), o su navegador no puede enviar la informacion correcta.</p>
<HR />
<ADDRESS>
Web Server at serveur.xxxx.fr  |  Powered by www.lws.fr
</ADDRESS>
</BODY>
</HTML>

<!--
   - Unfortunately, Microsoft has added a clever new
   - "feature" to Internet Explorer. If the text of
   - an error's message is "too small", specifically
   - less than 512 bytes, Internet Explorer returns
   - its own error message. You can turn that off,
   - but it's pretty tricky to find switch called
   - "smart error messages". That means, of course,
   - that short error messages are censored by default.
   - IIS always returns error messages that are long
   - enough to make Internet
Voila si vous voulez que je fasse des test dites moi quoi faire car cela dépasse mes compétences et je suis perdu !

Est-ce que le fait de mettre un fichier htaccess rend mon code sécuriser et du coup je passe en https ?

Merci
dje8269
Messages : 11
Inscription : 22 juil. 2021, 20:15

Re: ESP32 en client et authentifiaction

Message par dje8269 »

quand je rentre l'adresse du serveur dans le navigateur il me demande toujours un login et un mot de passe ! même avec un fichier".htaccess" qui autorise tout le monde.
Le problème doit se trouver ici. C'est peut-être pour cela qu'il me marque "unauthorized" car l'ESP n'est pas conencté avec le password et le user.

Quand je modifie la requete comme ceci :

Code : Tout sélectionner

client.println("GET /Read_Base_ESP.php HTTPS/1.1");      // Je vais lire la base de données
La réponse est différente :

Code : Tout sélectionner

LECTURE_BDD
connexion serveur OK

HTTP/1.1 400 Bad Request
Server: nginx
Date: Fri, 23 Jul 2021 07:24:01 GMT
Content-Type: text/html
Content-Length: 166
Connection: close

<html>
<head><title>400 Bad Request</title></head>
<body bgcolor="white">
<center><h1>400 Bad Request</h1></center>
<hr><center>nginx</center>
</body>
</html>
J'ai l'impression qu'il m'indique que la requête est mauvaise ce coup-ci et pas qu'elle n'est pas autorisée. Donc rajouter le "S" après le HTPP ne me parait pas correct.
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: ESP32 en client et authentifiaction

Message par Keros »

Je suis loin d'être un expert mais il ne me semble pas que le http ou le https change quelque chose.

Par contre, les exemples que je trouve sur le net sont avec

Code : Tout sélectionner

 AuthName "Username and password required"
 AuthUserFile /home/path/.htpasswd
 AuthType Basic
 Require valid-user
 Order Deny,Allow
 Deny from all
 Allow from 111.222.333.444
 Satisfy Any
Essaye peut-être de faire fonctionner un htaccess sans authentification pour le moment (en bloquant tout le monde sauf l'IP) et ensuite tu ajouteras la couche pour le mot de passe.
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
dje8269
Messages : 11
Inscription : 22 juil. 2021, 20:15

Re: ESP32 en client et authentifiaction

Message par dje8269 »

Dans la théorie ca devrait fonctionner .

Je comprends pas ca ne fonctionne pas.

Si je marque

Code : Tout sélectionner

Order Deny,Allow
 Deny from all
  Satisfy Any
tous mes devices me demande un mot de passe quand j'essaye de venir sur la page web. Téléphone, ordinateur et l'esp ne se connecte pas. c'est normal tout est OK

Quand je marque :

Code : Tout sélectionner

 Order Deny,Allow
 Allow from all
 Satisfy Any
[/code]

Tous mes devices se connecte sans mot de passe et j'arrive à lire ma page. L'esp focntionne parfaitement.

Maintenant je rajoute l'IP de ma box, de mon ordi, et de mon ESP avec allow . Donc normalement il empeche tout le monde et ensuite il autorise seulement les IP.

Code : Tout sélectionner

Order Deny,Allow
 Deny from all
 
 Allow from 192.168.1.22
 Allow from 192.168.1.17 
 Allow from 192.168.1.1 
 Satisfy Any
Ben la il me demande un mot de passe a chaque fois donc l'esp ne fonctionne plus ! pourquoi il ne prends pas en compte ces directives ?
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: ESP32 en client et authentifiaction

Message par Keros »

Pour moi, la syntaxe est bonne :

Code : Tout sélectionner

order deny,allow
deny from all
allow from 192.168.1.2
Essaye peut-être sans les majuscules. Enlève l'IP de ta box (normalement tu n'as pas besoin) et le Satisfy Any.

Tu as redémarré ton serveur ? Tu as essayé en enlevant le htpasswd ?

Normalement, il ne devrait plus te demander de mot de passe, tu devrais avoir une page d'erreur ... Tu n'as pas de protection "au-dessus" qui bloquerait ?
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
dje8269
Messages : 11
Inscription : 22 juil. 2021, 20:15

Re: ESP32 en client et authentifiaction

Message par dje8269 »

Vraiment merci d'essayer de m'aider c'est vraiment sympa !

J'ai essayé toute les combinaisons possibles rien n'y fait! avec et sans les majuscules avec ou sans les IP etc .....
A chaque fois j'essaye pour toute les configurations possibles.

Pour le serveur je sais pas faire c'est un hébergeur pro. je ne pense pas avoir un accès surtout qu'il est mutualisé.
Je pensais à un delais mais quand je fais des modifs elles sont tout de suite prisent en compte donc normalement pas de délais.

Si j’enlève le .htpasswd , j'ai les même problèmes.

Du coup sans mot de passe comme tu me l'as conseillé, je comprends pas. C'est soit j'autorise l'access soit je le refuse.
Normalement en mettant une IP il doit autoriser.

C'est donc que l'autorisation n'est pas effective, ou pas la bonne IP . J'ai verifier 1000 fois mes IP
192.168.1.1 ca c"'est ma box
192.168.1.17 ca c'est mon ordi en filaire et en IP fixe
192.168.1.16 Ca c'est mon téléphone en wifi
192.168.1.22 Ca c'est mon ESP .

J'ai vérifier en allant directement dans les paramètres de ma box et même avec un IPconfig dans la console

Ce qui me chifonne le plus c'est quand mettant seulement "Deny from all" aucun access pour personne. en mettant "Allow from all" totu le monde y accéde, donc cette partie fonctionne.

Pourquoi quand je mets exceptions il ne les prends pas en compte ? ca me rend fou
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: ESP32 en client et authentifiaction

Message par Keros »

Attends, tu parles de serveur mutualisé ? Il n'est pas sur ton réseau local ?
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
dje8269
Messages : 11
Inscription : 22 juil. 2021, 20:15

Re: ESP32 en client et authentifiaction

Message par dje8269 »

et non justement.....
C'est pour cela que j'ai du ma l à trouver des infos, car mon serveur n'est pas sur L'ESP32 comme 99% des personnes.
Mon esp32 est un client qui se connecte sur un serveur exterieur. Je ne suis pas en LOCAL.

Mais ca change quelques choses ?
Répondre