Modules v3 indispo?

Salut salut,

Je viens de recommencer une installation de gladys v3, je viens de me rendre compte à priori le store de module est indispo.

D’autres personnes ont le même comportement ? Est-ce qu’il y a eu du changement

J’ai migré le store de module v3 en statique vu qu’il n’évolue plus, mais normalement tout fonctionne ! Tu as une erreur en particulier ?

Salut @pierre-gilles,

J’avais bien en tête le changement static.

Grosomodo, tu vois le chargement quand tu vas dans le store module, mais c’est comme s’il ne trouvait rien.

Il me semble qu’il y ai une erreur niveau SSL de tête.

Je reverifirais ça ce soir et je te tiens au courant :wink:

Ok tiens moi au courant ! Peut-être ton cache DNS qui tape encore sur l’ancien serveur?

Maintenant c’est hébergé avec Cloudflare devant donc tout ce qui est SSL c’est eux qui gèrent, normalement peu de chance que ça merde :wink:

Si tu veux tester une requête de l’API tu peux cliquer sur ce lien : https://developer.gladysassistant.com/api/v1/modules/radioemitter?lang=fr

@pierre-gilles, je te confirme c’est un soucis de SSL

 0|gladys   | Sending 500 ("Server Error") response: 
0|gladys   |  Error: write EPROTO 1995423616:error:14077438:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert internal error:../deps/openssl/openssl/ssl/s23_clnt.c:802:
0|gladys   |     at _errnoException (util.js:1022:11)
0|gladys   |     at WriteWrap.afterWrite [as oncomplete] (net.js:867:14)
0|gladys   | Server Error:
0|gladys   | Error: write EPROTO 1995423616:error:14077438:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert internal error:../deps/openssl/openssl/ssl/s23_clnt.c:802:
0|gladys   |     at _errnoException (util.js:1022:11)
0|gladys   |     at WriteWrap.afterWrite [as oncomplete] (net.js:867:14)

Niveau du raspberry

openssl s_client -connect developer.gladysassistant.com:443
CONNECTED(00000003)
1996075008:error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure:../ssl/record/rec_layer_s3.c:1407:SSL alert number 40
no peer certificate available
No client certificate CA names sent
SSL handshake has read 7 bytes and written 176 bytes
Verification: OK

Depuis mon pc portable

openssl s_client -connect developer.gladysassistant.com:443
CONNECTED(00000003)
depth=2 C = IE, O = Baltimore, OU = CyberTrust, CN = Baltimore CyberTrust Root
verify return:1
depth=1 C = US, ST = CA, L = San Francisco, O = "CloudFlare, Inc.", CN = CloudFlare Inc ECC CA-2
verify return:1
depth=0 C = US, ST = CA, L = San Francisco, O = "Cloudflare, Inc.", CN = sni.cloudflaressl.com
verify return:1
Certificate chain
 0 s:C = US, ST = CA, L = San Francisco, O = "Cloudflare, Inc.", CN = sni.cloudflaressl.com
   i:C = US, ST = CA, L = San Francisco, O = "CloudFlare, Inc.", CN = CloudFlare Inc ECC CA-2
 1 s:C = US, ST = CA, L = San Francisco, O = "CloudFlare, Inc.", CN = CloudFlare Inc ECC CA-2
   i:C = IE, O = Baltimore, OU = CyberTrust, CN = Baltimore CyberTrust Root

Le problème ce situe sur l’image, j’ai fais un upgrade système + update ca-certificate pour avoir les nouveaux CA sans résultat

Résolution DNS raspberry

nslookup developer.gladysassistant.com
Server:		fd0f:ee:b0::1
Address:	fd0f:ee:b0::1#53

Non-authoritative answer:
Name:	developer.gladysassistant.com
Address: 104.24.110.63
Name:	developer.gladysassistant.com
Address: 172.67.141.87
Name:	developer.gladysassistant.com
Address: 104.24.111.63

