Comment forcer HTTPS en utilisant un fichier web.config

J’ai cherché autour de Google et StackOverflow en essayant de trouver une solution, mais ils semblent tous concerner ASP.NET etc.

Je lance habituellement Linux sur mes serveurs mais pour ce client, j’utilise Windows avec IIS 7.5 (et Plesk 10). Ceci étant la raison pour laquelle je ne suis pas familier avec les fichiers IIS et web.config . Dans un fichier .htaccess , vous pouvez utiliser des conditions de réécriture pour détecter si le protocole est HTTPS et redirect en conséquence. Existe-t-il un moyen simple d’y parvenir en utilisant un fichier web.config, ou même en utilisant le module « URL Rewrite » que j’ai installé?

Je n’ai aucune expérience avec ASP.NET, donc si cela est impliqué dans la solution, veuillez inclure des étapes claires de mise en œuvre.

La raison pour laquelle je fais cela avec web.config et non avec PHP est que je voudrais forcer le protocole HTTPS sur tous les actifs du site.

Vous avez besoin d’un module de réécriture d’URL, de préférence v2 (je n’ai aucun v1 installé, donc je ne peux pas garantir qu’il fonctionnera là-bas, mais cela devrait être le cas).

Voici un exemple de ce type web.config – il forcera HTTPS pour TOUTES les ressources (en utilisant 301 Permanent Redirect):

                  

PS Cette solution particulière n’a rien à voir avec ASP.NET/PHP ou toute autre technologie car elle utilise uniquement le module de réécriture d’URL – elle est traitée à l’un des niveaux initial / inférieur – avant que la requête n’arrive au point où votre code est exécuté.

Pour ceux qui utilisent ASP.NET MVC. Vous pouvez utiliser le RequireHttpsAtsortingbute pour forcer toutes les réponses à être HTTPS:

 GlobalFilters.Filters.Add(new RequireHttpsAtsortingbute()); 

Vous pouvez également faire d’autres choses pour sécuriser votre site:

  1. Forcer les jetons Anti-Forgery à utiliser SSL / TLS:

     AntiForgeryConfig.RequireSsl = true; 
  2. Exigez que les cookies requièrent HTTPS par défaut en modifiant le fichier Web.config:

        
  3. Utilisez le package NWebSec.Owin NuGet et ajoutez la ligne de code suivante pour activer Ssortingct Transport Security (HSTS) sur le site. N’oubliez pas d’append la directive de préchargement ci-dessous et de soumettre votre site au site HSTS Preload . Plus d’informations ici et ici . Notez que si vous n’utilisez pas OWIN, vous pouvez lire une méthode Web.config sur le site NWebSec .

     // app is your OWIN IAppBuilder app in Startup.cs app.UseHsts(options => options.MaxAge(days: 720).Preload()); 
  4. Utilisez le package NWebSec.Owin NuGet et ajoutez la ligne de code suivante pour activer HPKP (Public Key Pinning) sur le site. Plus d’informations ici et ici .

     // app is your OWIN IAppBuilder app in Startup.cs app.UseHpkp(options => options .Sha256Pins( "Base64 encoded SHA-256 hash of your first certificatee eg cUPcTAZWKaASuYWhhneDttWpY3oBAkE3h2+soZS7sWs=", "Base64 encoded SHA-256 hash of your second backup certificatee eg M8HztCzM3elUxkcjR2S5P4hhyBNf6lHkmjAHKhpGPWE=") .MaxAge(days: 30)); 
  5. Incluez le schéma https dans les URL utilisées. L’ en-tête HTTP CSP (Content Security Policy) et SRI (Subresource Integrity) ne fonctionnent pas bien lorsque vous imitez le schéma dans certains navigateurs. Il est préférable d’être explicite sur HTTPS. par exemple

      
  6. Utilisez le modèle de projet Visual Studio ASP.NET MVC Boilerplate pour générer un projet avec tout cela et bien plus encore. Vous pouvez également afficher le code sur GitHub .

Pour compléter la réponse de LazyOne, voici une version annotée de la réponse.

             

Effacer toutes les autres règles qui peuvent déjà être définies sur ce serveur. Créez une nouvelle règle, que nous nommerons “Rediriger toutes les demandes vers https”. Après avoir traité cette règle, ne traitez plus de règles! Faites correspondre toutes les URL entrantes. Ensuite, vérifiez si toutes ces autres conditions sont vraies: HTTPS est désactivé. Eh bien, ce n’est qu’une condition (mais assurez-vous que c’est vrai). Si c’est le cas, envoyez une redirection 301 Permanent au client à l’ http://www.foobar.com/whatever?else=the#url-contains . N’ajoutez pas la chaîne de requête à la fin, car cela dupliquerait la chaîne de requête!

