421 Demande mal acheminée


11

J'obtiens parfois l'erreur 421 suivante:

Demande mal dirigée

Le client a besoin d'une nouvelle connexion pour cette demande car le nom d'hôte demandé ne correspond pas à l'indication de nom de serveur (SNI) utilisée pour cette connexion.

Cependant, l'actualisation du navigateur efface l'erreur et la page se charge normalement. La prochaine fois que le chargement de la page ne produira pas d'erreur et en tant que tel, le modèle semble assez aléatoire. Le seul modèle que je peux voir est que cela peut se produire lorsque je redirige une page en utilisant l'en-tête ("Emplacement:". $ Url);

J'ai un certificat multi-domaine PositiveSSL de Comodo. Mes serveurs sont Apache sur un service d'hébergement Web partagé donc je n'ai pas accès à la configuration.

Je charge des pages d'un domaine et dans la page sont des liens vers un deuxième domaine sur le certificat.

Tout ce que j'ai lu concernant cette erreur semble indiquer que ce problème est lié au fait qu'il s'agit d'un certificat multi-domaine.

Ce que je voudrais savoir, c'est s'il y a quelque chose sur le côté du codage des pages Web (php) qui peut provoquer cela (et peut être corrigé) ou s'il s'agit d'une erreur de configuration ou éventuellement d'une erreur de serveur et seul mon service d'hébergement peut répare le.

Mon service d'hébergement n'a jusqu'à présent pas été en mesure de fournir quoi que ce soit et a demandé à être rappelé avec l'heure exacte à laquelle il se produirait afin de pouvoir le rechercher. Toute aide serait appréciée car je ne suis pas trop confiant qu'ils peuvent le comprendre.

MISE À JOUR Ok, presque deux ans plus tard et a décidé qu'il était temps de s'en occuper. J'ai pu résoudre la plupart des problèmes en supprimant mes domaines statiques qui servaient des images et du javascript. Cependant, j'utilisais toujours un deuxième domaine pour une partie de ce contenu et Safari en particulier me posait toujours des problèmes.

J'ai fait plus de recherches et suis tombé sur un autre article qui en parle ici . Exactement ce que décrit @Kevin. L'article a confirmé que cela se produit dans Safari. Alors en suivant les conseils, j'ai décidé d'obtenir des certificats séparés pour chaque domaine. Je suis sur un hôte partagé (Webhostinghub) et j'ai découvert qu'ils offrent maintenant SSL gratuit (AutoSSL) qui se renouvelle automatiquement. Cela semblait trop beau pour être vrai. Ils m'ont mis en place avec 5 certificats gratuits. Jusqu'ici tout va bien. Je peux même essayer de réactiver les domaines statiques à tester. Si tout cela fonctionne, je vais économiser $ pour démarrer en bonus et laisser mes certificats Comodo expirer en juillet.


Hébergez-vous plusieurs sites Web sur le même serveur Apache ET utilisez-vous le même certificat SSL ET l'erreur se produit lors du basculement entre ces noms de domaine?
John Hanley

Si la réponse est OUI, vérifiez si l'adresse IP de chaque domaine correspond au même serveur virtuel. Si OUI, vous avez deux choix (auxquels je peux penser): 1) Émettez des certificats SSL distincts pour chaque nom de domaine. 2) Déplacez les serveurs Web de chaque domaine vers des serveurs différents (adresses IP différentes). Étant donné que vous êtes sur l'hébergement partagé, l'option 1 est probablement la meilleure solution. Vous pouvez tester cette solution à l'aide de Let's Encrypt pour émettre plusieurs certificats gratuits à installer sur les autres serveurs Web.
John Hanley

Demandez à votre hébergeur s'il peut désactiver mod_http2.
John Hanley

@JohnHanley - re # 1, oui c'est le même SSL avec 6 domaines dedans. Il n'est pas facile de dire exactement quand l'erreur se produit. Le scénario principal est que je suis sur un domaine en tirant du contenu (images et js) de deux autres domaines. Re # 2: L'adresse IP est certainement la même - je suppose que l'émission de certificats séparés pour chaque nom de domaine coûterait beaucoup plus cher. J'ai regardé Let's Encrypt mais il n'est pas pris en charge par mon fournisseur. Mon fournisseur a offert des certificats gratuits au cours des 6 derniers mois, donc lorsque le renouvellement arrive ce mois-ci, je vais changer et voir ce qui se passe. Re # 3 - ils ne peuvent pas désactiver mod_http2. Merci
mseifert

