Configurer ASP.NET Core 2.0 Kestrel pour HTTPS

TL;DR Ce qui est aujourd'hui la manière correcte de configuration HTTPS avec ASP.NET Core 2.0?

Je voudrais configurer mon projet pour utiliser le protocole https et un certificat comme ils l'ont montré à CONSTRUIRE 2017. J'ai essayé plusieurs réglages mais rien n'a fonctionné. Après quelques recherches, je suis encore plus confus. Il semble qu'il y a plusieurs façons de configurer les Url et les ports... j'ai vu appsettings.json, hosting.json, via le code, et dans launchsettings.json nous pouvons également définir l'URL et le port.

Est-il une façon "standard" de le faire?

Voici mon appsettings.development.json

{
  "Kestrel": {
    "Endpoints": {
      "Localhost": {
        "Address": "127.0.0.1",
        "Port": "40000"
      },
      "LocalhostWithHttps": {
        "Address": "127.0.0.1",
        "Port": "40001",
        "Certificate": {
          "HTTPS": {
            "Source": "Store",
            "StoreLocation": "LocalMachine",
            "StoreName": "My",
            "Subject": "CN=localhost",
            "AllowInvalid": true
          }
        }
      }
    }
  }
}

Mais il prend toujours l'url et le port de launchsettings.json quand j'ai commencer à partir de la ligne de commande avec dotnet run ou quand je démarre avec le débogueur de Visual Studio.

C'est mon Program.cs et Startup.cs

public class Program
{
public static void Main(string[] args)
{
BuildWebHost(args).Run();
}
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.Build();
}
public class Startup
{
public IConfiguration Configuration { get; }
public string Authority { get; set; } = "Authority";
public string ClientId { get; set; } = "ClientId";
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public void ConfigureServices(IServiceCollection services)
{
services.Configure<MvcOptions>(options => options.Filters.Add(new RequireHttpsAttribute()));
JsonConvert.DefaultSettings = () => new JsonSerializerSettings() {
NullValueHandling = NullValueHandling.Ignore
};
services.AddSingleton<IRepository, AzureSqlRepository>(x => new AzureSqlRepository(Configuration.GetConnectionString("DefaultConnection")));
services.AddSingleton<ISearchSplitService, SearchSplitService>();
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options => new JwtBearerOptions {
Authority = this.Authority,
Audience = this.ClientId
});
services.AddMvc();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseWebpackDevMiddleware(new WebpackDevMiddlewareOptions() { HotModuleReplacement = true, ReactHotModuleReplacement = true, HotModuleReplacementEndpoint = "/dist/__webpack_hmr" });
}
app.UseStaticFiles();
app.UseAuthentication();
app.UseMvc(routes => {
routes.MapRoute(
name: "default",
template: "{controller=Home}/{id?}");
routes.MapSpaFallbackRoute(
name: "spa-fallback",
defaults: new { controller = "Home", action = "Index" });
});
}
}

Comme je l'ai dit, je n'étais pas capable de faire fonctionner en toute constallation. Quelle est aujourd'hui la manière correcte de configuration HTTPS avec ASP.NET Core 2.0?

  • En production, il est préférable de l'utiliser Nginx comme le frontend, la configuration SSL/TLS avec nginx est simple, vous pouvez garder kestrel servant http. Son bien connu pour faire ssl-de déchargement pour backend pour éviter la complexité et de la réduction des performances sans impact sur la sécurité. MS Azure appliquer la même architecte concept.
InformationsquelleAutor VSDekar | 2017-09-21