Ajouter le support du SNI au proxy connect #3751

Closed
opened 7 years ago by prigent.yohann · 17 comments

Hello,

Actuellement, le proxy CONNECT ne supporte pas le SNI. Il faudrait pour ceci rajouter une option dans le streamContext.

Le patch est fourni en PJ pour SPIP 3.1, mais le soucis est aussi sur SPIP 3.0.

Merci d'avance !

Hello, Actuellement, le proxy CONNECT ne supporte pas le SNI. Il faudrait pour ceci rajouter une option dans le streamContext. Le patch est fourni en PJ pour SPIP 3.1, mais le soucis est aussi sur SPIP 3.0. Merci d'avance !
Poster
There is no content yet.
b_b commented 7 years ago
Owner

Salut, es-tu certain du patch ? À ce que je lis, il faudrait aussi passer 'SNI_enabled' => true pour que cela soit pris en compte, cf :

http://stackoverflow.com/a/29244830
https://bugs.php.net/bug.php?id=63519

Salut, es-tu certain du patch ? À ce que je lis, il faudrait aussi passer `'SNI_enabled' => true` pour que cela soit pris en compte, cf : http://stackoverflow.com/a/29244830 https://bugs.php.net/bug.php?id=63519
Poster

Hello,

Sur les infras où j'ai eu le soucis, ça fonctionne avec ce patch. Mais c'est ptet qu'un coup de chance :)
Du coup je teste avec le SNI_enabled et si tout est ok je corrige le patch.

Hello, Sur les infras où j'ai eu le soucis, ça fonctionne avec ce patch. Mais c'est ptet qu'un coup de chance :) Du coup je teste avec le SNI_enabled et si tout est ok je corrige le patch.
Owner

Et moi je me demande si il faut pas renseigner aussi peer_name dans ce cas.

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

Mais du coup j'en viens à me demander si la config est bien générique ou si d'un proxy à un autre on risque d'avoir des options différentes, auquel cas il vaudrait mieux extraire une partie du code dans une fonction surchargeable.

Et moi je me demande si il faut pas renseigner aussi ``` peer_name ``` dans ce cas. <pre> $streamContext = stream_context_create(array( 'ssl' => array( 'peer_name' => $host, 'verify_peer' => false, 'allow_self_signed' => true, 'SNI_server_name' => $host, ) )); </pre> Mais du coup j'en viens à me demander si la config est bien générique ou si d'un proxy à un autre on risque d'avoir des options différentes, auquel cas il vaudrait mieux extraire une partie du code dans une fonction surchargeable.
b_b commented 7 years ago
Owner

Mais du coup j'en viens à me demander si la config est bien générique ou si d'un proxy à un autre on risque d'avoir des options différentes, auquel cas il vaudrait mieux extraire une partie du code dans une fonction surchargeable.

Oui, je pensais la même chose en signalant SNI_enabled, est-ce que ça fonctionnerait toujours si SNI n'était pas dispo ?

> Mais du coup j'en viens à me demander si la config est bien générique ou si d'un proxy à un autre on risque d'avoir des options différentes, auquel cas il vaudrait mieux extraire une partie du code dans une fonction surchargeable. Oui, je pensais la même chose en signalant SNI_enabled, est-ce que ça fonctionnerait toujours si SNI n'était pas dispo ?
Poster

Hello,

J'ai fait plusieurs tests.

  • version actuelle de SPIP, sans le SNI_server_name => KO : erreur 400
  • avec le SNI_server_name => OK
  • avec le SNI_server_name et SNI_enabled => OK
  • avec le SNI_server_name, SNI_enabled et peer_name => OK

Je pense donc qu'on peut partir sur l'option 3 pour les proxy les plus capricieux.

A noter que j'avais créé le ticket en anomalie et non en évolution car avec la version actuelle, c'est tout cassé et on a une erreur 400.

Hello, J'ai fait plusieurs tests. * version actuelle de SPIP, sans le SNI_server_name => KO : erreur 400 * avec le SNI_server_name => OK * avec le SNI_server_name et SNI_enabled => OK * avec le SNI_server_name, SNI_enabled et peer_name => OK Je pense donc qu'on peut partir sur l'option 3 pour les proxy les plus capricieux. A noter que j'avais créé le ticket en anomalie et non en évolution car avec la version actuelle, _c'est tout cassé_ et on a une erreur 400.
Poster

Des news :) ?

Des news :) ?
Owner

confirmé par #3967

confirmé par #3967
Owner

C'est intégré donc
Statut changé à Fermé

C'est intégré donc **Statut changé à Fermé**

