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

j'utilise actuellement ASP.NET noyau 2.x et je l'ai utilisé pour être en mesure d'obtenir Kestrel pour utiliser HTTPS / SSL simplement de le mettre dans le UseUrls() méthode comme ceci:

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

Mais maintenant, je reçois l'exception:

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

comment configurer Kestrel pour utiliser SSL dans ASP.NET noyau 2.x?

21
demandé sur Svek 2017-10-07 18:16:36

2 réponses

L'essentiel. Utiliser Les URLs Du Serveur

si vous voulez associer votre serveur pour utiliser toutes les adresses IP attribuées au serveur / hôte web, alors vous pouvez le faire:

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

Note: le format de chaîne utilisé dans le UseUrls() méthode est la suivante: http://{ip address}:{port number}.

- Si vous utilisez un * (astérisques) pour l'adresse IP, c'est-à-dire toute adresse IP disponible sur l'hôte.

- Le numéro de port n'est pas obligatoire. Si vous le laissez vide, il va par défaut sur le port 80.

il y a beaucoup de détails supplémentaires sur le UseUrls() méthode l'officiel de Microsoft Docs ici.

Cependant, SSL ne fonctionnera pas avec leUseUrls()méthode - - - donc, si vous essayez d'ajouter une URL commençant par https:// le programme va lancer l'exception

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

point de Terminaison configuration. Utiliser HTTPS et lier un certificat SSL

IMPORTANT NOTE:

L'hébergement sur un public endpoint via Kestrel (même avec SSL) n'est pas recommandé et vous devez utiliser des technologies comme les proxies inverses (comme Nginx ou IIS) au lieu d'exposer Kestrel dans la nature.

- - - vous pouvez lire plus à ce sujet de la documents officiels de Microsoft ici.

les paramètres HTTPS ne peuvent être configurés qu'en utilisant KestrelServerOptions.

voici un exemple d'utilisation des sockets TCP avec 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();

Note: Si vous utilisez les deux Listen méthode et UseUrls, le Listen les points de terminaison de remplacer les UseUrls les points de terminaison.

vous pouvez trouver plus d'informations sur la mise en place des paramètres ici à la Microsoft officielle Docs.

si vous utilisez IIS, les liaisons D'URL pour IIS supplantent toutes les liaisons que vous définissez en appelant Listen ou UseUrls. Pour plus d'informations, voir Introduction à ASP.NET module de base.

29
répondu Svek 2017-10-07 15:16:36

vous n'avez pas besoin d'implémenter https avec kestrel seul. Si vous exécutez une application qui nécessite https, il est très probable qu'elle va faire face à l'extérieur vers l'internet. Cela signifie que vous devez exécuter kestrel derrière Nginx ou Apache et que l'un d'eux gère la requête https pour vous.

2
répondu Michael 2017-10-07 17:11:03