J'ai cherché dans Google et StackOverflow en essayant de trouver une solution à cela, mais ils semblent tous se rapporter à ASP.NET, etc.
J'utilise généralement Linux sur mes serveurs mais pour ce client, j'utilise Windows avec IIS 7.5 (et Plesk 10). C'est la raison pour laquelle je ne suis pas familier avec les fichiers IIS et web.config . Dans un .htaccess
fichier, vous pouvez utiliser des conditions de réécriture pour détecter si le protocole est HTTPS et rediriger 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 le web.config et non PHP est que je voudrais forcer HTTPS sur tous les actifs du site.
Réponses:
Vous avez besoin du module de réécriture d'URL, de préférence v2 (je n'ai pas de v1 installé, donc je ne peux pas garantir qu'il fonctionnera là-bas, mais il devrait).
Voici un exemple d'un tel web.config - il forcera HTTPS pour TOUTES les ressources (en utilisant la redirection 301 permanente):
PS Cette solution particulière n'a rien à voir avec ASP.NET/PHP ou toute autre technologie car elle se fait uniquement à l'aide du module de réécriture d'URL - elle est traitée à l'un des niveaux initial / inférieur - avant que la demande n'arrive au point où votre code est exécuté.
la source
Strict-Transport-Security
tête: en.wikipedia.org/wiki/HTTP_Strict_Transport_Security<action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" redirectType="Permanent" appendQueryString="false" />
<match url=".*"/>
à<match url="http://*.*" />
Pour ceux qui utilisent ASP.NET MVC. Vous pouvez utiliser RequireHttpsAttribute pour forcer toutes les réponses à être HTTPS:
Vous pourriez également vouloir faire d'autres choses pour sécuriser votre site:
Forcer les jetons anti-contrefaçon à utiliser SSL / TLS:
Exiger que les cookies nécessitent HTTPS par défaut en modifiant le fichier Web.config:
Utilisez le package NWebSec.Owin NuGet et ajoutez la ligne de code suivante pour activer Strict Transport Security (HSTS) sur le site. N'oubliez pas d'ajouter la directive Preload 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, il existe une méthode Web.config sur laquelle vous pouvez lire sur le site NWebSec .
Utilisez le package NWebSec.Owin NuGet et ajoutez la ligne de code suivante pour activer l'épinglage de clé publique (HPKP) sur le site. Plus d'informations ici et ici .
Incluez le schéma https dans toutes les URL utilisées. L' en-tête HTTP de la politique de sécurité du contenu (CSP) et l' intégrité des sous-ressources (SRI) ne fonctionnent pas bien lorsque vous imitez le schéma dans certains navigateurs. Il vaut mieux être explicite sur HTTPS. par exemple
Utilisez le modèle de projet ASP.NET MVC Boilerplate Visual Studio pour générer un projet avec tout cela et bien plus encore. Vous pouvez également afficher le code sur GitHub .
la source
Pour augmenter la réponse de LazyOne, voici une version annotée de la réponse.
Effacez toutes les autres règles qui ont peut-être déjà été 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! Correspond à toutes les URL entrantes. Vérifiez ensuite si toutes ces autres conditions sont remplies: HTTPS est désactivé. Eh bien, ce n'est qu'une condition (mais assurez-vous que c'est vrai). Si c'est le cas, renvoyez une redirection 301 permanente au client à l'adresse
http://www.foobar.com/whatever?else=the#url-contains
. N'ajoutez pas la chaîne de requête à la fin de cela, car cela dupliquerait la chaîne de requête!C'est ce que signifient les propriétés, les attributs et certaines des valeurs.
MatchAll
) ou l'une des conditions doit être vraie (MatchAny
); similaire à AND vs OR.match
et sonconditions
sont tous vrais.redirect
(côté client) ourewrite
(côté serveur).https://
avec deux variables de serveur.url
; dans ce cas, nous la définissons sur false, car l'{REQUEST_URI}
inclut déjà.Les variables du serveur sont
{HTTPS}
qui est soitOFF
ouON
.{HTTP_HOST}
estwww.mysite.com
, et{REQUEST_URI}
inclut le reste de l'URI, par exemple/home?key=value
#fragment
(voir le commentaire de LazyOne).Voir également: https://www.iis.net/learn/extensions/url-rewrite-module/url-rewrite-module-configuration-reference
la source
/home?key=value#fragment
) n'est pas définie sur le serveur par les navigateurs car elle était destinée à être utilisée localement.http://www.example.com/members#oops
demande sera envoyée àhttp://www.example.com/members
laquelle sera ensuite redirigé vers la version HTTPS àhttps://www.example.com/members
- le navigateur fait le reste)La réponse acceptée n'a pas fonctionné pour moi. J'ai suivi les étapes de 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.
la source
Dans .Net Core, suivez les instructions sur https://docs.microsoft.com/en-us/aspnet/core/security/enforcing-ssl
Dans votre startup.cs, ajoutez ce qui suit:
Pour rediriger Http vers Https, ajoutez ce qui suit dans le startup.cs
la source
L'excellente bibliothèque NWebsec peut mettre à niveau vos demandes de HTTP vers HTTPS en utilisant sa
upgrade-insecure-requests
balise dansWeb.config
:la source
Je n'étais pas autorisé à installer la réécriture d'URL dans mon environnement, j'ai donc trouvé un autre chemin.
L'ajout de cela à mon web.config a ajouté la réécriture d'erreur et a 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 fait la redirection (redirectToHttps.html):
J'espère que quelqu'un trouve cela utile car je n'ai pas pu trouver toutes les pièces au même endroit ailleurs.
la source
Un moyen simple consiste à dire à 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 lien, etc ... Surtout, vous pouvez toujours cocher "Exiger SSL" pour le site (ou dossier) et cela fonctionnera.
la source