Bonjour,
En PHP 5.6, avec la version SPIP SVN du 01/08/2017, lorsque je clique sur le bouton "Essayer le proxy", j'obtiens le message :
Deprecated: SNI_server_name is deprecated in favor of peer_name in ...\ecrire\inc\distant.php on line 1345

Selon http://php.net/manual/en/context.ssl.php :
SNI_server_name string (...) Note: This option is deprecated, in favour of peer_name, as of PHP 5.6.0.

Bonjour, En PHP 5.6, avec la version SPIP SVN du 01/08/2017, lorsque je clique sur le bouton "Essayer le proxy", j'obtiens le message : Deprecated: SNI_server_name is deprecated in favor of peer_name in ...\ecrire\inc\distant.php on line 1345 Selon http://php.net/manual/en/context.ssl.php : SNI_server_name string (...) Note: This option is deprecated, in favour of peer_name, as of PHP 5.6.0.
b_b commented 6 years ago
Owner

r23686 et r23687 devraient régler le problème de compat PHP 5.6, je te laisse nous le confirmer avant de faire le report en 3.1.
Statut changé à En cours

r23686 et r23687 devraient régler le problème de compat PHP 5.6, je te laisse nous le confirmer avant de faire le report en 3.1. **Statut changé à En cours**

Je viens d'effectuer un test (en PHP 5.6) avec la version SPIP SVN du 24/08/2017. Lorsque je clique sur le bouton "Essayer le proxy", il n'y a plus de message d'erreur.
Merci d'avoir résolu ce problème.

Je viens d'effectuer un test (en PHP 5.6) avec la version SPIP SVN du 24/08/2017. Lorsque je clique sur le bouton "Essayer le proxy", il n'y a plus de message d'erreur. Merci d'avoir résolu ce problème.
b_b commented 6 years ago
Owner

Merci pour le retour, je viens de report en 3.1 avec r23688, on ferme de nouveau :)
Statut changé à Fermé

Merci pour le retour, je viens de report en 3.1 avec r23688, on ferme de nouveau :) **Statut changé à Fermé**

Bonjour,

La correction proposée ne fonctionne pas pour les versions php < 5.6, $streamContext n'étant pas un tableau mais un contexte de flux.
Il est préférable d'utiliser la fonction stream_context_set_option dans ce cas (cf. patch ci-joint).

		if (version_compare(phpversion(), '5.6', '<')) {
			stream_context_set_option($streamContext, 'ssl', 'SNI_server_name', $host);
		}

Cordialement,

Bonjour, La correction proposée ne fonctionne pas pour les versions php < 5.6, `$streamContext` n'étant pas un tableau mais un contexte de flux. Il est préférable d'utiliser la fonction `stream_context_set_option` dans ce cas (cf. patch ci-joint). <pre> if (version_compare(phpversion(), '5.6', '<')) { stream_context_set_option($streamContext, 'ssl', 'SNI_server_name', $host); }</pre> Cordialement,
b_b commented 5 years ago
Owner

Bien vu, patch intégré en 3.3, 3.2 et 3.1, merci :)

Bien vu, patch intégré en 3.3, 3.2 et 3.1, merci :)

Bonjour,

nous venons de passer l'intégralité de nos sites en SPIP 3.2 et le patch n'était pas présent dans le fichier distant.php, j'ai du le ré-appliquer manuellement sur chaque installation mutualisée.

stream_context_set_option($streamContext, 'ssl', 'SNI_server_name', $host);

Vous pouvez me confirmer que cela est bien reporté en 3.2 ?

Bonjour, nous venons de passer l'intégralité de nos sites en SPIP 3.2 et le patch n'était pas présent dans le fichier distant.php, j'ai du le ré-appliquer manuellement sur chaque installation mutualisée. stream_context_set_option($streamContext, 'ssl', 'SNI_server_name', $host); Vous pouvez me confirmer que cela est bien reporté en 3.2 ?
b_b commented 5 years ago
Owner

Vous pouvez me confirmer que cela est bien reporté en 3.2 ?

Comme l'indiquent les commentaires ici oui, cf https://core.spip.net/projects/spip/repository/entry/branches/spip-3.2/ecrire/inc/distant.php#L1315

> Vous pouvez me confirmer que cela est bien reporté en 3.2 ? Comme l'indiquent les commentaires ici oui, cf https://core.spip.net/projects/spip/repository/entry/branches/spip-3.2/ecrire/inc/distant.php#L1315
Sign in to join this conversation.
No Milestone
No project
No Assignees
4 Participants
Notifications
Due Date

No due date set.

Dependencies

This issue currently doesn't have any dependencies.

Loading…
There is no content yet.