IIS7: HTTP-> HTTPS proprement


Réponses:


177

Je pense que la manière la plus propre est celle décrite ici sur IIS-aid.com . C'est web.config uniquement et donc si vous changez de serveur, vous n'avez pas à vous souvenir de toutes les étapes que vous avez suivies avec la page d'erreur personnalisée 403.4 ou d'autres autorisations spéciales, cela fonctionne simplement.

<configuration>
  <system.webServer>
    <rewrite>
      <rules>
        <rule name="HTTP to HTTPS redirect" stopProcessing="true">
          <match url="(.*)" />
            <conditions>
              <add input="{HTTPS}" pattern="off" ignoreCase="true" />
            </conditions>
            <action type="Redirect" redirectType="Permanent" url="https://{HTTP_HOST}/{R:1}" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
</configuration>

9
Cela a fonctionné pour moi, à l'exception du fait que j'ai dû modifier l'URL de redirection vers https: // {HTTP_HOST} {REQUEST_URI}
Andrew S

6
Cela a également fonctionné pour moi. J'ai dû ajouter l'application que j'exécutais sous ... localhost / app1 => http: // {HTTP_HOST} / app1 / {R: 1}
RealSollyM

15
Pour toute personne qui n'a pas encore de section de réécriture, placez les règles dans les sections suivantes du web.config: <system.webServer><rewrite> <rules> ... </rules> </rewrite> </ system .webServer>
raider33

16
assurez-vous que le module de réécriture d'URL Microsoft est installé sur le serveur IIS
Iman

7
Pour des raisons de référencement, vous devez utiliser redirectType = "Permanent". Avis support.google.com/webmasters/answer/…
Niels Bosma du

14

La solution la plus simple et la plus propre que j'ai trouvée était de

  1. Dans les paramètres SSL -> exiger SSL

  2. Dans les pages d'erreur -> Sur l'erreur 403.4 -> Redirection vers le site HTTPS

  3. Dans les pages d'erreur -> Modifier les paramètres des fonctionnalités ... -> Définir les erreurs détaillées pour les demandes locales et les pages d'erreur personnalisées pour les demandes distantes

L'avantage est qu'il ne nécessite aucune ligne de code supplémentaire. L'inconvénient est qu'il vous redirige vers une URL absolue.


1
fonctionne parfaitement (sur IIS 8.5 / 2012 R2). et pas de bricolage avec le web.config
schmendrick

Pourriez-vous s'il vous plaît donner un exemple de cet inconvénient? Dans quelles circonstances cela arriverait-il et pourquoi est-ce une chose négative? Si vous pouviez l'ajouter à votre réponse, ce serait formidable. Merci beaucoup!
Marcos Dimitrio

2
@MarcosDimitrio Je ne suis pas sûr car c'était il y a si longtemps. mais je crois que quand je voulais dire qu'il vous redirige vers une URL absolue, je voulais dire une "URL de base". Par exemple "http": //mywebsite.com/hellokitty serait redirigé vers "https": //mywebsite.com perdant ainsi certaines informations de chemin, cela briserait chaque lien existant avec des informations de chemin supplémentaires.
ColacX

5

Une manière propre ne change que le schéma d'URL de http -> https et laisse tout le reste équivalent. Il doit être côté serveur afin qu'il n'y ait pas de problèmes de navigateur.

JPPinto.com a des instructions étape par étape sur la façon de procéder, sauf qu'ils utilisent javascript (HttpRedirect.htm) au lieu d'une redirection côté serveur. Pour une raison quelconque, je n'ai pas pu obtenir IE exécuter le javascript si vous avez activé `` Afficher les messages d'erreur HTTP conviviaux '', ce qui est activé par défaut. Une autre chose avec le script est que la redirection vers le chemin ne fonctionnait pas même dans FF ou Chrome. Le script redirige toujours vers root. (J'ai peut-être manqué quelque chose, car il devrait rediriger vers le chemin.)

Pour ces raisons, j'ai utilisé une page ASP pour la redirection. L'inconvénient est bien sûr que cela nécessite l'activation de l'ASP classique sur le serveur.

OpsanBlog a un script ASP et des instructions qui fonctionnent bien avec IIS6.

J'ai eu quelques problèmes en utilisant cette méthode avec IIS7. L'interface utilisateur pose principalement des problèmes, car IIS7 permet de rater quelque chose très facilement.

  • Tout d'abord, vous devez installer ASP en tant que fonctionnalité de rôle de serveur Web.
  • Deuxièmement, l'utilisation d'un répertoire virtuel ne fonctionnait pas comme prévu dans IIS7 et je n'ai pas essayé de déboguer cela. Au lieu de cela, j'ai mis le fichier dans le dossier racine du site et utilisé l'url '/SSLRedirect.asp' dans la page d'erreur 403.4 pour le référencer.
  • Enfin, la partie la plus délicate, vous ne devez PAS appliquer SSL pour SSLRedirect.asp . Sinon, vous obtiendrez une erreur 403.4. Pour ce faire, sélectionnez le fichier dans IIS7 «Affichage du contenu» et passez à «Affichage des fonctionnalités» afin de pouvoir modifier les paramètres SSL pour le fichier unique et désactiver la case à cocher «Exiger SSL».

Le gestionnaire IIS doit afficher le nom du fichier dans l'en-tête.


1
Les instructions liées sur JPPinto.com ont été mises à jour pour souligner que cela ne fonctionne pas sur IIS 7.5 ou R2. Ils disent que vous obtiendrez une violation de verrouillage en raison des changements de sécurité dans les nouvelles versions d'IIS. Ils suggèrent d'utiliser la méthode URL Rewrite 2.0 à la place (approche similaire à la réponse de @toxaq).
Robert Shattock

0

Global.asax

protected void Application_BeginRequest()
{
if (!Context.Request.Url.AbsoluteUri.Contains("localhost") && !Context.Request.IsSecureConnection)
Response.Redirect(Context.Request.Url.ToString().Replace("http:", "https:"));
}

1
Je peux facilement contourner cette redirection en mettant "localhost" quelque part dans l'URI, par exemple la chaîne de requête yourdomain.com?localhost=true Je suggérerais plutôt de vérifier la propriété Request.Url.Host
Aidy J

0

J'utilise asp classique (intranet) et sur les pages qui nécessitent une connexion, le fichier d'inclusion de connexion effectue la redirection:

if Request.ServerVariables("SERVER_PORT_SECURE") <> "1" or Request.ServerVariables("HTTPS") <> "on" then 
    Response.Redirect "https://" & Request.ServerVariables("SERVER_NAME") & Request.ServerVariables("URL")
end if

Cela n'inclut bien sûr pas les données GET ou POST. Donc, en fait, c'est une redirection propre vers votre page sécurisée.


-4

Je pense que par «proprement», vous voulez dire comme avec une redirection 300. Config pour beaucoup de serveurs et de langues ici .

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.