La meilleure façon asp.net pour forcer le https pour un site entier?
Environ 6 mois, j'ai lancé un site où chaque requête devait être sur https. Le seul moyen à l'heure j'ai pu trouver à s'assurer que chaque demande de page sur https a été vérifier dans le chargement de la page de l'événement. Si la demande n'a pas été sur http, j'aurais la réponse.redirect("https://example.com")
Est-il une meilleure façon de -- idéalement, certains paramètre dans le web.config?
- vérifier ma réponse ici stackoverflow.com/questions/33882350/...
- Related post - Comment faire pour forcer le HTTPS à l'aide d'un site web.fichier de configuration
Vous devez vous connecter pour publier un commentaire.
Veuillez utiliser HSTS
de http://www.hanselman.com/blog/HowToEnableHTTPStrictTransportSecurityHSTSInIIS7.aspx
Réponse originale à cette question (remplacé par le ci-dessus le 4 décembre 2015)
fondamentalement
qui iraient dans le monde.asax.cs (ou global).asax.vb)
je ne sais pas de manière à spécifier dans le web.config
<add input="{HTTPS}" pattern="on" negate="true" />
parce queoff
n'a jamais travaillé. Peut-être qu'il le fait maintenant, je n'ai même pas essayer ces jours-ci.L'autre chose que vous pouvez faire est d'utiliser HSTS par le retour de la "Strict-Transport-Security" en-tête pour le navigateur. Le navigateur doit prendre en charge (et à l'heure actuelle, c'est principalement Chrome et Firefox qui n'), mais cela signifie qu'une fois réglé, le navigateur ne va pas faire des demandes sur le site via HTTP et au lieu de les traduire pour les requêtes HTTPS avant leur émission. Essayez ceci en combinaison avec une redirection à partir de l'adresse HTTP:
Les navigateurs qui ne sont pas HSTS conscience va simplement ignorer l'en-tête mais va encore se faire attraper par l'instruction switch et envoyé à l'adresse HTTPS.
if(!Request.IsLocal)
afin de ne pas briser le débogage.IHttpModule
.La IIS7 module va vous permettre de rediriger.
<system.webServer>
, pour personne de se demander.Pour ceux qui l'utilisent ASP.NET MVC. Vous pouvez utiliser les méthodes suivantes pour forcer SSL/TLS sur le HTTPS sur l'ensemble du site en deux façons:
À La Dure
1 - Ajouter la RequireHttpsAttribute pour les filtres globaux:
2 - la Force d'Anti-Contrefaçon jetons pour utiliser SSL/TLS:
3 - Requièrent l'utilisation de Cookies pour exiger HTTPS par défaut en modifiant le Web.fichier de configuration:
4 - Utiliser le NWebSec.Owin package NuGet et ajouter la ligne de code suivante pour activer Strict de la Sécurité des Transports à travers le site. N'oubliez pas d'ajouter de la Précharge de la directive ci-dessous et soumettre votre site à la HSTS Précontrainte site. Plus d'informations ici et ici. Notez que si vous n'êtes pas à l'aide de OWIN, il y a un Web.config méthode que vous pouvez lire sur le NWebSec site.
5 - Utiliser le NWebSec.Owin package NuGet et ajoutez la ligne suivante de code pour activer le Public Key Pinning (HPKP) à travers le site. Plus d'informations ici et ici.
6 - Inclure le https régime dans toute l'URL est utilisée. Content Security Policy (CSP) En-tête HTTP et Sous-ressource de l'Intégrité (SRI) ne jouent pas agréable quand vous imit le régime dans certains navigateurs. Il est préférable d'être explicite sur HTTPS. par exemple,
La Voie De La Facilité
Utiliser le ASP.NET MVC Réutilisable modèle de projet Visual Studio pour générer un projet avec tout cela, et beaucoup plus construit en. Vous pouvez également consulter le code sur GitHub.
<authentication mode="Forms">
, à l'intérieur vous devez avoir<forms requireSSL="true">
RequireHttpsAttribute
ne la redirection. Tant que vous avez qu'il doit être fine.Si vous ne parvenez pas à configurer IIS pour quelque raison que ce soit, je ferais un module HTTP qui effectue la redirection pour vous:
Puis il suffit de le compiler une DLL, ajouter une référence à votre projet et de le placer dans le web.config:
app.BeginRequest += new OnBeginRequest;
dans leInit
méthode et dans leOnBeginRequest
aurait contient ce courantInit
méthode contient. Êtes-vous sûr que ce module fonctionne comme prévu?Ce que vous devez faire est de :
1) Ajouter une touche à l'intérieur de web.config, en fonction de la production ou de la scène serveur comme ci-dessous
2) à l'Intérieur de votre Global.asax fichier ajouter de la méthode ci-dessous.
Si la prise en charge SSL n'est pas configurable dans votre site (c'est à dire. doit être capable de tourner https activé/désactivé) - vous pouvez utiliser le bouton [RequireHttps] attribut sur n'importe quel controller /contrôleur de l'action que vous souhaitez sécuriser.
Elle dépend aussi de la marque de votre équilibreur, pour le web mux, vous devez regarder pour les en-tête http
X-WebMux-SSL-termination: true
à la figure que le trafic entrant est ssl. plus de détails ici: http://www.cainetworks.com/support/redirect2ssl.htmlPour @Joe ci-dessus, "Ce qui me donne une redirection en boucle. Avant j'ai ajouté le code a bien fonctionné. Toutes les suggestions? – Joe 8 Nov '11 à 4:13"
Ce qui se passait pour moi aussi et je crois que ce qui se passait c'est qu'il y a un équilibrage de la charge de terminaison SSL demande devant le serveur Web. Donc, mon site Web est toujours en train de penser que la demande est "http", même si le navigateur d'origine a demandé d'être "https".
J'avoue que c'est très orthodoxe, mais ce qui a fonctionné pour moi a été de mettre en œuvre un "JustRedirected" bien que je pouvais l'effet de levier pour comprendre la personne a déjà été redirigé une fois. Donc, je test pour des conditions spécifiques qui justifient la redirection et, si elles sont respectées, j'ai défini cette propriété (valeur stockée dans la session) avant la redirection. Même si le http/https conditions pour la redirection sont remplies, la deuxième fois, j'ai contourner la redirection de la logique et de réinitialiser le "JustRedirected" session de la valeur à false. Vous aurez besoin de votre propre test conditionnel logique, mais ici, c'est une simple mise en œuvre de la propriété:
Je vais jeter mon grain de sel. SI vous avez accès à un serveur IIS côté, alors vous pouvez forcer le HTTPS par l'utilisation de liaisons de protocole. Par exemple, vous avez un site web appelé Bla. Dans IIS, vous auriez installation de deux sites: Bla, et Bla (Redirection). Pour Bla configurer uniquement les
HTTPS
de liaison (etFTP
si vous en avez besoin, assurez-vous de le forcer via une connexion sécurisée ainsi). Pour Bla (Redirection) configurer uniquement lesHTTP
de liaison. Enfin, dans le Redirection HTTP section pour Bla (Redirection) assurez-vous de définir une redirection 301 pourhttps://blah.com
, à destination exacte activé. Assurez-vous que chaque site dans IIS se pointant c'est propre dossier racine sinon le Web.config obtiendrez tous foiré. Assurez-vous également d'avoirHSTS
configuré sur votre HTTPSed site, de sorte que les demandes ultérieures par le navigateur sont toujours obligés de HTTPS et aucune redirection se produire.C'est une meilleure réponse repose sur @Troy Hunt. Ajouter cette fonction à votre
WebApplication
classe dansGlobal.asax.cs
:(Pour activer SSL sur votre construire l'activer dans les Propriétés de dock pour le projet)
-> il suffit d'AJOUTER [RequireHttps] sur le dessus du public de la classe HomeController : Contrôleur.
-> Et d'ajouter GlobalFilters.Les filtres.Add(new RequireHttpsAttribute()); dans " protégés vide Application_Start()' méthode Globale.asax.cs fichier.
Qui force l'ensemble de votre demande à l'adresse HTTPS.
J'ai passé quelque temps à la recherche pour les meilleures pratiques qui ont du sens et trouvé à l'issue de laquelle a travaillé amené à la perfection pour moi. J'espère que cela va vous sauver de temps en temps.
À l'aide de fichier de Config (par exemple un asp.net le site web)
https://blogs.msdn.microsoft.com/kaushal/2013/05/22/http-to-https-redirects-on-iis-7-x-and-higher/
ou sur votre propre serveur
https://www.sslshopper.com/iis7-redirect-http-to-https.html
[RÉPONSE COURTE]
Tout simplement Le code ci-dessous va à l'intérieur de
Si vous utilisez ASP.NET Core, vous pourriez essayer le package nuget SaidOut.AspNetCore.HttpsWithStrictTransportSecurity.
Alors vous n'avez qu'à ajouter
Ce sera aussi ajouter HTTP StrictTransportSecurity-tête à toutes les demandes faites à l'aide de https régime.
Exemple de code et de documentation https://github.com/saidout/saidout-aspnetcore-httpswithstricttransportsecurity#example-code
Dans IIS10 (Windows 10 et le Serveur 2016), à partir de la version à partir de 1709, il y a un nouveau, plus simple option pour l'activation de HSTS pour un site web.
Microsoft décrire les avantages de la nouvelle approche ici, et de fournir de nombreux exemples de la façon de mettre en œuvre le changement par programme ou en modifiant directement le ApplicationHost.fichier de configuration (qui est comme le web.config mais opère au niveau de IIS, plutôt que de chaque site). ApplicationHost.config peut être trouvé dans C:\Windows\System32\inetsrv\config.
Que j'ai décrit deux exemples de méthodes afin d'éviter la pourriture des liens.
Méthode 1 - Modifier le ApplicationHost.fichier de configuration directement
Entre le
<site>
tags, ajouter cette ligne:Méthode 2 - Ligne De Commande:
Exécutez la commande suivante à partir d'une invite de commande élevée (c'est à dire droit de la souris sur CMD et exécuter en tant qu'administrateur). N'oubliez pas de swap Contoso avec le nom de votre site tel qu'il apparaît dans le Gestionnaire des services IIS.
Les autres méthodes de Microsoft offre en ce que les articles peuvent être de meilleures options si vous êtes hébergé sur un environnement où vous avez un accès limité.
Gardez à l'esprit que IIS10 version 1709 est disponible sur Windows 10, mais pour Windows Server 2016, il est sur une autre version de la piste, et ne pourra pas être diffusé sous forme de patch ou d'un service pack. Voir ici pour plus de détails à propos de 1709.