63 votes

Comment utiliser HTTPS / SSL avec Kestrel dans ASP.NET Core 2.x?

J'utilise actuellement ASP.NET Core 2.x et j'avais l'habitude de faire en sorte que Kestrel utilise HTTPS / SSL en le mettant simplement dans la méthode UseUrls() comme suit:

 var host = new WebHostBuilder()
    .UseUrls("http://localhost", "https://111.111.111.111")
    .UseKestrel()
    .Build();
 

Mais maintenant, j'ai l'exception:

  System.InvalidOperationException:
     HTTPS endpoints can only be configured using KestrelServerOptions.Listen().
 

Comment configurer Kestrel pour utiliser SSL dans ASP.NET Core 2.x?

98voto

Svek Points 6227

Les principes de base. En Utilisant Les Url Du Serveur

Si vous souhaitez associer votre serveur pour utiliser les adresses IP attribuée au serveur/hébergeur web, alors vous pouvez faire ceci:

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

Remarque: Le format de chaîne de caractères utilisés dans l' UseUrls() méthode est la suivante: http://{ip address}:{port number}.
- Si vous utilisez un * (astérisques) pour l'adresse IP, cela signifie que toutes les adresse IP disponible sur l'ordinateur hôte.
- Le numéro de port n'est pas une exigence. Si vous le laissez vide, il sera par défaut sur le port 80.

Il y a une grande quantité de détails supplémentaires à propos de l' UseUrls() méthode par rapport à l'officiel de Microsoft Docs ici.

Cependant, SSL ne fonctionne pas avec l' UseUrls() méthode --- donc, cela signifie que si vous essayez d'ajouter une URL commençant par https:// le programme lancera l'exception

System.InvalidOperationException:
    HTTPS endpoints can only be configured using KestrelServerOptions.Listen().

Configuration des ordinateurs d'extrémité. L'utilisation de HTTPS et la reliure d'un certificat SSL

HTTPS points de terminaison ne peut être configuré à l'aide d' KestrelServerOptions.

Voici un exemple d'utilisation de sockets TCP à l'aide de l' Listen méthode:

WebHost.CreateDefaultBuilder(args)
    .UseKestrel(options =>
    {
        options.Listen(IPAddress.Loopback, 5000);  // http:localhost:5000
        options.Listen(IPAddress.Any, 80);         // http:*:80
        options.Listen(IPAddress.Loopback, 443, listenOptions =>
        {
            listenOptions.UseHttps("certificate.pfx", "password");
        });
    })
    .UseStartup<Startup>()
    .Build();

Remarque: si vous utilisez à la fois l' Listen méthode et UseUrls, l' Listen des points de terminaison de remplacer l' UseUrls des points de terminaison.

Vous pouvez trouver plus d'informations sur la configuration des ordinateurs d'extrémité , ici, à la officiel de Microsoft Docs.

Si vous utilisez IIS, l'URL de liaisons pour IIS remplacer toutes les liaisons que vous définissez à l'appelant Listen ou UseUrls. Pour plus d'informations, voir l' Introduction à la ASP.NET Module de Base.

-1voto

Michael Points 102

Vous n'avez pas besoin d'implémenter https avec kestrel par lui-même. Si vous exécutez une application nécessitant https, il est fort probable qu'elle sera confrontée à Internet. Cela signifie que vous devez exécuter kestrel derrière nginx ou Apache et qu'un de ceux-ci gère la requête https à votre place.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X