Yerel Sunucuda SSL Sertifikası Oluşturmak

6 2019 Şubat
6 Şubat 2019 tarihinde yazıldı.

Bugün ziyaret ettiğiniz hemen hemen her web sitesi SSL sertifikaları kullanarak HTTPS üzerinden yayın yapmaktadır. Henüz sitenize SSL kurmadıysanız sizin de SSL kurma ve kullanmaya başlama vaktiniz gelmiş olmalı. Zira sitenizi HTTPS üzerinden yayınlamanın birçok avantajı vardır. Neden HTTPS üzerinden yayın yapmamız gerektiğine ilişkin yazıma buradan göz atabilirsiniz. Diğer taraftan hosting üzerinde SSL kullanıp da Localhost’ta SSL kullanmamak gerçekten baş belasıdır. Zira bağlantı ve yönlendirmelerde sürekli http ile https’yi birbirine dönüştürmekle ya da en iyi ihtimal bunun için bir eklenti vs. yazmakla çırpınır durursunuz. İşte bu sorunu halletmek için yerel sunucuya SSL sertifikası kurmak en akıllı çözümdür. Tabi bunun için öncelikle yerel sunucuda SSL sertifikası oluşturmak gerekeceği açıktır.

Sorun

Özellikle Habipoguz.com’un 4.0 sürümü ile birlikte WordPress ve SSL kullanmaya başladıktan sonra WordPress’in site içi bağlantıları “https://” şeklindeki iletişim protokolü ile birlikte kaydettiği nazara alındığında yerel sunucuda linklerin “http” ile kullanılıyor, hosting’te “hhtps” ile kullanılıyor olması sebebiyle bu işin böyle gitmeyeceğini anladım ve yerel sunucuya ssl sertifikası kurmak için araştırmalara başladım. Bu arada uzun cümleler kurmam, bir nevî meslek hastalığı sanırım. 🙂 Bu araştırmalar sırasında Türkçe kaynak bulamadığım gibi İngilizce kaynaklardaki yönergeleri harfi harfine uygulamama rağmen Google Chrome her zaman NET::ERR_CERT_COMMON_NAME_INVALID hatası verdi.

SSl sertifikası hatası bağlantınız gizli değil

Adres satırındaki kırmızı renkli “Güvenli değil” uyarısının da ayrıca ne kadar can sıkıcı olduğu aşağıdaki resimden görülüyor.

SSl sertifikası hatası Google Chrome gizlilik hatası

Ben tarayıcı olarak Google Chrome’u kullanmam sebebiyle Google Chrome’dan ekran görüntüleri paylaştım ama Mozilla Firefox, Opera, Internet Explorer gibi popüler tarayıcılarda da aynı sorun var ve benzer ifadelerle yerel sunucudaki web sitesini HTTPS üzerinden düzgün şekilde göstermiyorlar.

Yerel sunucuya SSL sertifikası kurmak konusunda İnternette bulduğum makaleler yazıldığı zamandalarda doğru idi ama artık değil. Zira buradaki tartışmalardan da anlaşılacağı üzere sorun, Google Chrome’un Ocak 2017’den bu yana sertifikalarda commonName eşleşmesi için verdiği desteği kaldırmasından ve Ocak 2017’den beri bir subjectAltName gerektirmesinden kaynaklanıyormuş. Diğer tarayıcıların commonName desteğini ne zaman kaldırdığına ise bakmadım. Neticede hiç biri artık desteklemiyor. Neyse ki bunu da artık çözebiliyoruz.

Sorunun Çözümü

WampServer kurulumu’nu bu yazımda anlatmıştım. Ben de yerel sunucu olarak WampServer kullanmam sebebiyle anlatımlarımı artık WampServer ile birlikte gelen OpenSSL kullanarak yapacağım. WampServer’ı indirip setup dosyasını açtığınızda varsayılan olarak c:\wamp64\ dizinine ya da 32bit sürümünü indirmişseniz c:\wamp\ dizinine kurmak isteyecektir. Tavsiyem, ek bir ayarla vesaire ile uğraşmak istemiyorsanız varsayılan şekilde kurulsun.

