Bir çok web projesi içerisinde https kullanabilmek için sertifikaya ihtiyaç duyuyoruz. Sertifikalara sadece web projeleri açısıdan değil bir çok network protokolü tarafından gerek duyuluyor. Kendimizi bu koduna geliştirmemiz kesinlikle çok önemlidir. Çünkü günümüz internet koşulları arasında sunucu ve kullanıcı arasındaki bağlantının güvenli olması çok önemlidir.
OpenSSL bizlere çok geniş yelpazede hizmet verebilen bir araçtır. Ürettiğimiz sertifikaların kullanımı biraz çetrefilli bir süreçtir çünkü self signed olarak adlandırılan sertifikalar sahip oluruz. Peki bu self signed nedir? Aslında biraz https üzerine kulak kabarcığınız olduysa sertifikaların belirli hizmet veren yerler tarafından sağlandığını biliyorsunuzdur. Bunlardan en popüleri bence şuan ücretsiz olarak hizmet sağlıyan Let’s encrypt olmalı. Kendi ürettiğimiz sertifikalar(self signed) tanınan/bilinen sertifika sağlayıcıları tarafından onanmadığı için hatalar alabiliriz.
Bu kadarlık özetten sonra sertifika oluşturma adımlarına bakalım. Bilgisayarınızda openssl kurulu olduğunu varsayıyorum.
openssl req -newkey rsa:2048 -nodes -keyout key.pem -x509 -days 365 -out certificate.pem
Dikkat Bu komut kullanılırken dikkat edilmesi gereken en önemli şey istenilen bilgiler arasında bulunan Common Name bu bilgi sertifikamızın kullanılacağı domain adresimizi(dogukanhan.com) veya ip adresimizi(80.22.22.33) gibi belirtmektedir ve yanlış girilmesi hatalara sebep olmaktadır. Domain adresimiz * karekteri kullanılarak(*.dogukanhan.com) sertifikamızın subdomain adreslerini destekler hale getirebiliriz.
Komutu ile RSA algoritması ile key.pem dosyasına private keyimizi certificate.pem dosyamıza ise public key’imizi çıkartıyoruz. 365 gün olarak belirtilen gün sayısı geçerlilik süresidir. Yine burada bahsettiğim private key çoğunlukla sunucu tarafında şifrelenmiş verinin çözümü, public key ise kullanıcı tarafında şifrelenme amaçlı kullanılır
openssl pkcs12 -inkey key.pem -in certificate.pem -export -out certificate.p12
Bu komut yardımıylada oluşturduğumu keyleri PKCS#12 (P12) formatında birleştiriyoruz. Yine sunucu tarafında SSL hizmeti verilebilmesi için private ve public key’in bulunması gerekiyor.