it-swarm.com.de

IIS Geben Sie den Standardwert für Port 44300 für https ein, wenn Sie SSL aktivieren

Wenn Sie anfangs IIS Express einrichten, um SSL zu aktivieren, wird der Port standardmäßig auf 44300 festgelegt. Wenn ich versuche, auf meine Site in https://localhost/ zuzugreifen, funktioniert dies leider nicht, wenn ich nicht die Portnummer 44300 - https://localhost:44300/ verwende. .

Die Links werden mit folgendem erzeugt:

<%= Html.ActionLink("Index", "Index", "Home", new { @action = "https://" + Request.Hostname + Url.Action("Index", "Home") }) %>

Obwohl dies eine hässliche Lösung ist, kann das @action-Schlüsselwort die generierte Route überschreiben. Dies bedeutet jedoch, dass die Anwendung scheinbar alle nicht standardmäßigen Ports (z. B. 44300) kennen muss.

Das Problem dabei ist, dass ich etwas schreibe, um ein Problem zu lösen, das nur in einer Entwicklungsumgebung auftreten würde.

Meine Frage ist also ... Wie ändere ich den Port auf 443 und habe IIS Express so?

Config für meine Site ist unten:

<site name="MySite" id="2" serverAutoStart="true">
  <application path="/">
    <virtualDirectory path="/" physicalPath="C:\Inetpub\MySite" />
  </application>
  <bindings>
    <binding protocol="http" bindingInformation=":80:" />
    <binding protocol="https" bindingInformation=":44300:" />
  </bindings>
</site>

Vielen Dank im Voraus.

Update:

Diese Frage wurde beantwortet von Divya in den IIS - Foren beantwortet.

35
Dan Atkinson

Diese Frage wurde beantwortet von Divya in den IIS - Foren beantwortet.

Wenn Sie SSL für eine Website in WebMatrix aktivieren, wird standardmäßig Port 44300 verwendet und alle Bindungen werden im Hintergrund ausgeführt. Ich hoffe, dass Sie versucht haben, diesen Port in der Konfigurationsdatei auf 443 zu ändern. Sobald dies erledigt und gespeichert ist, müssen Sie auch die Bindung in http.sys ändern. Sie müssen den vorhandenen Eintrag für Port 44300 löschen und den Eintrag für Port 443 hinzufügen. Dazu können Sie httpcfg (WinXp/Win2003) oder 'netsh http' (WinVista/Win2K8/Win7) verwenden. Hier sind die Befehle für Netsh:

1) Holen Sie sich die appid und certhash für den vorhandenen Eintrag von 44300 (I Wird davon ausgegangen, dass Sie dasselbe Zertifikat verwenden, das WebMatrix Standardmäßig installiert. Wenn Sie auch das Zertifikat ändern möchten , den Zertifikat-Hash des Zertifikats aus dem Zertifikat abrufen): netsh http show sslcert. In der Ausgabe nach Eintrag für Port 44300 suchen und certhash und appID kopieren.

2) Löschen Sie den Eintrag für 44300: netsh http delete sslcert ipport=0.0.0.0:44300

3) Fügen Sie einen neuen Eintrag für Port 443 hinzu, wobei certhash und appID in Schritt Kopiert wurden. netsh http add sslcert ipport=0.0.0.0:443 certhash=<certhash> appid=<appid>

Nachdem Sie den Eintrag in http.sys konfiguriert haben, müssen Sie den http - Dienst neu starten, damit die Änderungen wirksam werden.

net stop http

net start http

Wie bereits erwähnt, gibt es mehrere Möglichkeiten, Ihre SSL-Zertifikate zu erhalten.

netsh http show sslcert > output.txt

oder (meine bevorzugte Methode):

netsh http show sslcert | clip
27
Dan Atkinson

Der Port 44300 ist sequenziell: 00 bedeutet, dass dies die erste Anwendung ist, die Sie als SSL-fähig konfiguriert haben. 01 wird der zweite sein und so weiter.

Da ich auch meine Website nur durch das Hinzufügen des globalen Attributs [RequireHttps] in HTTPS verwenden muss, hatte ich einige Probleme beim Debuggen. Beim Start wurde automatisch auf https://localhost/ umgeleitet.

Um dieses Problem zu beheben beim Debuggen einer Website , erstelle ich einfach eine neue RequireHttpsAttribute, die den Port angibt