Kurulumdan sonra Apache Server’a Windows’un konsol uygulaması (cmd / Windows Command Prompt / Windows komut istemi) üzerinden erişim sağlıyoruz. Windows 10’un sağ tık menüsüne son güncellemelerle “Terminal” diye bir bağlantı eklendi. İsterseniz Windows + R tuş kombinasyona basıp gelen ekrana “cmd” yazıp “Tamam” tuşuna basarak isterseniz bilgisayarınızda herhangi bir yere sağ tıklayıp “Terminal” bağlantısını tıklayarak konsol ekraranına ulaşın. Her iki şekilde de C:\Windows\System32\cmd.exe dosyasına ulaşırsınız.

Wndows konsol üzerinden öncelikle Apache Server’a erişim sağlıyoruz. sizin komut satırınız, kullandığınız Apache sürümüne göre değişiklik gösterebilir. Benim kurduğum WampServer’da gelen Apache sürümü 2.4.35’tir. Apache Server’a bağlanmak için şu komut satırını kullanıyoruz:

cd c:\wamp64\bin\apache\apache2.4.35\bin

1. Adım: Kök SSL Sertifikasının Oluşturulması

Windows konsol üzerinden Apahce Server’a ulaştıktan sonra, ilk adımda, bir kök güvenli giriş katmanı (Root SSL) sertifikası oluşturmamız gerekiyor. Bu kök sertifikasını daha sonra münferit alan adları için üreteceğimizi sertifikaları imzalamak için kullanacağız. SSL ekosistemine aşina değilseniz, DNSsimple’dan gelen bu makale, SSL kök sertifikaları hakkında yeterli bilgi veriyor.

Bir RSA-2048 anahtarı oluşturun ve onu root.key adıyla kaydedin. Bu dosya kök SSL sertifikası oluşturmak için anahtar olarak kullanılacaktır. Bir sertifika oluşturmak için bu anahtarı her kullandığınızda girmeniz için sizden bir anahtar parolası (pass phrase) oluşturmanız istenir. Normalde konsol üzerinden ürettiğimiz dosyalar c:\wamp64\bin\apache\apache2.4.35\bin klasörü içine kaydedir. Apache’nin program dosyalarıyla karışmaması için her alan adı için bir klasör oluşturmanızı tavsiye ederim. Zira ben öyle yapıyorum. Kök sertifikası için c:\wamp64\bin\apache\apache2.4.35\bin klasörünün içine ssl_localhost adında bir klasör oluşturun. Bu klasörün içine anahtar dosyasını oluşturmak için şu komut satırını kullanın:

openssl genrsa -des3 -out ssl_localhost/root.key 2048

Enter pass phrase for ssl_localhost/root.key’e bir parola girin. Örneğin localhost.

Verifying – Enter pass phrase for ssl_localhost/root.key’e parolayı yeniden yazdığınızda ssl_localhost klasörünün üçüne root.key dosyası oluşturulmuş olacak.

Yeni bir kök SSL sertifikası oluşturmak için bu anahtarı kullanacağız. Kök sertifikanızı oluşturmak için şu komut satırını kullanın:

openssl req -x509 -new -nodes -key ssl_localhost/root.key -sha256 -days 1825 -out ssl_localhost/root.pem -config c:\wamp64\bin\apache\apache2.4.35\conf\openssl.cnf

Yukarıdaki komut satırında sertifikasının geçerlilik süresi 1825 gün (5 yıl) olarak ayarlarlanmıştır. Gün sayısını istediğiniz gibi değiştirebilirsiniz. Ayrıca isteğe bağlı diğer bir takım bilgiler de sizden istenir. Bu bilgileri de dilediğiniz gibi doldurabilirsiniz.

2. Adım: Kök SSL Sertifikasının Bilgisayara Yüklenmesi

Yerel sunucunuzdaki alan adları için sertifika üretmeye başlamadan önce bir kere mahsus az evvel oluturduğunuz kök SSL sertifikasını bilgisayarınıza yüklemeniz gerekir. Böylece bilgisayarınıza kök sertifikanıza güvenmesini söylemiş olacaksınız. Kök SSL sertifikanızı bilgisayarınıza yükledikten sonra, bu kök sertifikasının ürettiği alan adı SSL sertifikalarına bilgisayarınızın güvenmesini sağlamış olacaksınız.

Win + R -> certmgr.msc -> Güvenilen Kök Sertifika Yetkilileri -> Eylem -> Tüm Görevler -> Al adımlarını takip ettikten sonra “İleri” düğmesine tıklayın ve C:\wamp64\bin\apache\apache2.4.35\bin\ssl_localhost konumundaki root.pem dosyasını seçin ve “Güvenilen Kök Sertifika Yetkilileri” depolama alanına kaydedin.

