web-dev-qa-db-fra.com

Champ d'en-tête Reason non-autoritaire [HTTP]

J'ai de la difficulté à comprendre ce que cela signifie quand j'ai l'en-tête de réponse Non-Authoritative-Reason : HSTS

J'ai beaucoup cherché mais je viens de trouver des explications sur HSTS (redirection de HTTP à HTTPS). Est-ce que quelqu'un peut m'aider avec cela? En passant, j'utilise Chrome.

Merci

31
jamal

Le serveur avec lequel vous essayez de vous connecter utilise HSTS (strict-transport-security) pour garantir que seul le protocole https est utilisé avec ce site plutôt que le protocole http par défaut.

Cela signifie que si vous entrez http://www.servername.com , Chrome le convertira automatiquement en https://www.servername.com .

Ceci est une fonctionnalité de sécurité pour empêcher l'utilisation de http, qui n'est pas crypté et qui peut être lu et modifié par un pirate informatique. Cela peut être défini par le serveur en indiquant à Chrome (via un en-tête HTTP spécial envoyé en réponse aux demandes) qu'il utilise HSTS. Ce paramètre est ensuite mis en cache par Chrome pour la durée donnée, telle que définie dans la valeur max-age de cet en-tête. De plus, le propriétaire du site peut soumettre son site à une liste de préchargement automatiquement incluse dans Chrome - ce qui protège même la première visite, car normalement, vous devez vous rendre sur le site pour recevoir l'en-tête afin de l'activer.

La manière dont Chrome l'indique dans l'onglet Réseau consiste à créer une réponse factice 307 avec une redirection vers la version https de l'adresse. Mais c’est une fausse réponse qui n’est pas générée par le serveur. En réalité, Chrome l’a fait en interne avant même que la demande soit transmise au serveur.

Pour effacer ce paramètre pour un site, vous pouvez saisir les informations suivantes dans le champ URL de Chrome: chrome://net-internals/#hsts, puis rechercher votre site et le supprimer. Vous pouvez également définir cela sur un domaine de premier niveau et inclure des sous-domaines, de sorte que vous devrez peut-être supprimer à partir de là. Sinon, vous pouvez simplement modifier la configuration de votre serveur pour publier l'en-tête avec un âge maximal de 0 et consulter à nouveau le site pour effacer cet élément, puis arrêter de publier cet en-tête, ce qui peut être utile pour les autres navigateurs où il n'est pas aussi facile de l'effacer.

Notez que vous ne pouvez pas effacer ce paramètre si un site figure dans la liste de préchargement car il est intégré au code du navigateur Web. Le propriétaire du site peut soumettre une demande de suppression de la liste de préchargement, mais il faut plusieurs mois pour parcourir le cycle de publication pour Chrome et aucun calendrier défini pour les autres navigateurs. Chrome ne fournit également aucun moyen de remplacer les paramètres préchargés, pour des raisons de sécurité.

50
Barry Pollard

Quelques informations supplémentaires à la réponse de BazzaDP ...

Le Non-Authoritative-Reason : HSTS renvoyé dans la réponse n'est pas quelque chose que vous avez configuré, mais plutôt Chrome lui-même. Depuis que Chrome a détourné la demande, Chrome ajoutera également cet en-tête particulier pour indiquer que HSTS est activé. En examinant l'onglet Réseau, vous verrez la fausse réponse 307 avec cet en-tête.

Tout cela est fait puisque vous avez inclus l'en-tête Strict-Transport-Security sur votre serveur.

Si vous voulez tout faire, voici la liste de préchargement HSTS

3
Jim Aho

Selon MDN ( https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Strict-Transport-Security ):

L'en-tête Strict-Transport-Security est ignoré par le navigateur lorsque vous accédez à votre site en utilisant HTTP; c'est parce qu'un attaquant peut intercepter les connexions HTTP et injecter l'en-tête ou le supprimer

Et la liste de préchargement HSTS recommandations de déploiement mention:

Ajoutez l'en-tête Strict-Transport-Security à toutes les réponses HTTPS

Le Boilerplate HTML5 montre comment définir uniquement Strict-Transport-Security sur HTTPS (dans Apache):

# Set 'Strict-Transport-Security' over HTTPS only!
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{HTTPS} !=on
    RewriteCond %{HTTP_Host} ^www\.(.+)$ [NC]
    RewriteRule ^ %{ENV:PROTO}://%1%{REQUEST_URI} [R=301,L]
</IfModule>
0
Malvoz