En fait, tous les fournisseurs prennent en charge Let's Encrypt à moins qu'ils ne le bloquent spécifiquement. Les certificats SSL sont les mêmes, peu importe où vous les obtenez. La seule différence est le type de validation (DV, OV, EV) et le packaging / format du fichier. Apache est si populaire que tout le monde les soutient. Tant que votre fournisseur prend en charge le téléchargement de votre propre certificat (certificat et clé privée), vous pouvez utiliser la validation DNS pour les contourner. S'ils ne prennent pas en charge le téléchargement de votre propre certificat, je changerais de fournisseur.
John Hanley

Réponses:


14

Cela est dû à la séquence d'événements suivante:

  1. Le serveur et le client prennent en charge et utilisent HTTP / 2.
  2. Le client demande une page à foo.example.com.
  3. Lors de la négociation TLS, le serveur présente un certificat qui est valable pour les deux foo.example.comet bar.example.com(et le client l'accepte). Cela pourrait être fait avec un certificat générique ou un certificat SAN.
  4. Le client réutilise la connexion pour faire une demande de bar.example.com.
  5. Le serveur ne peut pas ou ne veut pas prendre en charge la réutilisation des connexions interdomaines (par exemple parce que vous avez configuré leur SSL différemment et qu'Apache veut forcer une renégociation TLS), et sert HTTP 421.
  6. Le client ne réessaye pas automatiquement avec une nouvelle connexion (voir par exemple le bogue Chrome # 546991 , désormais corrigé). Le RfC pertinent dit que le client PEUT réessayer, pas qu'il DEVRAIT ou DOIT. Ne pas réessayer n'est pas particulièrement convivial, mais peut être souhaitable pour un outil de débogage ou une bibliothèque HTTP.

L'événement # 6 est hors de votre contrôle, mais en fonction du logiciel du serveur, # 5 peut être réparable. Consultez la documentation HTTP / 2 de votre serveur pour plus d'informations sur comment et quand il envoie HTTP 421. Alternativement, vous pouvez émettre des certificats séparés pour chaque domaine, mais cela crée plus de surcharge administrative et peut ne pas en valoir la peine. Vous pouvez également désactiver complètement HTTP / 2, mais c'est probablement exagéré dans la plupart des cas.


J'ai un certificat multi-domaine Comodo PositiveSSL - qui est en effet un seul certificat SSL. Aller à des certificats séparés est un effort et / ou une dépense importante à ce stade. Les principaux problèmes venaient de la tentative d'avoir des domaines sans cookies statiques pour servir mes images. Cela ne valait pas le nombre de 421 que j'obtenais. Pour l'instant, j'ai désactivé les domaines statiques. J'ai encore un certain partage des ressources entre les domaines, mais le nombre de 421 a considérablement chuté. Ne vaut pas actuellement l'efficacité supposée. Un jour, je testerai votre recommandation lorsque j'aurai plus de temps.
mseifert

Merci pour l'explication détaillée. Bien que ce soit un problème assez ennuyeux (et vous ne le remarquez que lorsque vous utilisez Safari, en grande partie), je trouve la chaîne d'événements qui mène à ce problème assez intéressante :)
fritzmg

1

Peut-être que cela sera utile à quelqu'un.

J'ai eu cette erreur lorsque j'ai essayé de changer ma configuration d'hôte virtuel apache en HTTPS, mais j'ai seulement changé le port de 80 en 443 et j'ai oublié d'ajouter

   SSLEngine on
   SSLCertificateFile "/opt/lampp/htdocs/localhost.crt"
   SSLCertificateKeyFile "/opt/lampp/htdocs/localhost.key"

Configuration provoquant l'erreur 421:

<VirtualHost mydoamin.local:443>   <-- fistly I 
       DocumentRoot "/opt/lampp/htdocs/mydomain/"
       ServerName www.mydomain.local
</VirtualHost>

La configuration correcte:

<VirtualHost mydoamin.local:443>
       DocumentRoot "/opt/lampp/htdocs/mydomain/"
       ServerName www.mydomain.local
       SSLEngine on
       SSLCertificateFile "/opt/lampp/htdocs/localhost.crt"
       SSLCertificateKeyFile "/opt/lampp/htdocs/localhost.key"
</VirtualHost>

-1

J'ai eu le même problème. Le passage à deux SSL à emplacement unique a fait l'affaire.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.