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.
Vous devez vous connecter pour publier un commentaire.
Malheureusement, la configuration de la configuration HTTPS qui a été montré dans de nombreuses vidéos ou des tutoriels avant le lancement de ASP.NET Core 2.0 ne pas le faire dans la version finale.
Pour la 2.0, la seule façon de configurer HTTPS est dans le code, par la définition explicite de la Crécerelle d'auditeurs, comme expliqué dans cette annonce, et à l'aide de
ListenOptions.UseHttps
pour activer HTTPS:Malheureusement, au moment de la libération, la documentation officielle aussi ne couvrent pas correctement, et annoncé la configuration de base de manière qui n'était pas mis en œuvre. Cela a été corrigé depuis.
De départ avec ASP.NET de Base 2.1, la configuration HTTPS basée sur le programme d'installation vous sera possible, comme promis à l'origine. Cela devrait ressembler à cela, comme l'a expliqué Tratcher sur GitHub:
Dans votre exemple, la base de code de configuration serait la suivante. Notez que si vous ne voulez pas utiliser un fichier de certificat, vous devez récupérer manuellement le certificat dans le magasin de certificats d'abord.
appsettings.json
pour https? Je voudrais vraiment l'apprécier.appsettings.json
que j'ai décrit ci-dessus pour configurer le certificat explicitement. Vous n'avez pas besoin d'utilisernetsh
puisque vous n'êtes pas d'hébergement à travers HTTPsys (donc netsh n'a aucun effet).