2017-06-14 1 views
2

Le guide Enforcing SSL in a ASP.NET Core App sur MSDN, me dit d'ajouter le code suivant à ma méthode Configure dans la classe Startup, afin de rediriger toutes les demandes http à https:AddRedirectToHttps() ne redirige pas Https

var options = new RewriteOptions() 
     .AddRedirectToHttps(); 

    app.UseRewriter(options); 

Après avoir ajouté le code au bon endroit, et tester une requête HTTP en mode débogage, je reçois une erreur connection reset en chrome:

This site can’t be reached 

The connection was reset. 
Try: 
Checking the connection 
Checking the proxy and the firewall 
Running Windows Network Diagnostics 
ERR_CONNECTION_RESET 

J'essaie d'accéder à la même URL (y compris le port. . que je pense est où je pourrais aller mal?) que je ferais si j'utilisais https ... I.E, je tape http://localhost:44376 au lieu de https://localhost:44376 dans ma barre d'adresse.

Une version allégée de ma méthode Configuration ressemble à ceci:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) 
{ 
    loggerFactory.AddConsole(Configuration.GetSection("Logging")); 
    loggerFactory.AddDebug(); 

    var options = new RewriteOptions() 
     .AddRedirectToHttps(); 

    app.UseRewriter(options); 

    if (env.IsDevelopment()) 
    { 
     app.UseDeveloperExceptionPage(); 
     app.UseDatabaseErrorPage(); 
     app.UseBrowserLink(); 
    } 
    else 
    { 
     app.UseExceptionHandler("/Home/Error"); 
    } 

    app.UseStaticFiles(); 

    app.UseIdentity(); 

    app.UseFacebookAuthentication(new FacebookOptions() 
    { 
     AppId = Configuration["Authentication_FacebookAppId"], 
     AppSecret = Configuration["Authentication_FacebookAppSecret"] 
    }); 

    app.UseMvc(routes => 
    { 
     routes.MapRoute(
      name: "default", 
      template: "{controller=Home}/{action=Index}/{id?}"); 
    }); 
} 

Répondre

0

Comme ce github post confirme, j'étais sur la bonne voie en pensant que ce fut probablement le port qui a été l'origine du problème. (Essentiellement, vous ne pouvez pas écouter http et https demandes sur le même port.)

Le correctif pour moi était en fait trois fois:

, vous devez d'abord faire attention comment votre exécution de votre application dans développement. Lors de l'exécution de Visual Studio sur Windows, la valeur par défaut est le démarrage à l'aide d'IIS/IIS Express. Cela provoque un problème car il utilise l'URL de l'application définie dans les paramètres du projet, plutôt que les URL que nous essayons de transmettre à Kestrel via la classe de démarrage. (Il est le applicationUrl défini dans la section iisSettings de launchSettings.json)

Si vous développez le menu déroulant sur le bouton start dans Visual Studio, vous devriez voir une option avec votre nom de projet, cela commence votre application à l'aide Kestrel via le CLI dotnet .

Deuxièmement, vous devez définir deux URL pour crécerelle à écouter, l'une pour http et l'autre pour https. Cela se fait simplement en passant dans deux URL, avec des ports différents à la méthode UseUrls() dans main():

var host = new WebHostBuilder() 
    .UseKestrel(options => { 
     options.UseHttps(certFile, certPass); 
    }) 
    .UseContentRoot(Directory.GetCurrentDirectory()) 
    .UseUrls("https://*:44388", "http://*:8080") 
    .UseStartup<Startup>() 
    .UseApplicationInsights() 
    .Build(); 

Enfin, si vous n'êtes pas en utilisant le port par défaut https (443), vous devez spécifier quel port voulez kestrel pour redirigerdemande aussi. Pour ce faire, il suffit de surcharger la méthode AddRedirectToHttps(), en passant un status code et le port que vous souhaitez rediriger aussi. J'ai utilisé le code d'état 301 pour rediriger définitivement vers https.

var options = new RewriteOptions() 
.AddRedirectToHttps(301, 44388); 
0

J'ai eu le même problème avec l'utilisation de .AddRedirectToHttps(). Mais je trouve que cela pourrait ne pas régler correctement le port au port SSL par défaut 443.

Utilisez AddRedirectToHttpsPermanent() à la place !, car il sera par défaut le port 443.

public void Configure(IApplicationBuilder app, IHostingEnvironment env) 
{ 
    // Redirects all HTTP requests to HTTPS 
    if (env.IsProduction()) 
    { 
     app.UseRewriter(new RewriteOptions() 
      .AddRedirectToHttpsPermanent()); 
    } 

    .... 
}