#if DEBUG
public class RequireHttpsAttribute : System.Web.Mvc.RequireHttpsAttribute
{
    protected override void HandleNonHttpsRequest(System.Web.Mvc.AuthorizationContext filterContext)
    {
        base.HandleNonHttpsRequest(filterContext);

        var result = (RedirectResult)filterContext.Result;

        var uri = new UriBuilder(result.Url);
        uri.Port = 44301;

        filterContext.Result = new RedirectResult(uri.ToString());
    }
}
#endif

Verwenden Sie diese Klasse nur beim Debuggen. Bei der Bereitstellung auf IIS7 sollten Sie Url-Umschreiben verwenden, um zu HTTPS umzuleiten.

Da ich viel Zeit mit diesem Thema verbracht habe, möchte ich meine Erkenntnisse mitteilen. Ich poste das Segment von meinem anderen Beitrag ohne den Code um. Einige Hintergründe und Erklärungen:

===========================================

Nachdem ich mich eingehend geforscht hatte, konnte ich dieses Problem mit IIS Express und einer Überschreibung der OnAuthorization-Methode der Controller-Klasse (Ref # 1) lösen. Ich habe auch die von Hanselman empfohlene Route (Nr. 2) gewählt. Mit diesen beiden Lösungen war ich jedoch aus zwei Gründen nicht vollkommen zufrieden:

  1. Die OnAuthorization von Ref # 1 funktioniert nur auf Aktionsebene, nicht auf Controller-Klassenebene
  2. Ref # 2 erfordert viel Setup (Win7-SDK für makecert), netsh-Befehle. Um Port 80 und Port 443 verwenden zu können, muss VS2010 als Administrator gestartet werden, was ich stirnrunzelnd betrachte.

Also kam ich zu dieser Lösung, die unter folgenden Bedingungen recht simpel ist:

  1. Ich möchte das RequireHttps-Attribut auf Controller-Klasse oder auf Aktionsebene verwenden können

  2. Ich möchte, dass MVC HTTPS verwendet, wenn das Attribut RequireHttps vorhanden ist, und HTTP verwenden, wenn es nicht vorhanden ist

  3. Ich möchte Visual Studio nicht als Administrator ausführen müssen

  4. Ich möchte beliebige HTTP- und HTTPS-Ports verwenden können, die von IIS Express zugewiesen werden 

  5. Ich kann das selbstsignierte SSL-Zertifikat von IIS Express wiederverwenden, und es ist mir egal, ob die ungültige SSL-Aufforderung angezeigt wird

==========================================

Sie finden meine Lösung/meinen Code hier ==> ASP.NET MVC RequireHttps nur in der Produktion

2
Leng Keng

Die Antwort von Dan ist richtig, aber wenn Sie immer noch Probleme mit der Konfiguration von IIS Express haben, um Ihre Website mit http und https auf Standardports zu versorgen, finden Sie hier ein nettes Tutorial, das Sie Schritt für Schritt führt:

http://www.lansweeper.com/kb/54/How-to-configure-SSL-in-IIS-Express.html

In meinem Fall habe ich versehentlich das IIS Express-Zertifikat gelöscht. Ich denke, es wird generiert, wenn Sie SSL zum ersten Mal in Visual Studio verwenden (F4 in einem ausgewählten Projekt, um das Eigenschaftenfenster abzurufen und das Kontrollkästchen "SSS aktiviert" zu aktivieren). In diesem Lernprogramm wurde beschrieben, wie Sie ein Zertifikat erstellen und beheben.

0

Klasse erstellen

public class RequireSSLAttribute: RequireHttpsAttribute
    {
        protected override void HandleNonHttpsRequest(AuthorizationContext filterContext)
        {
            base.HandleNonHttpsRequest(filterContext);

             if (filterContext.HttpContext.Request.Url.Host.ToLower().Equals("localhost"))
            {
                // redirect to HTTPS version of page
                string localhostSSLPort = System.Configuration.ConfigurationManager.AppSettings["localhostSSLPort"];
                string url = "https://" + filterContext.HttpContext.Request.Url.Host + ":" + localhostSSLPort + filterContext.HttpContext.Request.RawUrl;
                filterContext.Result = new RedirectResult(url);
            }           
        }
    }

Und fügen Sie in Ihrer Web-Konfiguration so etwas hinzu

<appSettings>    
    <add key="localhostSSLPort" value="44300"/>
  </appSettings>

Und dann benutzt du es gerne 

    [RequireSSL]            
    public class AdminController : Controller
    {
              ...
    }
0
Alex Vaghin