Quel est le meilleur moyen d'activer HTTP Strict Transport Security sur un serveur Web IIS 7?
Puis-je utiliser l'interface graphique et ajouter l'en-tête de réponse HTTP approprié ou devrais-je utiliser appcmd et si oui, quels commutateurs?
Quel est le meilleur moyen d'activer HTTP Strict Transport Security sur un serveur Web IIS 7?
Puis-je utiliser l'interface graphique et ajouter l'en-tête de réponse HTTP approprié ou devrais-je utiliser appcmd et si oui, quels commutateurs?
Réponses:
IIS peut ajouter des en-têtes personnalisés aux réponses . Cela semblerait être le moyen le plus facile de s'y prendre.
Selon la documentation sur IIS.net, vous pouvez ajouter ces en-têtes via le gestionnaire IIS:
la source
Cela nous permet de gérer la redirection HTTP et d'ajouter l'en-tête Strict-Transport-Security aux réponses HTTPS avec un seul site IIS (le module URL Rewrite doit être installé):
la source
<action type="Rewrite" value="max-age=31536000 ;includeSubDomains; preload" />
pour obtenir une passe sur hstspreload.orghttps://somedomain.com/https://somedomain.com/relatedpath
et que le résultat est que le chemin est supprimé.Pour compléter la réponse de voretaq7 , vous pouvez également utiliser le fichier Web.config (Remarque: à utiliser uniquement pour les sites SSL, car il ajoutera l'en-tête des réponses HTTP et HTTPS, ce qui est contraire à la spécification RFC 6797, voir l'explication ci-dessous) - ajoutez un bloc comme suit:
De toute évidence, vous avez peut-être déjà un
system.webServer
bloc dans votre Web.config, alors ajoutez ceci à cela, si c'est le cas. Nous préférons gérer les éléments dans le fichier Web.config plutôt que dans l'interface graphique, car cela signifie que les modifications de configuration peuvent être validées dans notre référentiel Git.Si vous voulez gérer la redirection HTTP vers SSL, comme l'a mentionné Greg Askew , vous trouverez peut-être plus facile de le faire avec un site Web distinct dans IIS. C’est ainsi que nous traitons l’exigence de SSL pour certains sites clients. Ce site ne contient qu'une redirection HTTP et quelques correctifs en matière de divulgation d'informations , le tout dans le fichier Web.config:
Ceci est notre solution préférée pour plusieurs raisons: nous pouvons facilement enregistrer le trafic redirigé séparément (comme il se trouve dans un journal IIS différent), cela n'implique pas plus de code dans Global.asax.cs (nous n'avons pas de code ce qui est un peu plus pratique pour un site Umbraco) et, ce qui est important, cela signifie que toute la configuration est toujours conservée dans notre repo GIT.
Modifié pour ajouter: pour être clair, afin de se conformer à la RFC 6797 , l'en-
Strict-Transport-Security
tête personnalisé NE DOIT PAS être ajouté aux demandes effectuées par HTTP non chiffré. Pour être conforme à RFC6797, vous DEVEZ avoir deux sites dans IIS, comme je l’ai décrit après le premier bloc de code. Comme le souligne Chris , le RFC 6797 comprend:par conséquent, l'envoi de l'en-
Strict-Transport-Security
tête du client en réponse à une demande non SSL ne serait pas conforme à la spécification.la source
J'utiliserais l'exemple du lien Wikipedia que vous avez référencé et effectuerais l'activité dans global.asax pour le site. Cela permet de rediriger la demande vers une URL https, puis d' insérer l'en-tête dans la réponse.
Cela est dû au fait que l'en-tête HSTS doit être ignoré s'il ne fait pas partie d'une réponse https.
la source
Cela semble être un moyen assez sûr de le faire. Ajoutez ce code dans Global.asax - l'événement Application_BeginRequest est déclenché en premier dans le cycle de vie de la requête Asp.net: http://msdn.microsoft.com/en-us/library/system.web.httpapplication.beginrequest(v=vs. 110) .aspx
Selon la spécification, les requêtes http ne doivent pas répondre avec l'en-tête - ce code l'ajoute donc uniquement aux requêtes https. Max-age est un nombre de secondes, et c'est généralement une bonne idée de mettre une valeur importante ici (IE - 31536000 indique que le site ne fonctionnera avec SSL que pendant les 365 prochains jours)
la source
À l'aide de l'exemple fourni par Doug Wilson, j'ai créé les deux fonctions PowerShell suivantes pour ajouter des règles de réécriture d'URL pour la redirection vers HTTPS et pour l'ajout d'en-têtes HSTS.
Celles-ci ont été testées sur Windows 2012 et Windows 2012 R2.
Tout ce que vous avez à faire est de fournir le nom du site. Vous pouvez éventuellement donner un nom différent aux règles si vous n'aimez pas les valeurs par défaut.
Une chose à noter est que lors de mes tests, les variables serveur doivent être ajoutées à la liste des autorisations avant de figurer dans les en-têtes de réponse. Les fonctions le font pour vous.
EDIT: Voir la référence sur Url Rewrite pour les en-têtes HTTP ici: http://www.iis.net/learn/extensions/url-rewrite-module/setting-http-request-headers-and-iis-server-variables
la source
Selon les concepteurs du module HTTP Strict Transport Security IIS, le simple ajout de l'en-tête personnalisé n'est pas conforme à la spécification préliminaire (RFC 6797).
Vous devez en fait installer ce module IIS pour activer HSTS sur IIS 7.
Mise à jour 26 octobre 2014 : Grâce au commentaire ci-dessous, j'ai relu la page du module et plus particulièrement la partie qui justifie l'utilisation du module par l'ajout d'en-têtes personnalisés.
Un hôte HSTS NE DOIT PAS inclure le champ d'en-tête STS dans les réponses HTTP acheminées via un transport non sécurisé.
Si vous veillez à ajouter les en-têtes uniquement dans HTTPS et NON dans HTTP, vous n'avez pas besoin de ce module et vous pouvez utiliser la réponse de Doug Wilson. N'utilisez pas la réponse d'Owen Blacker car il n'a pas la condition https.
la source
Cela peut être fait en ajoutant le bloc suivant dans Web.Config:
Nous devons configurer sur IIS qui a la capacité de personnaliser les en-têtes pour répondre:
la source
Juste pour ajouter, je vois dans les commentaires 2 personnes qui parlent de 500 erreurs lorsque vous faites cela. J'ai eu ça.
Si vous obtenez une erreur 500 dans IIS, cela peut être dû au fait que vous avez ajouté la règle à la fois au niveau supérieur, défini sur hérité et au niveau du site.
par exemple
IIS / The Browser semble ne vous donner aucune information indiquant que vous l'avez fait, quels que soient vos paramètres de gestion des erreurs
la source