web-dev-qa-db-fra.com

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 pouvoir amener Kestrel à utiliser HTTPS/SSL en le mettant simplement dans la méthode UseUrls() comme ceci:

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?

41
Svek

Les bases. Utiliser les URL du serveur

Si vous souhaitez associer votre serveur pour utiliser toutes les adresses IP attribuées au serveur/hôte Web, procédez comme suit:

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

Remarque: Le format de chaîne utilisé dans la méthode UseUrls() est: http://{ip address}:{port number}.
- Si vous utilisez un * (astérisque) pour l'adresse IP, cela signifie toutes les adresses IP disponibles sur l'hôte.
- Le numéro de port n'est pas obligatoire. Si vous le laissez vide, le port 80 sera utilisé par défaut.

La méthode UseUrls() contient beaucoup de détails supplémentaires à partir de les documents officiels Microsoft Docs ici .

Cependant, SSL ne fonctionnera pas avec la méthode UseUrls() --- Donc, cela signifie que si vous essayez d'ajouter une URL commençant par https://, le programme lève l'exception.

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

Configuration du noeud final. Utilisation de HTTPS et liaison d'un certificat SSL

Les points de terminaison HTTPS ne peuvent être configurés qu'avec KestrelServerOptions.

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

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 la méthode Listen et UseUrls, les noeuds finaux Listen remplacent les noeuds finaux UseUrls.

Vous pouvez trouver plus d'informations sur la configuration des points de terminaison ici sur le document officiel Microsoft Docs .

Si vous utilisez IIS, les liaisons d'URL pour IIS annulent toutes les liaisons que vous définissez en appelant Listen ou UseUrls. Pour plus d'informations, voir Introduction au module ASP.NET Core .

54
Svek