Avec un curl

  pi@gladys:~ $ curl https://developer.gladysassistant.com/api/v1/modules/radioemitter?lang=fr 1
  {"idModule":"79","name":"Radioemitter","description":"Ce module vous permet de contrôler des prises télécommandées 433Mhz depuis Gladys !","slug":"radioemitter","createdAt":"2017-05-02 23:15:19","Developer":"Admin","version":"0.1.0","instructionsHTML":"<h4>Installation</h4>\n<ul>\n<li>Installez tout d'abord le module <a href=\"https://developer.gladysproject.com/en/modules/serial\">Serial</a> dans Gladys</li>\n<li>Puis, installez ce module dans Gladys</li>\n<li>Téléversez ce <a href=\"https://github.com/GladysProject/gladys-radioemitter/blob/master/arduino-code.ino\">code arduino</a> sur votre arduino grâce à <a href=\"https://www.arduino.cc/en/main/software\">l'IDE Arduino</a>. Vous devez avoir les librairires <code>ArduinoJson</code> et <code>RCSwitch</code> installés dans l'IDE. Pour installer ces librairies, dans l'IDE (version &gt; 1.6) allez à &quot;Sketch&quot; =&gt; &quot;Include Library&quot; =&gt; &quot;Manage Libraries&quot;. Puis cherchez &quot;ArduinoJson&quot; et cliquez sur &quot;install&quot;. Pareil pour &quot;RCSwitch&quot;.</li>\n<li>Rebootez Gladys</li>\n<li>Connectez votre arduino en USB au Raspberry Pi</li>\n<li>Cliquez sur le bouton &quot;Configuration&quot; du module Serial dans la vue &quot;modules&quot; du dashboard Gladys</li>\n<li>Créez un device dans Gladys (dans la vue &quot;Mes devices&quot;) avec les informations suivantes: </li>\n</ul>\n<table>\n<thead>\n<tr>\n<th>name</th>\n<th>identifier</th>\n<th>protocol</th>\n<th>service</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>My Switch</td>\n<td>YOUR_DECIMAL_CODE_FOR_THIS_SWITCH_OFF</td>\n<td>radio</td>\n<td>radioemitter</td>\n</tr>\n</tbody>\n</table>\n<ul>\n<li>Puis, créez un deviceType à ce device avec les informations suivantes: </li>\n</ul>\n<table>\n<thead>\n<tr>\n<th>type</th>\n<th>min</th>\n<th>max</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>binary</td>\n<td>0</td>\n<td>1</td>\n</tr>\n</tbody>\n</table>","instructionsMarkDown":"#### Installation\n\n- Installez tout d'abord le module [Serial](https://developer.gladysproject.com/en/modules/serial) dans Gladys\n- Puis, installez ce module dans Gladys\n- Téléversez ce [code arduino](https://github.com/GladysProject/gladys-radioemitter/blob/master/arduino-code.ino) sur votre arduino grâce à [l'IDE Arduino](https://www.arduino.cc/en/main/software). Vous devez avoir les librairires `ArduinoJson` et `RCSwitch` installés dans l'IDE. Pour installer ces librairies, dans l'IDE (version > 1.6) allez à \"Sketch\" => \"Include Library\" => \"Manage Libraries\". Puis cherchez \"ArduinoJson\" et cliquez sur \"install\". Pareil pour \"RCSwitch\".\n- Rebootez Gladys\n- Connectez votre arduino en USB au Raspberry Pi\n- Cliquez sur le bouton \"Configuration\" du module Serial dans la vue \"modules\" du dashboard Gladys\n- Créez un device dans Gladys (dans la vue \"Mes devices\") avec les informations suivantes: \n\n| name | identifier | protocol | service \n| ---| ---| ---| ---| \n| My Switch | YOUR_DECIMAL_CODE_FOR_THIS_SWITCH_OFF | radio | radioemitter \n\n- Puis, créez un deviceType à ce device avec les informations suivantes: \n\n| type | min | max \n| ---| ---| ---|\n| binary | 0 | 1\n","link":"https://github.com/gladysassistant/gladys-radioemitter","img":"ab013250-e946-426d-be67-e2c088d74169.jpg","note":"5","nbNotes":"1"}curl: (7) Couldn't connect to server

Tu as une idée ?

EDIT :

Un peu plus de détails avec curl

