[SPIP Zone] Certificat de spip.net

Bonjour,

pour faire suite à la discussion sur le forum , je lance ce nouveau fil de discussion.

Comme je le disais, le RSSI a effectué des tests et sa conclusion est la suivante :

Alors pour faire court, le spip_loader construit ses connexions réseaux « à la main » (sans être péjoratif du tout) au travers d’appels de fsockopen.

Le type de flux désiré (UDP, TCP, SSL/TLS) se fait au moment de l’ouverture de la socket réseau.
fsockopen(«  », 80, … ) pour http fsockopen(« udp://dns.ac-amiens.fr », 53, … ) pour DNS fsockopen(« ssl://www.ac-amiens.fr », 443, … ) pour https fsockopen(« tls://smtp.ac-amiens.fr », 465, … ) pour du smtps etc… Dans le cas d’un proxy, la connexion ne se fait pas vers le serveur de destination mais on ouvre une socket simple (tcp) vers le serveur proxy et ensuite, on effectue des demandes de connexions au « vrai » serveur au travers de cette socket. Là où ça se complique trop, c’est dans dans connexions « mixtes » : bascule http vers https lors d’une redirection (type 301 redirect) car le mode connexion pour un flux chiffré (TLS ou SSL) réclame de nombreuses opération supplémentaires (helo, handshake, vérification des certificats sources et destinations etc…) et toutes ces opérations ne sont pas implémentées dans les fonctions utilisées par spip_loader (et peut être spip aussi…). Bref, c’est une implémentation complète d’un client http qu’il faudrait intégrer. Ce qui était parfaitement suffisant dans le cas d’une connexion « en clair » se révèle maintenant inopérant. A moins de vouloir réinventer la roue, il semblerait bien plus efficace d’abandonner le mode « à la main » pour privilégier un client http plus complet (via la libcurl par exemple, exhaustive de ce point de vue). C’est, à ne pas douter, ce que les devs de spip vont prochaine devoir implémenter. En mode transitoire, la solution serait de ne pas faire de renvoi http=>https tant que les mises à jours ne sont pas disponibles, ou, à défaut, créer un miroir local des dépôts SPIP accessible en http.

La dessus, il à modifier le spip_loader (fichier joint) pour prendre en charge les serveurs hébergés derrière un proxy.

Cela permet de suivre un redirect (301) de http vers https qui n’est pas implémenter dans la version actuelle.

Le script ne change rien à ceux qui n’ont pas php5-curl (ou php-curl en php7) ou qui n’ont pas de proxy de défini.

Il continue ses investigations afin de permettre à nouveau le fonctionnement de la mise à jour des dépôts non fonctionnelle également (tout comme « mise à jour auto » de Couteau Suisse)

spip_loader_support_proxy_https_redirect_via_curl.diff (1.77 KB)

Bonjour

Merci pour le retour pour faciliter le suivi de ce retour, une demande
a été ouverte sur core.spip.net

https://core.spip.net/issues/3967

Ne pas hésiter à la compléter si besoin.

Merci encore

Km

Le 26/06/2017 à 23:29, Willy Destrez a écrit :

Bonjour,

pour faire suite à la discussion sur le forum SPIP Forums, je lance ce nouveau fil de discussion.

Comme je le disais, le RSSI a effectué des tests et sa conclusion est la suivante :

Alors pour faire court, le spip_loader construit ses connexions réseaux "à la main" (sans être péjoratif du tout) au travers d'appels de fsockopen.

Le type de flux désiré (UDP, TCP, SSL/TLS) se fait au moment de l'ouverture de la socket réseau.
fsockopen("www.ac-amiens.fr", 80, ... ) pour http
fsockopen("udp://dns.ac-amiens.fr", 53, ... ) pour DNS
fsockopen("ssl://www.ac-amiens.fr", 443, ... ) pour https
fsockopen("tls://smtp.ac-amiens.fr", 465, ... ) pour du smtps
etc...

Dans le cas d'un proxy, la connexion ne se fait pas vers le serveur de destination mais on ouvre une socket simple (tcp) vers le serveur proxy et ensuite, on effectue des demandes de connexions au "vrai" serveur au travers de cette socket.

Là où ça se complique trop, c'est dans dans connexions "mixtes" : bascule http vers https lors d'une redirection (type 301 redirect) car le mode connexion pour un flux chiffré (TLS ou SSL) réclame de nombreuses opération supplémentaires (helo, handshake, vérification des certificats sources et destinations etc...) et toutes ces opérations ne sont pas implémentées dans les fonctions utilisées par spip_loader (et peut être spip aussi...).
Bref, c'est une implémentation complète d'un client http qu'il faudrait intégrer.

Ce qui était parfaitement suffisant dans le cas d'une connexion "en clair" se révèle maintenant inopérant.
A moins de vouloir réinventer la roue, il semblerait bien plus efficace d'abandonner le mode "à la main" pour privilégier un client http plus complet (via la libcurl par exemple, exhaustive de ce point de vue).
C'est, à ne pas douter, ce que les devs de spip vont prochaine devoir implémenter.

En mode transitoire, la solution serait de ne pas faire de renvoi http=>https tant que les mises à jours ne sont pas disponibles, ou, à défaut, créer un miroir local des dépôts SPIP accessible en http.

La dessus, il à modifier le spip_loader (fichier joint) pour prendre en charge les serveurs hébergés derrière un proxy.

Cela permet de suivre un redirect (301) de http vers https qui n'est pas implémenter dans la version actuelle.

Le script ne change rien à ceux qui n'ont pas php5-curl (ou php-curl en php7) ou qui n'ont pas de proxy de défini.

Il continue ses investigations afin de permettre à nouveau le fonctionnement de la mise à jour des dépôts non fonctionnelle également (tout comme "mise à jour auto" de Couteau Suisse)

Cordialement

Bonjour,

pour faire suite aux remontées concernant spip_loader, voici une nouvelle modification apportée au fichier "ecrire/inc/distant.php" afin de gérer le SNI et donc permettre de rendre à nouveau fonctionnels l'ajout de dépôt et la vérification des mises à jour des extensions.

Le .diff a également été posté sur Suivre les redirections http/https/proxy (#3967) · Tickets · spip / spip · GitLab et je suis désormais inscrit à la liste spip-dev également histoire de suivre la discussion avec Olivier de l’académie de Rouen.

Cordialement

Le 27/06/2017 à 14:08, Willy Destrez | Académie d'Amiens a écrit :

Le 26/06/2017 à 23:29, Willy Destrez a écrit :

Bonjour,

pour faire suite à la discussion sur le forum SPIP Forums, je lance ce nouveau fil de discussion.

Comme je le disais, le RSSI a effectué des tests et sa conclusion est la suivante :

Alors pour faire court, le spip_loader construit ses connexions réseaux "à la main" (sans être péjoratif du tout) au travers d'appels de fsockopen.

Le type de flux désiré (UDP, TCP, SSL/TLS) se fait au moment de l'ouverture de la socket réseau.
fsockopen("www.ac-amiens.fr", 80, ... ) pour http
fsockopen("udp://dns.ac-amiens.fr", 53, ... ) pour DNS
fsockopen("ssl://www.ac-amiens.fr", 443, ... ) pour https
fsockopen("tls://smtp.ac-amiens.fr", 465, ... ) pour du smtps
etc...

Dans le cas d'un proxy, la connexion ne se fait pas vers le serveur de destination mais on ouvre une socket simple (tcp) vers le serveur proxy et ensuite, on effectue des demandes de connexions au "vrai" serveur au travers de cette socket.

Là où ça se complique trop, c'est dans dans connexions "mixtes" : bascule http vers https lors d'une redirection (type 301 redirect) car le mode connexion pour un flux chiffré (TLS ou SSL) réclame de nombreuses opération supplémentaires (helo, handshake, vérification des certificats sources et destinations etc...) et toutes ces opérations ne sont pas implémentées dans les fonctions utilisées par spip_loader (et peut être spip aussi...).
Bref, c'est une implémentation complète d'un client http qu'il faudrait intégrer.

Ce qui était parfaitement suffisant dans le cas d'une connexion "en clair" se révèle maintenant inopérant.
A moins de vouloir réinventer la roue, il semblerait bien plus efficace d'abandonner le mode "à la main" pour privilégier un client http plus complet (via la libcurl par exemple, exhaustive de ce point de vue).
C'est, à ne pas douter, ce que les devs de spip vont prochaine devoir implémenter.

En mode transitoire, la solution serait de ne pas faire de renvoi http=>https tant que les mises à jours ne sont pas disponibles, ou, à défaut, créer un miroir local des dépôts SPIP accessible en http.

La dessus, il à modifier le spip_loader (fichier joint) pour prendre en charge les serveurs hébergés derrière un proxy.

Cela permet de suivre un redirect (301) de http vers https qui n'est pas implémenter dans la version actuelle.

Le script ne change rien à ceux qui n'ont pas php5-curl (ou php-curl en php7) ou qui n'ont pas de proxy de défini.

Il continue ses investigations afin de permettre à nouveau le fonctionnement de la mise à jour des dépôts non fonctionnelle également (tout comme "mise à jour auto" de Couteau Suisse)

Cordialement

Bonjour,

pour faire suite aux remontées concernant spip_loader, voici une nouvelle modification apportée au fichier "ecrire/inc/distant.php" afin de gérer le SNI et donc permettre de rendre à nouveau fonctionnels l'ajout de dépôt et la vérification des mises à jour des extensions.

Le .diff a également été posté sur Suivre les redirections http/https/proxy (#3967) · Tickets · spip / spip · GitLab et je suis désormais inscrit à la liste spip-dev également histoire de suivre la discussion avec Olivier de l’académie de Rouen.

Cordialement

avec pièce jointe, c'est mieux

--

Cordialement

spip_distant_php_add_SNI.diff (736 Bytes)

Salut Willy,

Merci d'être passé ici pour poursuivre la discussion qu'on a entamé sur le forum :slight_smile:

Le 27/06/2017 à 14:08, Willy Destrez | Académie d'Amiens a écrit :

Le 26/06/2017 à 23:29, Willy Destrez a écrit :

Dans le cas d'un proxy, la connexion ne se fait pas vers le serveur de destination mais on ouvre une socket simple (tcp) vers le serveur proxy et ensuite, on effectue des demandes de connexions au "vrai" serveur au travers de cette socket.

Il y a tout même un truc que je ne comprends pas au niveau de votre infra. J'ai pour ma part des sites hébergés chez Infini (hébergeur associatif brestois) chez qui on utilise aussi un proxy, et on ne rencontre aucun problème avec les domaines de spip.net et plugins.spip.net (adresse utilisée pour la récupération des mises à jour de plugins).

En ce qui concerne spip.net, je peux me fendre des frais nécessaires à l'installation d'une adresse IP spécifique à ce domaine, mais sans être certain que cela réglerait le problème de votre côté.

Amha, il serait intéressant que T. Voyat (si c'est lui qui t'a donné ces infos) passe en discuter ici, car il me semble étonnant qu'on doive apporter une modification à spip_loader et au core de SPIP pour une configuration réseau "exotique".

D'autres avis sur la question ?

++
b_b

Hello,

Pour spip-loader je passe, mais pour le core on avait déjà un ticket qui disait la même chose à peu près et que je trainais à intégrer par manque de config pour reproduire

Je considère donc que vous vous recoupez et êtes d'accords et c'est intégré dans

http://core.spip.org/projects/spip/repository/revisions/23622
et
http://core.spip.org/projects/spip/repository/revisions/23623

Je laisse ceux qui veulent voir pour spip-loader.

--
Cédric

Bruno Bergot a écrit :

Salut Willy,

Merci d'être passé ici pour poursuivre la discussion qu'on a entamé sur
le forum :slight_smile:

Le 27/06/2017 à 14:08, Willy Destrez | Académie d'Amiens a écrit :

Le 26/06/2017 à 23:29, Willy Destrez a écrit :

Dans le cas d'un proxy, la connexion ne se fait pas vers le serveur
de destination mais on ouvre une socket simple (tcp) vers le serveur
proxy et ensuite, on effectue des demandes de connexions au "vrai"
serveur au travers de cette socket.

Il y a tout même un truc que je ne comprends pas au niveau de votre
infra. J'ai pour ma part des sites hébergés chez Infini (hébergeur
associatif brestois) chez qui on utilise aussi un proxy, et on ne
rencontre aucun problème avec les domaines de spip.net et
plugins.spip.net (adresse utilisée pour la récupération des mises à jour
de plugins).

En ce qui concerne spip.net, je peux me fendre des frais nécessaires à
l'installation d'une adresse IP spécifique à ce domaine, mais sans être
certain que cela réglerait le problème de votre côté.

Amha, il serait intéressant que T. Voyat (si c'est lui qui t'a donné ces
infos) passe en discuter ici, car il me semble étonnant qu'on doive
apporter une modification à spip_loader et au core de SPIP pour une
configuration réseau "exotique".

D'autres avis sur la question ?

++
b_b
----
spip-zone@rezo.net - http://listes.rezo.net/mailman/listinfo/spip-zone

Le 27/06/2017 à 14:59, Bruno Bergot a écrit :

Salut Willy,

Merci d'être passé ici pour poursuivre la discussion qu'on a entamé sur le forum :slight_smile:

Le 27/06/2017 à 14:08, Willy Destrez | Académie d'Amiens a écrit :

Le 26/06/2017 à 23:29, Willy Destrez a écrit :

Dans le cas d'un proxy, la connexion ne se fait pas vers le serveur de destination mais on ouvre une socket simple (tcp) vers le serveur proxy et ensuite, on effectue des demandes de connexions au "vrai" serveur au travers de cette socket.

Il y a tout même un truc que je ne comprends pas au niveau de votre infra. J'ai pour ma part des sites hébergés chez Infini (hébergeur associatif brestois) chez qui on utilise aussi un proxy, et on ne rencontre aucun problème avec les domaines de spip.net et plugins.spip.net (adresse utilisée pour la récupération des mises à jour de plugins).

En ce qui concerne spip.net, je peux me fendre des frais nécessaires à l'installation d'une adresse IP spécifique à ce domaine, mais sans être certain que cela réglerait le problème de votre côté.

Amha, il serait intéressant que T. Voyat (si c'est lui qui t'a donné ces infos) passe en discuter ici, car il me semble étonnant qu'on doive apporter une modification à spip_loader et au core de SPIP pour une configuration réseau "exotique".

D'autres avis sur la question ?

++
b_b

je donne copie de ta réponse à Thierry pour qu'il puisse éventuellement apporter des éléments complémentaires.

--

Cordialement

Re Willy,

T'emmerde pas, Cedric vient d'envoyer un patch qui devrait fixer le problème de votre côté. Je te laisse nous confirmer que c'est bien le cas :slight_smile:

++
b_b

Le 27/06/2017 à 15:07, Willy Destrez | Académie d'Amiens a écrit :

je donne copie de ta réponse à Thierry pour qu'il puisse éventuellement apporter des éléments complémentaires.

Le 27/06/2017 à 15:10, Bruno Bergot a écrit :

Re Willy,

T'emmerde pas, Cedric vient d'envoyer un patch qui devrait fixer le problème de votre côté. Je te laisse nous confirmer que c'est bien le cas :slight_smile:

++
b_b

Le 27/06/2017 à 15:07, Willy Destrez | Académie d'Amiens a écrit :

je donne copie de ta réponse à Thierry pour qu'il puisse éventuellement apporter des éléments complémentaires.

le patch correspond à ce que Thierry avait proposé seulement "SNI_server_name" est déprécié et devrait être remplacé "peer_name""

    $streamContext = stream_context_create(array('ssl' => array('verify_peer' => false, 'allow_self_signed' => true, 'peer_name' => $host)));

cette modification est fonctionnelle sur notre infra de développement, je te réponds dès que possible sur les serveurs en production (avec proxy différent) dès que possible

A+

Hello,

Willy Destrez | Académie d'Amiens a écrit :

le patch correspond à ce que Thierry avait proposé seulement
"SNI_server_name" est déprécié et devrait être remplacé "peer_name""

Y a les 2 dans le patch, ceinture et bretelle, donc ça doit être bon, non ?

--
Cédric

Le 27/06/2017 à 15:47, Cédric Morin a écrit :

Hello,

Willy Destrez | Académie d'Amiens a écrit :

le patch correspond à ce que Thierry avait proposé seulement
"SNI_server_name" est déprécié et devrait être remplacé "peer_name""

Y a les 2 dans le patch, ceinture et bretelle, donc ça doit être bon, non ?

Ça m'apprendra à lire trop vite...je vous confirme dès que je peux le fonctionnement sur l'ensemble de nos installations SPIP (4 en mutualisation (2 prod/2 dev) et une en mono)

A+

tout en étant capable de contrôler sa propre version C’est moins grave puisque les mises à jour sont fonctionnelles mais étonnant.

Le serveur autonome est désormais capable d’ajouter un dépôt, de trouver les révisions dans Couteau Suisse et de faire fonctionner le spip_loader.

Willy Destrez | Académie d'Amiens a écrit le 29/06/2017 à 09:07 :

Cependant, configuration équivalente, les 4 serveurs avec SPIP en mutualisation n'ont toujours pas de Couteau Suisse fonctionnel...On continue les investigations

Le Couteau Suisse a généralement pillé du code par-ci par-là, pour implémenter ses propres mécanismes.
Il vaudrait mieux chercher à remplacer les CS par les divers plugins que vous avez activé.
D'autant plus que pas mal de ces plugins ont continué à évoluer depuis.
Et pour ceux qui manqueraient, soit s'en passer, soit les mettre en vrais plugins.

L'autre solution sera d'aller voir le code du CS pour voir sa mécanique d'accès distante pour les mises-à-jour et commiter la correction.

Mes 2 sous

--
RealET