La risposta completa è nel numero 1, ma non si fermano qui la creazione di HTTPS, andare il passo in più:
1 - Abbiamo quindi utilizzare il RequireHttpsAttribute
per reindirizzare a HTTPS e impostare la porta SSL nelle opzioni MVC . Stiamo anche leggendo la porta SSL da launchSettings.json ma ne abbiamo solo bisogno in modalità Sviluppo.
2 - Utilizzare AddAntiforgery
per richiedere HTTPS sui token anti-contraffazione.
3 - Utilizzare il pacchetto NuGet NWebsec.AspNetCore.Middleware
e il metodo UseHsts
per abilitare la sicurezza del trasporto (HSTS) attraverso il sito. Non dimenticare di aggiungere il precarico qui sotto e di inviare il tuo sito allo HSTS Preload site. Maggiori informazioni here e here.
4 - Utilizzare il pacchetto NuGet NWebsec.AspNetCore.Middleware
e il metodo UseHpkp
per abilitare Public Key Pinning (HPKP) attraverso il sito. Nota che se commetti un errore con questo stai essenzialmente facendo il tuo sito.Maggiori informazioni here e here.
5 - Includere lo schema https in qualsiasi URL utilizzato. Content Security Policy (CSP) L'intestazione HTTP e Subresource Integrity (SRI) non funzionano correttamente quando si imita lo schema in alcuni browser. È meglio essere espliciti su HTTPS. per esempio.
<script src="https://ajax.aspnetcdn.com/ajax/bootstrap/3.3.4/bootstrap.min.js"></script>
6- utilizzano Visual Studio modello di progetto ASP.NET MVC Boilerplate per generare un progetto con tutto questo e molto di più costruito. È inoltre possibile visualizzare il codice a GitHub.
Dopo tutto quanto sopra, la classe Startup
dovrebbe essere simile a questa:
public class Startup
{
private readonly int? sslPort;
public Startup(IHostingEnvironment hostingEnvironment)
{
if (hostingEnvironment.IsDevelopment())
{
var launchConfiguration = new ConfigurationBuilder()
.SetBasePath(hostingEnvironment.ContentRootPath)
.AddJsonFile(@"Properties\launchSettings.json")
.Build();
// During development we won't be using port 443.
this.sslPort = launchConfiguration.GetValue<int>("iisSettings:iisExpress:sslPort");
}
}
public void ConfigureServices(IServiceCollection services)
{
services
.AddAntiforgery(options =>
{
options.RequireSsl = true;
});
.AddMvc(options =>
{
options.Filters.Add(new RequireHttpsAttribute());
options.SslPort = sslPort;
});
}
public void Configure(IApplicationBuilder application)
{
application
.UseHsts(options => options.MaxAge(days: 18 * 7).IncludeSubdomains().Preload())
.UseHpkp(options => options
.Sha256Pins(
"Base64 encoded SHA-256 hash of your first certificate e.g. cUPcTAZWKaASuYWhhneDttWpY3oBAkE3h2+soZS7sWs=",
"Base64 encoded SHA-256 hash of your second backup certificate e.g. M8HztCzM3elUxkcjR2S5P4hhyBNf6lHkmjAHKhpGPWE=")
.MaxAge(days: 18 * 7)
.IncludeSubdomains())
.UseCsp(options => options
.UpgradeInsecureRequests(this.sslPort.HasValue ? this.sslPort.Value : 443))
.UseMvc();
}
}
fonte
2016-07-29 07:32:00
Lei ha ragione, non ha funzionato con anima. Ma modificandolo ha funzionato: var withHttps = "https: //" + context.Request.Host + context.Request.Path; – William
Essendo così semplice, sembra che ci dovrebbe essere un semplice .RequireHttps() nella libreria integrata. – William
C'è un modo per verificare qual è la porta HTTPS? In genere, ovviamente, sarebbe 443, ma in un ambiente di sviluppo in cui, diciamo, stai usando IIS Express, in genere Visual Studio imposta la porta SSL su qualcosa come 44300. In tal caso, questo snippet di codice non verrebbe reindirizzato all'URL errato? Il significato, 'http: // localhost: 5900' diventerebbe' https: // localhost: 5900' quando dovrebbe essere 'https: // localhost: 44300'. Un modo per evitare di codificare il numero di porta? –