Kürzlich musste ich eine Webapplikation rein über SSL (https, Port 443) zugänglich machen und eine automatische Weiterleitung an die sichere Adresse einstellen. Ich fragte mich, wie ich das machen könnte, ohne zwei virtuelle Websites zu erstellen.
Ich habe das auf folgende Weise bewerkstelligt. Unter Eigenschaften der Website im Reiter "Verzeichnissicherheit" im letzten Abschnitt "Sichere Kommunikation" den Bearbeiten-Knopf drücken und dort einstellen, dass SSL erforderlich ist (erste Checkbox). Achtung: Das bewirkt, dass alle http-(Port 80)-Anfragen einen HTTP-Fehler im Browser bewirken und zwar den Fehler mit dem Code 403;4 ("Forbidden SSL required"). Diesen Umstand kann man nun ausnützen, indem man eine benutzerdefinierte Fehlermeldung einstellt.
Dazu erstellen wir zuerst ein simples asp-Script
<%@ Language=VBScript %>
<%
If Request.ServerVariables("SERVER_PORT")=80 Then
Dim strSecureURL
strSecureURL = "https://"
strSecureURL=strSecureURL & Request.ServerVariables("SERVER_NAME") & "/"
Response.Redirect strSecureURL
End If
%>
und nennen es "jumpssl.asp". Wir müssen es außerdem in einen eigenen Ordner (z.B. "redirect") legen, da wir später eine kleine Änderung an den Sicherheitsseinstellungen des Ordners vornehmen müssen.
Unter "Benutzerdefinierte Fehler" der Website den Fehler 403;4 bearbeiten und dort "URL" auswählen und die URL "/redirect/jumssl.asp" eintragen. Das bewirkt, dass statt dem Fehler dem Browser eine Weiterleitung gesendet wird.
Wir dürfen nicht vergessen, für das Verzeichnis "redirect" das Häkchen "SSL erforderlich" in der Verzeichnissicherheit zu entfernen. Ansonsten schickt IIS auch eine 403;3-Fehlermeldung, wenn die jumpssl.asp Seite ausgeführt werden soll.
Der beschriebene Mechanismus sollte sowohl mit ASP.NET als auch unter klassischen ASP funktionieren.
Kommentare
Ein Restrisiko bleibt also.