Klasik Asp.Net'den [RequireHttps] attribute'ü kullanarak uygulayabildigimiz Https Asp.Net Core 1.1 ile gelmiş olsada konfigüre edilebilmesi oldukça zahmetli bir haldeydi. 2.0 ile ufak bir dokunuş daha yaptılar ancak asıl olması gereken yere 2.1 sürümü ile geldi desek çok yanlış olmaz. Asp.Net Core 2.1 ile Https configure ve redirect etme işlemleri oldukça basit bir şekilde yapılabilmekte.
.Net Core 2.1 kullanarak vs'da bir Asp.Net Core Web Api uygulaması oluşturduğumuzda Kestrel'in dinlediği 2 url default olarak uygulamada gelmekte. https://localhost:5001 ve http://localhost:5000 .
Startup.cs içerisinde set edebileceğimiz Https zorunlu hale getiren ve redirect işlemini yapabilmemizi sağlayan bir kaç middleware bulunmakta.
İlk middleware UseHsts()
app.UseHsts();
Bu middleware; man-in-the-middle ataklarına karşı HSTS (HTTP Strinct Transport Protocol)'i aktif eder. Browser'a header'da belli zaman aralıklarında sertifikayı cache'lemesini söyleyerek belirtilen time-range'in dışında sertifika değişip değişmediğini kontrol etmekte.
Bir diğer middleware ise UseHttpsRedirection()
app.UseHttpsRedirection();
Bu middleware ise http://localhost:5000'e gelen istekleri https://localhost:5001 adresine redirect eder.
Uygulamamızla ilgili http konfigurasyonları yaptık ancak sertifika eksik. Bunun için development mode'da sertifika satın almadan V.S. 2017 kullanılarak dummy bir sertifika oluşturulabilir. Production için ise ilgili sertifikayı satın aldıktan sonra Windows Certificate Store'a install edebilir yada proje deploy dosyaları arasında saklayabiliriz.
Asp.Net Core uygulamanızın Https connection sağlamak için diskte bulunan file-certificate'i kullanmasını sağlayabiliriz.
Bunun için Program.cs içerisinde bulunan CreateWebHostBuilder metodunda proje oluşturulurken gelen default konfigurasyon buunmakta.
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>();
CreateWebHostBuilder metodu oldukça customise edilebilen bir metot ve dilersek bunu aşağıdaki gibi konfigüre ederek Kestrel'e hangi portları dinleyeceğini söyleyip hangisinde Https sertifika tanımlaması yapacağını söyleyebiliriz.
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseKestrel(options =>
{
options.Listen(IPAddress.Loopback, 5000);
options.Listen(IPAddress.Loopback, 5001, listenOptions =>
{
listenOptions.UseHttps("certificate.pfx", "myAppCertificate");
});
})
.UseStartup<Startup>();
Kestrel üzerinde çalışan uygulamamız için 5000 ve 5001 portunu dinle, 5001 portu için ilgili Https tanımlamasını baz al. Bu tanımlamaları Asp.Net Core 2.1 ile birlikte projede yer alan launchSettings.json dosyasında da yapabildiğimizi unutmayalım.
Basitçe Asp.Net core uygulamalarında Https kullanımı nasıl olur çok fazla derine inmeden anlatmaya çalıştık. Daha fazla detay için bu adresten faydalanabilirsiniz.