3. Adım: Yerel Sunucudaki Alan Adları İçin SSL Sertifikalarının Oluşturulması

ssl.dev örnek alan adı için yerel sunucuda bir SSL sertifikası oluşturun. Bunun için öncelikle c:\wamp64\bin\apache\apache2.4.35\bin klasörünün içine ssl_dev adında bir klasör oluşturun. Alan adı SSL sertifikası oluşturmak için bir domain.cnf dosyasına ve bir de domain.ext dosyasına ihtiyacınız olacak. Burada oluşturacağınız domain.cnf ve domain.ext dosyalarını bir kez oluşturduktan sonra diğer alan adları için de kopyala – yapıştur yöntemi ile kullanabilirsiniz. Tabi bu doyaları bir editörle (örneğin Notepad++) açıp içindeki domain name’leri değiştirmeniz gerekir. domain.cnf dosyasını oluşturmak için Notepad++’ı açıp aşağıdaki kodları yapıştırın ve ssl_dev klasörünün içine domain.cnf adıyla kaydedin.

Yine X509 v3 sertifikası oluşturmak için Notepad++’ı açıp aşağıdaki kodları yapıştırın ve ssl_dev klasörünün içine domain.ext adıyla kaydedin.  oluşturun. subjectAltName’i burada nasıl belirttiğimize dikkat edin.

4. Adım: Yerel Sunucudaki Alan Adları İçin SSL Sertifikalarının Üretilmesi

Yukarıdaki aşamaları geçtikten sonra artık yerel sunucudaki alan adlarınıza SSL sertifikası üretmek için hazırsınız. Şu hâlde elinizde, root.keyroot.pem, domain.cnf ve domain.ext adlarında dört dosya var. Artık domain.cnf dosyasında depolanan yapılandırma ayarlarını kullanarak ssl.dev alan adı için bir sertifika anahtarı oluşturabilirsiniz. Bu anahtar root.key dosyasında saklanır. Sertifika anahtarı üretmek için şu komut satırını kullanın:

openssl req -new -sha256 -nodes -out ssl_dev/ssl.dev.csr -newkey rsa:2048 -keyout ssl_dev/ssl.dev.key -config c:\wamp64\bin\apache\apache2.4.35\bin\ssl_dev\domain.cnf

Bu komut satırının çalıştırılması ile birlikte ssl_dev klasörüne ssl.dev.csr ve ssl.dev.key adında iki dosya daha oluşturulur. ssl.dev alan adı için bir alan adı sertifikası oluşturmak amacıyla daha önce oluşturduğumuz kök SSL sertifikası ile sertifika imzalama talebi yayınlanır. Bunun çıktısı ise ssl.dev.crt adlı bir sertifika dosyasıdır. Bunun için şu komut satırını kullanın.

openssl x509 -req -in ssl_dev/ssl.dev.csr -CA ssl_dev/root.pem -CAkey ssl_dev/root.key -CAcreateserial -out ssl_dev/ssl.dev.crt -days 1825 -sha256 -extfile ssl_dev/domain.ext

Enter pass phrase for ssl_dev/root.key: alanına root.key anahtarı için oluşturduğumuz parolayı yazın. Örneğimizde, localhost.

Şifrenin doğru yazılması ile birlikte artık yerel sunucudaki örnek ssl.dev alan adı için bir SSL sertikası oluşturduk ve kullanıma hazır. Bir sonraki yazımda oluşturduğumuz bu SSL sertifikasını WampServer’a nasıl kaydedeceğimizi ve kullanacağımızı anlatmayı umuyorum.

Sağlıcakla kalın.

Yerel Sunucuda SSL Sertifikası Oluşturmak” konusunda 2 yorum

  1. Ahmet Öztürk dedi ki:

    Oluşturduğum SSL sertifikalarını WampServer’a yükleyip yeniden başlattığımda WampServer simgesi yeşil olmuyor sarıda kalıyor. Nasıl çözebilirim?

    • Habip Oğuz dedi ki:

      httpd-ssl.conf dosyasındaki her şeyi silin ve sadece yorum satırı şeklinde olmayan Listen 443 ve SSL ile başlayan ifadeler kalsın. Dosyadaki bilgi kalabalığı hataya neden oluyor. Bir de ErrorLog ve TransferLog dosyalarını tanımlayın. Böylece tutulacak log dosyalarında hatanın sebebini görebilirsiniz.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir