image from greengeeks.com

Asp.NET Core geliştirme ortamında SSL kullanmak

Visual Studio & IIS Express kullanarak geliştirme ortamında SSL kullanmak çok da zor değil. Visual Studio bir kaç adımda sizin için bir test sertifikası oluşturup yeni bir binding yaratabiliyor. Peki ya Linux/Mac üzerinde Asp.NET Core geliştiriyorsak? IIS yok, VS kolaylıklar diyarı yok. Sadece bir metin editörü ve Asp.NET Core var.

Öncelikle bir durum analizi yapalım. Asp.NET Core ile geliştirdiğimiz uygulamalar artık IIS üzerinde değil Kestrel üzerinde koşacak. Yeoman Asp.NET eklentisi ile boş bir web uygulaması açtığınızda main metodunuz aşağıdaki gibi görünecektir.

Burada odaklanmamız gereken yer 10. satırdaki UseKestrel() ifadesi. Bu ifade web server olarak varsayılan ayarlarıyla Kestrel kullanacağımıza işaret ediyor. Kestrel’e https kullanmasını söylemek için ayarlarıyla oynamalıyız.

Önce project.json dosyasına Microsoft.AspNetCore.Server.Kestrel.Https bağımlılığını ekliyoruz. Ardından UseKestrel() ifadesini aşağıdaki hale getiriyoruz.

.UseKestrel(options => {
options.UseHttps("testCert.pfx", "password");
})

Burada Kestrel’e https kullanmasını söyledik. Sertifika olarak da “password" şifreli testCert.pfx dosyasını verdik. Fakat elimizde böyle bir dosya yok. OpenSSL kullanarak kendi SSL sertifikamızı oluşturabiliriz. Önce eğer makinenizde yoksa OpenSSL kurun. Ardından aşağıdaki 3 komutu sırasıyla çalıştırarak testCert.pfx dosyasını edinebilirsiniz.

openssl genrsa 2048 > private.pem

openssl req -x509 -new -key private.pem -out public.pem

openssl pkcs12 -export -in public.pem -inkey private.pem -passout pass:password -out testCert.pfx

Artık elimizde testCert.pfx dosyamız var. Bu dosyayı uygulamanın root dizinine ekleyebiliriz.

Son olarak http ve https için uygulama portlarını atıyoruz.

.UseUrls("http://localhost:5000","https://localhost:5001")

Main methodunun son hali aşağıdaki gibi olacaktır.

Artık https://localhost:5001 ile SSL kullanan porta, http://localhost:5000 kullanarak da SSL kullanmayan porta erişebiliriz.

Kolay gelsin.