* SSL connection using TLSv1.2 / ECDHE-ECDSA-AES128-GCM-SHA256
* ALPN, server accepted to use h2
* Server certificate:
*  subject: C=US; ST=CA; L=San Francisco; O=Cloudflare, Inc.; CN=sni.cloudflaressl.com
*  start date: Nov 21 00:00:00 2019 GMT
*  expire date: Oct  9 12:00:00 2020 GMT
*  subjectAltName: host "developer.gladysassistant.com" matched cert's "*.gladysassistant.com"
*  issuer: C=US; ST=CA; L=San Francisco; O=CloudFlare, Inc.; CN=CloudFlare Inc ECC CA-2
*  SSL certificate verify ok.
* Using HTTP2, server supports multi-use
* Connection state changed (HTTP/2 confirmed)
* Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
* Using Stream ID: 1 (easy handle 0x2a7eb8)
> GET /api/v1/modules/radioemitter?lang=fr HTTP/1.1
> Host: developer.gladysassistant.com
> User-Agent: curl/7.52.1
> Accept: */*
> 

Quand je vois l’erreur dans le log gladys : SSL23_GET_SERVER_HELLO:tlsv1 et quand je vois cela avec curl SSL connection using TLSv1.2, est-ce que le connexion vers le store de module ne se ferait pas avec une version de TLS plus pris en compte par cloudflare ? Type TLS1.0 ?

Bon finalement non : https://www.ssllabs.com/ssltest/analyze.html?d=developer.gladysassistant.com&s=172.67.141.87&latest

Il prends toutes les versions de TLS

Je crois avoir trouver, il n’y aurait pas un soucis avec un servername ?

Okay, I figured out the full solution. When we use “openssl”, if the connection gets terminated with the “alert 40” error, that means we should explicitly specify the servername in our command, so that the server can return the right certificate the client is expecting. For example, the following will work:

pi@gladys:~ $ openssl s_client -connect developer.gladysassistant.com:443 -servername developer.gladysassistant.com
CONNECTED(00000003)
depth=2 C = IE, O = Baltimore, OU = CyberTrust, CN = Baltimore CyberTrust Root
verify return:1
depth=1 C = US, ST = CA, L = San Francisco, O = “CloudFlare, Inc.”, CN = CloudFlare Inc ECC CA-2
verify return:1
depth=0 C = US, ST = CA, L = San Francisco, O = “Cloudflare, Inc.”, CN = sni.cloudflaressl.com
verify return:1

Du moins pas directement le servername.
Le certificat est émit pour sni.cloudflaressl.com qui intégre “subjectAltName: host “developer.gladysassistant.com” matched cert’s “*.gladysassistant.com””

Avec openssl “simplement” sous debien10 pas de soucis, sous raspbian 9, sans préciser le serveurname, on dirait qu’il ne retourne pas le bon certificat d’ou l’erreur.

J’avance un peu, je viens de refaire un test dans cet ordre :

1 - Installation de l’image sur la carte

2 - Création du compte (Des erreurs seront visible)

Dans les logs

  0|gladys   | StateType : create : Inserting stateType Jour
  0|gladys   | StateType : create : Inserting stateType Utilisateur présent
  0|gladys   | StateType : create : Inserting stateType Mode
  0|gladys   | StateType : create : Inserting stateType Utilisateur endormi
  0|gladys   | Brain trained with success ! Added 56 sentences.
  0|gladys   | Brain file saved with success
  0|gladys   | Sending 500 ("Server Error") response: 
  0|gladys   |  Error: write EPROTO 1995657088:error:14077438:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert internal error:../deps/openssl/openssl/ssl/s23_clnt.c:802:
  0|gladys   |     at _errnoException (util.js:1022:11)
  0|gladys   |     at WriteWrap.afterWrite [as oncomplete] (net.js:867:14)
  0|gladys   | Server Error:
  0|gladys   | Error: write EPROTO 1995657088:error:14077438:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert internal error:../deps/openssl/openssl/ssl/s23_clnt.c:802:
  0|gladys   |     at _errnoException (util.js:1022:11)
  0|gladys   |     at WriteWrap.afterWrite [as oncomplete] (net.js:867:14)

3 - Lancement de upgrade gladys avec le script

A ce moment la les modules seront disponible.

4 - Upgrade raspbian pour avoir un système à jour

Le store de modules ne sera plus dispo.

Il doit y avoir une mise à jours qui pose probème pour récupérer les modules

Effectivement, sur ssllabs on voit bien que certaines versions trop vieilles de OpenSSL ne sont pas compatible avec les certificats que délivre CloudFlare.

La dernière image Raspbian de Gladys 3 date de plus de 2 ans, ça ne m’étonne pas.

J’ai tenté un quick-fix, j’ai désactivé le proxying Cloudflare pour que l’API tape directement sur Netlify sans passer par Cloudlfare. Chez Netlify, c’est des certificats Let’s Encrypt. Pas dit que ça fonctionne mieux, mais on aura tenté !

Le temps que la propagation DNS se fasse, tu pourras retester ensuite ?

Après, honnêtement je ne sais pas combien de temps l’image Raspbian v3 peut tenir sans mise à jour… Si tu veux rester en v3 pour l’instant, il faudra probablement que tu mettes à jour les paquets sur l’image pour que ça continue de tourner :slight_smile:

Actuellement il n’y a pas de let’s encrypt dessus, c’est le wildcard de netlify.com

openssl s_client -connect developer.gladysassistant.com:443
CONNECTED(00000005)
depth=2 C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert Global Root CA
verify return:1
depth=1 C = US, O = DigiCert Inc, CN = DigiCert SHA2 Secure Server CA
verify return:1
depth=0 C = US, ST = ca, L = San Francisco, O = "Netlify, Inc", CN = *.netlify.com
verify return:1

Donc forcément une erreur en https :

Les sites web justifient leur identité par des certificats. Firefox ne fait pas confiance à ce site, car il utilise un certificat qui n’est pas valide pour developer.gladysassistant.com. Le certificat est seulement valide pour les noms suivants : *.netlify.com, netlify.com

Code d’erreur : SSL_ERROR_BAD_CERT_DOMAIN

Je ne pense pas pouvoir retester aujourd’hui, demain ce devrait être faisable.

Debian 9 est encore sous support jusqu’en 2022, donc niveau des mises à jours ce n’est pas problèmatique. Ce serait plutôt coté nodejs s’il y a des upgrades avec des fonctions plus supportés ou autres que niveau système pure.

Effectivement, le temps que la propagation DNS se fasse, Netlify a galéré à générer le certificat la première fois. Je viens de relancer une génération, ça a l’air d’être passé cette fois-ci.

C’est pas le système mais les packages installés qui sont vieux. Cloudlfare c’est quand même assez robuste, utilisé par 13% de l’internet donc si ça marche pas c’est que la version d’openssl utilisée doit être vraiment vieille, ça ne m’étonne pas.

Je suis vraiment pas sur que ça fonctionne mieux avec Netlify/Let’s Encrypt, à toi de me dire :slight_smile:

Ce n’est pas que la version d’openssl. Pour une configuration web, tu as la gestion de cipher, suivant ce que tu choisis, tu n’accepteras pas certaines connexion.

Aujourd’hui, il ne devrait y avoir que du TLS1.2 et 1.3. Après c’est une histoire de contrainte et gestion du risque. Regarde les résultats ssl labs de site type amazon, ou des organismes en France. Beaucoup on des notes relativement base en acceptant du tls1.0 et tls1.1

Si cloudflare décide de ne plus supporter des anciens protocole, il y aurait beaucoup de trafic client qui ne passerait pas, les gens penserait que cloudflare fonctionne mal, eux perdrait du transit

https://m.nextinpact.com/brief/microsoft-precise-la-fin-de-tls-1-0-et-1-1-dans-ses-navigateurs-11844.htm

Dans tous les cas, ce n’est plus qu’une question de petit mois sachant que les navigateurs ne vont plus les prendre en charge. A savoir que les nav type sur un XP sp3 est capable de travailler en tls1.2

C’était la petite note culture SSL ^^

2 Likes

Et du coup, ça marche chez toi avec Let’s Encrypt ? :slight_smile:

Je viens de faire le test, à priori ça fonctionne, par contre j’ai un doute.

Dans les logs gladys, clairemment y’a un soucis de ssl, rien que pour l’initialisation du compte.

Je viens de me rendre compte qu’avec chromium le store de module est ok, firefox non. Donc il faudrait que je fasse un peu plus de test.

Dans tous les cas, j’ai pu tester un module et sa config : Pas de soucis.

Mon architecture réseau à encore pas mal bouger depuis l’année dernière ou le point d’accès dédié domotique était sur le pi avec un parefeu pour bloquer les devices vers internet. Le gros soucis de cette config, c’est la découverte des devices se fait mal vu qu’il y a plusieurs interfaces sur le raspberry, avec un peu de bidouille ça passe (mais c’est chiant :slight_smile: )

La je viens de tester une autre configuration :

  • un vlan dédié domotique
  • un raspberry avec gladys en access sur le vlan domotique
  • un raspberry point d’acces avec un bridge entre eth0 et vlan0 le tout en access vlan domotique
  • un serveur ou il y a l’interface domotique entre autres qui sert pour la virtu, nas, firewall.

Du coup, possibilité d’isoler la domotique sur un réseau, tout en donnant accès à gladys sur le net pour les upgrades et bloquer la domotique sur le net :slight_smile:

Si ça peut intérésser quelqu’un vu que je suis encore dans ma phase à tout casser et tout refaire je ne sais combien de fois pour être sur, je pourrais faire un espèce de tuto sur une config comme cella la, ou le serveur peut être remplacer par un raspberry, voir même celui qui sert d’access point

C’est peut être un peu paranoiac, mais j’aime pas savoir que l’ampoule puisse aller se balader sur internet tranquillement :slight_smile:

Ça m’intéresse beaucoup ( hard et soft)

ça marche je ferais ça.

Pour les softs ça se fait avec hostapd , isc-dhcp-server et vlan (pour le firewall)

En hardware, il faut juste un switch qui travail avec les vlans, pour un basic type 5ports, ça se trouve facilement en tplink pour environ 30€ https://www.amazon.fr/TP-Link-TL-SG105E-Administrable-Gigabit-Boîtier/dp/B00N0OHEMA/ref=sr_1_2?__mk_fr_FR=ÅMÅŽÕÑ&dchild=1&keywords=tplink+vlan&qid=1591902380&sr=8-2

Pour un 8port POE + 2SFP c’est au alentour de 100€ https://www.amazon.fr/TP-Link-T1500G-10PS-TL-SG2210P-Administrable-Gigabit/dp/B0725SRJVZ/ref=sr_1_5?__mk_fr_FR=ÅMÅŽÕÑ&dchild=1&keywords=tp+link+vlan+poe&qid=1591902408&sr=8-5

J’ai les deux modèles, le 5ports ne gère pas le snmp pour le monitoring et analyse.

Un petit schéma (moche fait rapidement)

Untitled Diagram(1)
Grosomodo

  • les ports du switch pour gladys et le raspberry point d’accès / dhcp sont en access vlan 2050, comme ça le device n’a pas a tagger les trames et ont pour gateway le 192.168.50.251 qui est mon serveur.
  • le port de la freebox est en access vlan203, idem elle n’a pas connaissance qu’elle est sur un vlan c’est le switch qui fait le boulot.
  • le serveur est en trunk vlan 203 et 2050, lui par contre à des interfaces réseaux qui tag les vlan suivant les interfaces. Sa gateway est la freebox pour aller sur le net et c’est lui qui s’occupe de faire le routage entre le vlan 2050 et le 203.

Comme ça, je peux autoriser uniquement la 50.1 et 50.2 pour aller sur internet et bloquer tout le reste.

Pour le raspberry dhcp/point d’accès, les interfaces eth0 et wlan0 sont sur un bridge (https://blog.ithasu.org/2016/10/using-a-raspberry-pi-3-as-a-wifi-access-point-and-bridge/)

Coté firewall, c’est shorewall qui fait le boulot.

Pour gagner de la place, le rôle du parefeu peut être fait sur le raspberry dhcp avec une carte usb/rj supplémentaire.

J’avoue que ce type de config n’est pas pour monsieur et madame tout le monde, mais avec un minimum de connaissance et un exemple bien fait en l’adaptant, ce n’est pas compliqué dans le fond.

D’ici ce week end je pense que j’aurais le temps en remontant gladys de faire un topic dédié avec toute la configuration, du switch, raspberry, parefeu. Il faudra que je coupe des bouts, j’ai 3 switch en cascades :sweat_smile: )