Yerel Sunucuda SSL Sertifikası Oluşturmak
Yerel Sunucuda SSL Sertifikası Oluşturmak

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ı var. 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ı. 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ığı zamanlarda 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.

Güncelleme – 09/03/2020: 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 önceki güncellemelerinde sağ tık menüsüne “Terminal” diye bir bağlantı eklenmişti ve sağ tıklayıp hemen Terminal’i açabiliyorduk. Lakin şimdi fark ettim ki geri kaldırılmış ve Windows Terminal’i ek olarak indirip kurmanız gerekiyor. Kaldı ki Terminal’i tıkladığınızda “Windows PowerShell” olarak açılıyor ve işlemlere onun üzerinden devam ettiğinizde OpenSSL hatası alıyorsunuz. O yüzden hazır elimizde mis gibi “Komut İstemi” varken Terminal’i indirip çalıştırma fikrini unutun gitsin. Komut İstemi var işte; akmaz, kokmaz.
Windows + R tuş kombinasyona basıp gelen ekrana “cmd” yazıp “Tamam” tuşuna basarak konsol ekranına (Komut İstemi) ulaşın. Bu şekilde C:\Windows\System32\cmd.exe dosyasına ulaşırsınız.

Windows 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 bu yazıyı ilk yazdığım sırada kurduğum WampServer’da gelen Apache sürümü 2.4.35‘tir. 09/03/2020 itibariyle kurduğum mevcut 2.4.41 sürümünde aynı işlemleri yeniden gerçekleştirdiğimde de hiçbir sorun yaşamadım. Apache Server’a bağlanmak için şu komut satırını kullanın:

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

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

Windows konsol üzerinden Apache Server’a ulaştıktan sonra, ilk adımda, bir kök güvenli giriş katmanı (Root SSL) sertifikası oluşturmanız gerekiyor. Bu kök sertifikasını daha sonra münferit alan adları için üreteceğiniz sertifikaları imzalamak için kullanacaksını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ğiniz 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ı kullanaksını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 ayarlanmış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 doldurun.

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

Yerel sunucunuzdaki alan adları için sertifika üretmeye başlamadan önce bir kereye mahsus az evvel oluşturduğ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. “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.test ö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_test 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ıştır yöntemi ile kullanabilirsiniz. Tabi bu dosyaları 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_test klasörünün içine domain.cnf adıyla kaydedin.

[req]
default_bits = 2048
prompt = no
default_md = sha256
distinguished_name = dn

[dn]
C=TR
ST=Turkey
L=Ankara
O=SSLTest
OU=SSLTest
emailAddress=ssl@localhost
CN = ssl.test

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

authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = ssl.test

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.test alan adı için bir sertifika anahtarı oluşturabilirsiniz. Bu anahtar root.key dosyasında saklanır. Sertifika anahtarı üretmek için aşağıdaki komut satırını kullanın. ssl_localhost klasörüne oluşturduğunuz root.key ve root.pem dosyalarını da ssl_test klasörüne kopyaladığınızdan emin olun. Sertifika anahtarı üretmek için kullanacağınız komut satırı:

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

Bu komut satırının çalıştırılması ile birlikte ssl_test klasörüne ssl.test.csr ve ssl.test.key adında iki dosya daha oluşturulur. ssl.test 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.test.crt adlı bir sertifika dosyasıdır. Bu sertfika dosyasını oluşturmak için şu komut satırını kullanın.

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

Enter pass phrase for ssl_test/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.test 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.

Güncelleme – 09/03/2020: Adem Şahin’in, yorum bölümünde, hata aldığını belirtmesi üzerine yazımı gözden geçirerek işlemleri tekrar denedim ve çıktılarını şu şekilde özetleyebilirim:

  1. Ben en son WampServer’ın 3.1.14 sürümünü kullanmıştım ve bu yazıyı da WampServer v3.1.14 üzerinde test ederek yazmıştım. Ondan sonra Localhost bir vesile ile silindi ve ben de yeniden kurmadım. O gün bugündür her gün bilgisayar başındayım ve Visual Studio’da hatırı sayılır epey .Net projesi gerçekleştirdim. :))
  2. Yorum üzerine yeniden WampServer indirmek istediğimde artık WampServer’ın 3.2.0 sürümü vardı. Onu indirip kurduğum, yukarıdaki işlem adımlarını 2.4.35 yerine 2.4.41 yazarak yeniden gerçekleştirdiğimde hiçbir sorun yaşamadım. Bu kez mevcut WampServer’ı kaldırıp elde daha önceden var olan WampServer’ın v3.1.14 sürümü kurdum ve yeniden denediğimde elbette bir hata almadım; sonuç gayet olumlu ve ssl.test alan adı için ürettiğim SSL sertifikası sorunsuz çalıştı. Bu da ekran görüntüsü:
  3. Ayrıca şunu da belirtmek isterim ki WampServer’ı ilk kurduğunuz zaman “LoadModule ssl_module modules/mod_ssl.so” satırının başındaki kare işaretini (hashtag) silmeniz ve sunucuyu yeniden başlatmanız gerekiyor. Keza extra klasörünün içindeki “httpd-ssl.conf” dosyasında da oluşturduğunuz SSL sertifikalarını Apache sunucusuna tanıtmanız gerekiyor. Muhtemelen ziyaretçimin hata alması, buralardaki eksik ya da hatalı yapılandırmalardan kaynaklanıyor olabilir. Dediğim gibi umulur ki oluşturulan sertifikaların Apache sunucusuna nasıl tanıtılacağına ilişkin hususlar da başka bir yazımın konusu olsun.

