IIS7: HTTP-> HTTPS sauber

146

Gibt es eine saubere Möglichkeit, alle Versuche, zu einer HTTP: // Version einer Site zu wechseln, auf das entsprechende HTTPS: // umzuleiten?

cpuguru
quelle
Die Antwort finden Sie auf James Kovacs Blog: jameskovacs.com/2007/05/09/…
cpuguru
Wenn Sie mit IIS 7 und R2 arbeiten, finden Sie hier eine Anleitung, die funktioniert und am "saubersten" ist
Ujwal Parker,

Antworten:

177

Ich denke, der sauberste Weg ist wie hier auf IIS-aid.com beschrieben . Es ist nur web.config. Wenn Sie also den Server wechseln, müssen Sie sich nicht alle Schritte merken, die Sie mit der benutzerdefinierten Fehlerseite 403.4 oder anderen speziellen Berechtigungen ausgeführt haben. Es funktioniert einfach.

<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>
toxaq
quelle
9
Dies funktionierte für mich mit der Ausnahme, dass ich die Umleitungs-URL in https: // {HTTP_HOST} {REQUEST_URI} ändern musste
Andrew S
6
Das hat auch bei mir funktioniert. Ich musste die Anwendung hinzufügen, unter der ich ausgeführt wurde ... localhost / app1 => http: // {HTTP_HOST} / app1 / {R: 1}
RealSollyM
15
Platzieren Sie für alle, die noch keinen Abschnitt zum Umschreiben haben, die Regeln in den folgenden Abschnitten der web.config: <system.webServer> <rewrite> <rules> ... </ rules> </rewrite> </ system .webServer>
raider33
16
Stellen Sie sicher, dass das Microsoft URL Rewrite Module auf dem IIS-Server installiert ist
Iman
7
Aus SEO-Gründen sollten Sie redirectType = "Permanent" verwenden. Überprüfen Sie support.google.com/webmasters/answer/…
Niels Bosma
14

Die einfachste und sauberste Lösung, die ich gefunden habe, war zu

  1. In den SSL-Einstellungen -> SSL erforderlich

  2. In Fehlerseiten -> Bei 403.4 Fehler -> Zur HTTPS-Site umleiten

  3. Unter Fehlerseiten -> Funktionseinstellungen bearbeiten ... -> Detaillierte Fehler für lokale Anforderungen und benutzerdefinierte Fehlerseiten für Remote-Anforderungen festlegen

Der Vorteil ist, dass keine zusätzlichen Codezeilen erforderlich sind. Nachteil ist, dass es Sie zu einer absoluten URL weiterleitet.

ColacX
quelle
1
funktioniert einwandfrei (unter IIS 8.5 / 2012 R2). und kein basteln mit der web.config
schmendrick
Könnten Sie bitte ein Beispiel für diesen Nachteil geben? Unter welchen Umständen würde es passieren und warum ist es eine negative Sache? Wenn Sie es Ihrer Antwort hinzufügen könnten, wäre das großartig. Vielen Dank!
Marcos Dimitrio
2
@MarcosDimitrio Ich bin mir nicht sicher, da es so lange her ist. aber ich glaube, als ich meinte, dass es dich zu einer absoluten URL weiterleitet, meinte ich eine "Basis-URL". Zum Beispiel würde "http": //mywebsite.com/hellokitty zu "https": //mywebsite.com umgeleitet, wodurch einige Pfadinformationen verloren gehen. Dadurch würde jeder vorhandene Link mit zusätzlichen Pfadinformationen unterbrochen.
ColacX
5

Ein sauberer Weg ändert nur das URL-Schema von http -> https und lässt alles andere gleich. Es sollte serverseitig sein, damit keine Browserprobleme auftreten.

JPPinto.com enthält schrittweise Anweisungen dazu, mit der Ausnahme, dass anstelle einer serverseitigen Umleitung Javascript (HttpRedirect.htm) verwendet wird. Aus irgendeinem Grund konnte der IE das Javascript nicht ausführen, wenn Sie die Option "Anzeigen freundlicher HTTP-Fehlermeldungen" aktiviert haben, die standardmäßig aktiviert ist. Eine andere Sache mit dem Skript ist, dass die Umleitung zum Pfad selbst in FF oder Chrome nicht funktioniert hat. Das Skript leitet immer zu root weiter. (Vielleicht habe ich etwas verpasst, weil es zum Pfad umleiten sollte.)

Aus diesen Gründen habe ich eine ASP-Seite für die Weiterleitung verwendet. Der Nachteil ist natürlich, dass dafür klassischer ASP auf dem Server aktiviert sein muss.

OpsanBlog verfügt über ein ASP-Skript und Anweisungen , die mit IIS6 gut funktionieren.

Ich hatte einige Probleme mit dieser Methode mit IIS7. Probleme mit der Benutzeroberfläche meistens, da IIS7 es wirklich leicht macht, etwas zu übersehen.

  • Zunächst müssen Sie ASP als Webserver-Rollenfunktion installieren.
  • Zweitens funktionierte die Verwendung eines virtuellen Verzeichnisses in IIS7 nicht wie erwartet und ich habe nicht versucht, dies zu debuggen. Stattdessen habe ich die Datei in den Stammordner der Site gestellt und die URL '/SSLRedirect.asp' auf der 403.4-Fehlerseite verwendet, um darauf zu verweisen.
  • Zuletzt, der schwierigste Teil, dürfen Sie SSL für SSLRedirect.asp NICHT erzwingen . Andernfalls wird ein 403.4-Fehler angezeigt. Dazu wählen Sie die Datei in IIS7 'Inhaltsansicht' aus und wechseln zu 'Funktionsansicht', damit Sie die SSL-Einstellungen für die einzelne Datei bearbeiten und das Kontrollkästchen 'SSL erforderlich' deaktivieren können.

Der IIS-Manager sollte den Dateinamen im Header anzeigen.

mika
quelle
1
Die verknüpften Anweisungen auf JPPinto.com wurden aktualisiert, um hervorzuheben, dass dies unter IIS 7.5 oder R2 nicht funktioniert. Sie sagen, dass Sie aufgrund von Sicherheitsänderungen in den neueren Versionen von IIS eine Sperrenverletzung erhalten. Sie schlagen vor, stattdessen die URL Rewrite 2.0-Methode zu verwenden (ähnlicher Ansatz wie in der Antwort von @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:"));
}
Toolkit
quelle
1
Ich kann diese Umleitung leicht umgehen, indem ich "localhost" irgendwo in den URI einfüge , z. B. die Abfragezeichenfolge yourdomain.com?localhost=true. Ich würde vorschlagen, stattdessen die Eigenschaft Request.Url.Host zu überprüfen
Aidy J
0

Ich verwende klassisches Asp (Intranet) und auf Seiten, für die eine Anmeldung erforderlich ist, führt die Anmelde-Include-Datei die Umleitung durch:

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

Dies beinhaltet natürlich keine GET- oder POST-Daten. Tatsächlich handelt es sich also um eine saubere Weiterleitung zu Ihrer gesicherten Seite.

Jean-Marc
quelle
-4

Ich denke mit "sauber" meinst du wie mit einer 300er Weiterleitung. Config für viele Server und Sprachen hier .

Slipsec
quelle