ASP.NET Core 2.1 + Kestrel (Deaktivieren von HTTPS)


73

Mit dem Aufkommen von ASP.NET Core 2.1 erstellt Kestrel nun automatisch einen HTTPS-Endpunkt neben dem HTTP-Endpunkt, und Standardprojektvorlagen werden so eingerichtet, dass sie von HTTP zu HTTPS umleiten (was leicht rückgängig zu machen ist).

Meine Frage ist jedoch ... wie kann ich HTTPS für mein Projekt vollständig deaktivieren. Ich habe die Dokumente gelesen und mit verschiedenen Konfigurationseinstellungen für HTTPS gespielt, aber nichts, was ich tue, scheint es mir zu ermöglichen, es auszuschalten und einfach ein HTTP-Projekt auszuführen.

Bin ich verrückt oder vermisse ich einfach etwas? Ich würde erwarten, dass dies super einfach ist.


3
Nachdem ich 2 Stunden damit verbracht habe, dies unter Linux mit Firefox zum Laufen zu bringen, ist dies genau die Frage, die ich hier gestellt habe :)
Neutrino

Nun, Sie haben Glück, wie Sie sehen können, habe ich dies bereits beantwortet. Sehen Sie sich die akzeptierte Lösung ein paar Beiträge weiter unten an: stackoverflow.com/a/51344917/3022291
Xorcist

Antworten:


54

Wenn Sie Visual Studio 2017 verwenden, können Sie Folgendes tun:

  1. Gehen Sie zu Ihren Projekteigenschaften. (Rechtsklick> Eigenschaften)
  2. Klicken Sie auf die Registerkarte Debug.
  3. Deaktivieren Sie unter Webserver-Einstellungen die Option SSL aktivieren.
  4. Speichern, erstellen und erneut versuchen.

Dadurch werden die iisExpress-Einstellungen in der Datei launchSettings.json aktualisiert.