C’est ce que signifient les propriétés, les atsortingbuts et certaines des valeurs.

  • clear supprime toutes les règles du serveur que nous pourrions autrement hériter.
  • règle définit une règle.
    • nommez un nom arbitraire (quoique unique) pour la règle.
    • stopProcessing pour transférer la demande immédiatement au pipeline de demande IIS ou pour traiter les règles supplémentaires.
  • correspondre quand exécuter cette règle.
    • URL d’ un modèle sur lequel évaluer l’URL
  • conditionne des conditions supplémentaires concernant le moment où exécuter cette règle; les conditions ne sont traitées que s’il y a d’abord une correspondance.
    • logicalGrouping si toutes les conditions doivent être vraies ( MatchAll ) ou si l’une des conditions doit être vraie ( MatchAny ); similaire à AND vs OR.
  • add ajoute une condition qui doit être remplie.
    • saisir l’entrée qu’une condition évalue; L’entrée peut être des variables de serveur.
    • tracer la norme par rapport à laquelle évaluer l’entrée.
    • ignoreCase si la capitalisation est importante ou non.
  • action que faire si le match et ses conditions sont toutes vraies.
    • type peut généralement être redirect (côté client) ou rewrite (côté serveur).
    • url quoi produire à la suite de cette règle; dans ce cas, concaténer https:// avec deux variables de serveur.
    • redirectType quelle redirection HTTP utiliser; celui-ci est un 301 permanent.
    • appendQuerySsortingng si la chaîne de requête doit être ajoutée à la fin de l’ url résultante ou non; dans ce cas, nous le définissons sur false, car {REQUEST_URI} inclut déjà.

Les variables du serveur sont

  • {HTTPS} qui est OFF ou ON .
  • {HTTP_HOST} est www.mysite.com , et
  • {REQUEST_URI} inclut le rest de l’URI, par exemple /home?key=value
    • le navigateur gère le #fragment (voir le commentaire de LazyOne).

Voir aussi: https://www.iis.net/learn/extensions/url-rewrite-module/url-rewrite-module-configuration-reference

La réponse acceptée n’a pas fonctionné pour moi. J’ai suivi les étapes sur ce blog .

Un point clé qui me manquait était que je devais télécharger et installer l’outil de réécriture d’URL pour IIS. Je l’ai trouvé ici . Le résultat était le suivant.

              

L’excellente bibliothèque NWebsec peut mettre à niveau vos requêtes de HTTP à HTTPS en utilisant sa balise upgrade-insecure-requests dans le Web.config :

          

Je n’étais pas autorisé à installer URL Rewrite dans mon environnement.

Donc, j’ai trouvé un autre chemin.

Ajout de ceci à mon web.config ajouté la réécriture d’erreur et travaillé sur IIS 7.5

      

Ensuite, en suivant les conseils ici: https://www.sslshopper.com/iis7-redirect-http-to-https.html

J’ai créé le fichier HTML qui effectue la redirection (redirectToHttps.html):

  Redirecting...     

J’espère que quelqu’un trouve cela utile, car je ne pouvais pas trouver toutes les pièces en un seul endroit ailleurs.

 In Dot Net Core, follow the instructions at https://docs.microsoft.com/en-us/aspnet/core/security/enforcing-ssl ***In your startup.cs add the following,*** // Requires using Microsoft.AspNetCore.Mvc; public void ConfigureServices(IServiceCollection services) { services.Configure(options => { options.Filters.Add(new RequireHttpsAtsortingbute()); });`enter code here` ***To redirect Http to Https, add the following in the startup.cs*** // Requires using Microsoft.AspNetCore.Rewrite; public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) { loggerFactory.AddConsole(Configuration.GetSection("Logging")); loggerFactory.AddDebug(); var options = new RewriteOptions() .AddRedirectToHttps(); app.UseRewriter(options); 

Un moyen simple consiste à indiquer à IIS d’envoyer votre fichier d’erreur personnalisé pour les requêtes HTTP. Le fichier peut alors contenir une méta-redirection, une redirection JavaScript et des instructions avec un lien, etc. De manière importante, vous pouvez toujours cocher “Require SSL” pour le site (ou le dossier) et cela fonctionnera.