Tekrar sağlıcakla kalın.

Habip Oğuz

Kod yazmak onun için nefes almak... Daha fazla bilgi için buraya tıklayın.

İlgili yazılar
Yorumlar ( 10 )
  1. Ahmet Öztürk
    9 Şubat 2019 at 23:30
    Cevap ver

    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
      10 Şubat 2019 at 10:40
      Cevap ver

      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.

  2. Ali Yılmaz
    15 Mart 2019 at 09:03
    Cevap ver

    Hocam ssl.dev hata veriyor…

    • Habip Oğuz
      15 Mart 2019 at 11:37
      Cevap ver

      Mattias’ın yazısından da anlaşıldığı üzere Google Chrome ve Mozilla Firefox .dev uzantılarının yerel suncuda kullanılmasına izin vermiyormuş. Aynı şekilde .foo uzantısına da izin verilmediğini gördüm. Bu sebeple akla ilk gelen .test kullanmak. Alternatif olarak .ali veya her ne isterseniz kullanabilirsiniz. Misal ben yerel sunucuda test ortamı için .tr uzantısını kullanmayı tercih ediyorum. Makale içerisinde de .dev uzantılarını .test olarak değiştirdim.

  3. Adil
    17 Mayıs 2019 at 14:25
    Cevap ver

    yazı açıklayıcı olmuş. teşekkürler…

  4. AdemSahin2001
    12 Ocak 2020 at 17:55
    Cevap ver

    Merhabalar çok güzel bir makale olmuş. Başlamadan ben de bir bilgi eklemek istiyorum. Sizin verdiğiniz CMD kodlarında Apache Sürümü Apache2.35 iken yeni inenlerde 2.41.. şeklinde gittiği için aynısını kopyalayıp yapıştırınca hata veriyor ve nerden olduğunu anlamak biraz zaman alabilir ya da kullanıcıyı en baştan pes ettirebilme ihtimali olabilir. Onu da orada parantez içinde belirtirseniz iyi olur.

    Sorunumu anlatayım öncelikle, evdeki PC den 5-10 yıl önce vakti zamanında test sitemi yayınlamıştım ama bir süredir çıkan BAĞLANTINIZ GÜVENLİ DEĞİL Mesajı uzun zaman aradan sonra tekrar canımı sıktı, eskiden bir ara SSL olayına bakıp bırakmıştım ama şimdi ortalık ne vaziyette diye girdim yine işe yarar bişeyler bulamadım. Sadece 2 Tükçe sitede açıklama buldum ama onda da RSA-248 kurmalısınız deyince yine dağıldım. Ordan burdan derken videolara geçtim ve ama benim PC de sadece xampp server kuruluydu, o videolarda ise ubuntu üzerinden diyor ve daha kolay tarifler yapıyorlardı. Tabii bizimki windows üzerinde olunca ne yapacağımı bilemedim. Sizin açıklamalarınız üzerine xammp dururken Wamp64 ü de indirip kurdum. Root, phpmyadmin le falan uğraşmadan sadece localhost’a baktım yine Güvenli değil diyordu, dünden beridir adım adım hepsini yaptım CMD komutlarını falan. En sonunda passphrase yi de girip açtım yine Güvensiz diyordu. Bu kadar uğraştan sonra yemyeşil HttpS yi görmeyi umarken kırmızı Güvensiz uyarısıyla karşılaşınca 24 saatlik emeğin boşa gitmesi sebebiyle en sonunda ben de pes ettim.

    • Habip Oğuz
      3 Mart 2020 at 18:12
      Cevap ver

      Merhabalar,
      Yoğunluğumu mazur görürseniz geç de olsa en kısa zamanda tekrar deneyip yazının altında güncelleme olarak sonuçları vermeyi umuyorum…

      • AdemSahin2001
        2 Ocak 2021 at 09:07
        Cevap ver

        O gün neler yaptığımı unutmuşum, şimdi düşününce herşeyi halletmişsem neden çalışmadı da bıraktım anlamıyorum. Biraz ara verince yine baya yabancı kalmışım.
        Tekrar yaptıklarımı bir kontrol ettim. Evet C:\wamp64\bin\apache\apache2.4.41\bin\ssl_localhost içinde Root.Pem ve Root.Key i oluşturmuşum içleri de doluydu, o gün hangi aşamada vazgeçtim hatırlamıyorum ama Localhost yazınca kırmızı güvensiz yazısı değil de bir farklılık olarak kilit gözükmeyip ünlem var onu açınca “Bu siteye bağlantınız Güvenli değil” yazısı çıkıyor. Tekrar araştırmaya başlayıp hangi aşamada vazgeçtiğimi bulup bırakmayı düşünüyorum çünkü o zaman çok emek sarfetmiş bırakmıştım artık para vermeden buraya kadar olduğunu kabul etmiş olur çekilirim. Tabii orada sadece Root.Key ve Pem değil SSL_Localhost’u açıp ssl.TEST.cert yi falan da oluşturup yüklemiş olduğumu belirteyim.
        O certmgr (güvenli sertifika listesi) yi açtım 2020 nin 10-12 Ocak tarihlerinde yüklemiş olduğumu gördüm. Yine 1 yıl sonra 2021 in de 2 Ocak tarihinde yeni yüklenen de var ancak biraz incelediğimde Kasım 2009-2019 tarihli sadece localhost yazan bir sertifika gördüm çünkü bu bilgisayar 2015 ten sonra alındı 4-5 senelik, ya eskiden kurduğum başka bir serverin sertifikası ya da kendim böyle kurarken tarihle oynamışım gibi geliyor. O sertifikayı silsem bişey olur mu ona da bakacağım. Baştan adımları yaparak devam ettim. cd c:\wamp64\bin\apache\apache2.4.41\bin adresine falan da bağlandım sorun yok yani.
        3. adımımı da bitirmişim ama oradaki notta : subjectAltName’i burada nasıl belirttiğimize dikkat edin demenizden ne anlamamız gerektiği açıklanmamış. Yani başka bir web sitesi açınca onun ismi mi olacak belli değil yoksa hep @alt_names olarak mı kalacak ?
        4. ve son adıma gelince benim için de güncelleme yapmış olduğunuzu gördüm çok teşekkürler. O güncellemedeki ayarları da denedim, hepsini yaptım apache yi kapatıp açtım, PC ye bile restart attım yine düzelmedi. En sonunda o dediğiniz “httpd-ssl.conf” dosyasında da oluşturduğunuz SSL sertifikalarını Apache sunucusuna tanıtmanız gerekiyor kısmı için o dosyayı açtım herhangi bir ayar yapılacak gibi değil sadece çıktı metinler var. Bir de wamp ı tekrar kurayım diye baktım ama PC’mde o eski program set up’ını bulamadım yeni bir versiyonununu indireceğim.
        Ek birkaç bilgi : benim PC hala win7 o sorun olabilir mi, ya da gerçek bir alan adı oluşturmadan direk localhostu ya da www klasörünün içine sadece boş bir ssl_test klasörü atıp localhost/ssl_test diye denediğim için sorun olmuş olabilir mi ?

  5. AdemSahin2001
    2 Ocak 2021 at 10:32
    Cevap ver

    Bu arada en üstte Ahmet Öztürk sorduğu için ben de sağ alt köşedeki Wamp servera baktım onun kırmızı veya sarı değil YEŞİLe dönmüş olduğunu da söyleyeyim.

  6. AdemSahin2001
    2 Ocak 2021 at 11:48
    Cevap ver

    Ah en sonunda geçen yıl neden bıraktığımı buldum resmini almışım, normal xampp serverimi C: ye taşırken içinde görüverdim. Meğer SSL kurmak için statik ip lazımmış. Ancak yine de Youtube videolarını kontrol ettim, bir Hintli karmaşık olsa da baya anlatmış sizin zor yol dediğiniz linkleri falan çevirmeyi ama gerçekten zormuş. Artık böyle saatlerce uğraşacağıma en azından 15 dakikalık videoya bakarak uğraşır linkleri değiştiririm olmazsa. En azından statik ip gerekip gerekmediğini de görürüm artık inşallah.

Cevapla