2
Irgendwie ist in meinem VS2017 die Option nicht vorhanden. Also: Projekteigenschaften => Debuggen => App-URL (entfernen Sie die s) und stellen Sie die richtige Startseite ein => Speichern (Popup mit Überschreiben der Starteinstellungen wird angezeigt => Ok und bereit zum Rollen (f5)
Nordes

Ich verwende die .NET Core CLI selbst. In meinem * .csproj oder appsettings.json gibt es nichts, was darauf hinweist, dass SSL verwendet werden sollte. Gemäß der neuesten Dokumentation erstellt ASP.NET automatisch einen SSL-Endpunkt, wenn ein lokales Entwicklungszertifikat vorhanden ist. Also nahm ich an, dass es im Code einen Weg gibt, dies zu deaktivieren, aber bisher kann ich keinen Weg finden.
Xorcist

2
Ich denke, diese Antwort wäre noch besser, wenn sie nicht von Visual Studio abhängig wäre. Was passiert mit der Datei launchSettings.json?
Yehuda Makarov

Dies ist äußerst wenig hilfreich. Die Frage bezieht sich auf Asp Core und Kestrel. Ihre Antwort bezieht sich auf Legacy-Dotnet unter Windows.
djeikyb

Dieselbe Technik funktioniert auch in VS-2019 gut. Vielen Dank für Ihre Lösung, Abhishek.
Ashok Kumar

50

Entfernen Sie in der Datei Startup.cs die Middleware

app.UseHttpsRedirection();

13
Dies verhindert nur die erzwungene HTTP -> HTTPS-Umleitung (sodass Sie ungesichert zur Site gelangen können) und deaktiviert HTTPS nicht. Zwei Ports werden noch von Kestrel belegt (normalerweise 5000 für HTTP und 5001 für HTTPS). Was ich suche, ist nur HTTP, überhaupt kein HTTPS.
Xorcist

3
Das hat mir geholfen. Ich habe einen Android-Emulator verwendet, der das selbstsignierte SSL höchstwahrscheinlich nicht akzeptiert. Also habe ich versucht, eine Verbindung zur HTTP-Adresse herzustellen, aber ich habe immer wieder "307 Temporary Redirect" erhalten. Nach ein wenig Recherche dachte ich, das lag daran, dass der Server auf HTTPS umleitete. Das Entfernen dieser Zeile löste das Problem.
Verdammtes Gemüse

Auch wenn dies HTTPS nicht deaktiviert, sind dies dennoch sehr nützliche Informationen. Auch ich hatte das Problem der temporären Umleitung 307, und das hat es behoben.
Ryan Lundy

37

Es stellte sich heraus, dass der richtige Weg, um das zu erreichen, was ich tun wollte, darin bestand, Kestrel speziell mit .UseKestrel () zu konfigurieren und einfach eine einzelne Adresse wie folgt anzugeben:

  WebHost.CreateDefaultBuilder(args)
    .UseKestrel(options => {
      options.Listen(IPAddress.Loopback, 5080); //HTTP port
    })
    .UseStartup<Startup>();

in affekt das Standard-Setup überschreiben und diese Warnung anzeigen, wenn Kestel startet:

warn: Microsoft.AspNetCore.Server.Kestrel[0]
  Overriding address(es) 'https://localhost:5001, http://localhost:5000'. Binding to endpoints defined in UseKestrel() instead.

Wenn eine zweite Adresse angegeben wird, wird davon ausgegangen, dass die Adresse mit dem integrierten Entwicklerzertifikat als solches gesichert werden soll:

  WebHost.CreateDefaultBuilder(args)
    .UseKestrel(options => {
      options.Listen(IPAddress.Loopback, 5080); //HTTP port
      options.Listen(IPAddress.Loopback, 5443); //HTTPS port
    })
    .UseStartup<Startup>();

Sie können Ihre SSL-Adresse natürlich speziell wie hier beschrieben sichern:

https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel?view=aspnetcore-2.1&tabs=aspnetcore2x

was für Produktionsaufbauten notwendig ist.


3
Tatsächlich kann dies noch weiter vereinfacht werden, indem .UseUrls () und oder .UseConfiguration () mit einer JSON-Konfiguration und der angegebenen Eigenschaft "urls" verwendet werden. Beide funktionieren gleich, wenn nur eine einzige Adresse angegeben wird.
Xorcist

Ich wurde gebeten, ein Beispiel für meinen obigen Kommentar hinzuzufügen, also hier ist es: Hosting.json program.cs { "urls": "http://localhost:5080" } (main) public static void Main(string[] args) { IConfigurationRoot config = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("hosting.json") .AddCommandLine(args) .Build(); CreateWebHostBuilder(args).UseConfiguration(config).Build().Run(); }
Xorcist

Gibt es eine Möglichkeit, den Turmfalke zu entfernen?
Sina_Islam

5
@sina_Islam "Kestrel entfernen" macht keinen Sinn - Kestrel ist der HTTP-Server. Ohne sie haben Sie keine Web-App.
McGuireV10

28

Properties/launchSettings.jsonSchauen Sie in der Datei Ihres Projekts nach dem Schlüssel applicationUrl. Sie finden so etwas wie:

...
"applicationUrl": "https://localhost:5001;http://localhost:5000",
...

Entfernen Sie den httpsEndpunkt und fertig.

Bearbeiten

Wie von @Xorcist angegeben, wird die Datei launchSettings.jsonnicht veröffentlicht. Die obige Lösung funktioniert also nur in einer Entwicklungsumgebung. Sie können einen der folgenden Schritte ausführen, um https zu deaktivieren und im Allgemeinen die URLs zu konfigurieren, die Sie sowohl in der Produktion als auch in der Entwicklung anhören möchten:

  • Verwenden Sie die --urlsParameter von dotnet run, haben den gleichen Effekt wie applicationUrlin launchSettings.json. Zum Beispiel : dotnet run --urls=http://0.0.0.0:5000,https://0.0.0.0:5001. Entfernen Sie erneut diejenige, die Sie nicht verwenden möchten.

  • Gleiches kann mit der ASPNETCORE_URLSUmgebungsvariablen erreicht werden.

  • Wie in der Antwort von @Konstantin auf diese Frage erwähnt , können Sie in ASP Net Core 2.1 auch Kestrel-Endpunkte in the konfigurieren appsettings.json(dies ist anscheinend in 2.0 nicht möglich).
  • Dies kann schließlich auch mit der useUrlsErweiterungsmethode erreicht werden WebHost.CreateDefaultBuilder(args).UseUrls("http://0.0.0.0:5000"). Ich bevorzuge die andere Lösung, da diese Hardcodes Ihre Anwendungsendpunkte sind und nicht geändert werden können, ohne die Anwendung neu zu kompilieren.

Alle möglichen Optionen werden in den Microsoft Docs dazu ausführlich erläutert .


Beachten Sie, dass die obige Antwort auf eine Konfigurationsdatei für Startprofile verweist, die von Visual Studio erstellt wurde. Diese Datei wird bei Verwendung von VSCode oder über dotnet new nicht automatisch erstellt . Es scheint jedoch wie angegeben zu funktionieren, solange die Datei vorhanden ist und auf das entsprechende Profil verwiesen wird (dh dotnet run --launch-profile = ProfileNameHere ). Beachten Sie, dass das erste Profil in der Konfiguration immer als Standardprofil verwendet wird, wenn kein Profil angegeben ist . Vor diesem Hintergrund glaube ich, dass launchSettings.json kein Ersatz für appsettings.json ist, da es nicht veröffentlicht wird.
Xorcist

Tatsächlich dotnet newwird automatisch eine launchSettings.jsonDatei in dotnet 2.1 erstellt. Dies war in dotnet 2.0 nicht der Fall. Ich habe dies gerade in meiner Ubuntu-Box getestet, in der Visual Studio nicht installiert ist. Zumindest für die Version 2.1 launchSettings.jsonhandelt es sich also nicht um eine Visual Studio-spezifische Datei.
Joanlofe

In Bezug auf die Tatsache, dass launchSettings.jsonnicht veröffentlicht, ist es auch wahr, aber in einer Produktionseinstellung möchten Sie wahrscheinlich, dass https standardmäßig aktiviert ist. Wie auch immer, ich werde meine Antwort mit anderen Optionen aktualisieren.
Joanlofe

Ja, es scheint, ich habe die Tatsache völlig verpasst, dass 2.1 jetzt launchsettings.json in ihre Webvorlagen enthält. Ich entschuldige mich für die Verwirrung, da wir in meinem Job einige benutzerdefinierte Vorlagen verwenden, die anscheinend für 2.1 nicht vollständig aktualisiert wurden. Für die Produktion mit 2.1 verwenden wir derzeit den Abschnitt "Kestrel" -Endpunkte in appsettings.Production.json, um HTTPS zu konfigurieren (und schließen diese Endpunkte von appsettings.json und / oder appsettings.Development.json aus). Meine ursprüngliche Frage war jedoch auf das Entwicklertraining ausgerichtet, bei dem ich mit HTTP beginnen und später speziell HTTPS konfigurieren möchte.
Xorcist

16

Fügen Sie in Program.cs UseUrls wie folgt hinzu:

WebHost.CreateDefaultBuilder(args)
.UseUrls("http://localhost:5000")
.UseStartup<Startup>();

Und in The Startup.cs entfernen / kommentieren Sie Folgendes:

app.UseHttpsRedirection();

Einfach kommentiert "app.UseHttpsRedirection ();" in startup.cs und es wurde angehalten, um zu https umzuleiten, und es wurde begonnen, ein Ergebnis bei http zu liefern.
Blaze

11

Die dotnetCLI hat jetzt eine Vorlage dafür.

dotnet new webapi --no-https

Dies ist das einzige, was bei mir mit .net Core 3.1 und CLI funktioniert hat.
Andrew Cowenhoven

5

Mit ASPNET CORE 2.2 setze ich die Webserver-URL einfach auf http und nicht auf https und sie wird von selbst abgerufen. Ich führe es als selbst gehosteten Prozess aus.

  1. Gehen Sie zu Ihren Projekteigenschaften.
  2. Klicken Sie auf die Registerkarte Debug.
  3. Setzen Sie unter Webserver-Einstellungen die URL auf http: // xxx
  4. Versuchen Sie es nochmal :)

Das war die einzige Option, die für mich funktioniert hat :). Danke
Ribaz

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.