Linux Ubuntu Üzerinden OpenVPN Client-Server Bağlantısı

Ubuntu üzerinden OpenVpn server’inize bağlantının iki yolundan bahsedeceğim. Biri CLI üzerinden bağlantı şekli diğeri GUI üzerinden bağlantı. Ben vpn server olarak PfSense kullanacağım. PfSense OpenSource firewall olarak kullanmanın yanı sıra birçok amaç için de kullanabilirsiniz. Ben burada ki işlem için vpn server olarak kullanacağım ve yapılandırma dosyalarını ondan elde edeceğim.

İlk önce vpn sunucusundan yapılandırma dosyalarını çekiyorum. Aşağıdaki gibi *.ovpn, *.p12, *.key. Bu arada yapılandırma çeşitleri sunucu tarafında farklılık göstermektedir. Yani ios için, android için, windows için ve standart paket olarak ayrılır.

Daha sonra “ifconfig” yada “ip address” komutu ile ip tablonuzu listeleyin.

> ifconfig

Bir de “route” yada “netstat -nr” yönlendirme tablunuzu listeleyin.

> route

Ardından bize gerekli olan paketi aşağıdaki komut yardımıyla kurarak devam edelim.

> sudo apt install network-manager-openvpn-gnome

Paket kurulumu bittikten sonra ilk olarak CLI üzerinden aşağıdaki komut aracılığı ile vpn server’e bağlantı gerçekleştirelim. Terminali başlatın ve cd komutu yardımıyla vpn dosyalarının bulunduğu dizine gidin.

> cd ve ls komutu

Aşağıdaki komutu çalıştırın. Sudo şifresini girdikten sonra sonra;

> sudo openvpn –config fw-TCP-1194.ovpn

Sizden vpn user ve şifre bilgisini isteyecektir.

Terminalin en son satırında aşağıdaki çıktıyı görürseniz başarılı bir şekilde bağlantı sağlamışsınızdır demektir.

Dada sonra ip’nizi ve yönlendirme tablonuzu yukarıdaki komutlar yardımıyla listelediğinizde sağlamasını yapmış olacaksınız.

NOT1 : Vpn bağlantısı gerçekleştikten sonra terminal açık kalması gerekecek, kapatırsanız bağlantı kopacaktır. Bu değişik atraksiyonlar ile çözülebilir fakat en doğru yöntem komuta “daemon”parametresini eklemektir.

> sudo openvpn –config fw-TCP-1194.ovpn –daemon

NOT2 : Hatta user ve şifre bilgisini girmeden dosyadan okutturarak ta bağlantı sağlayabilirsiniz. Bu işlerinizi kolaylaştırmak için gerekebilir. Bağlantı bilgilerinin olduğu dizinde yer almalı. Aşağıdaki komutla da bunu sağlayabilirisiniz.

> sudo openvpn –config fw-TCP-1194.ovpn –daemon –auth-user-pass VpnBilgiler

Şimgi GUI olarak yapılandırıp, bağlantı sağlayalım;

Aslında ana yapılandırma dosyamız *.ovpn, diğer iki dosya *.p12 ve *.key ise devamı gibi zaten *.ovpn içinde o dosyalar gösterilmiştir. Aşağıdaki screenshot’ta detaylıca açıkladım. GUI yapılandırmasını da gene *.ovpn dosyasının içeriğindeki bilgiler ışığında birebir aynı yaptıktan sonra bağlantı sağlayacağız.

Wi-Fi yayın işaretine tıklayıp, “Edit Connections…” tıklayın.

Ordan “Add” diyoruz.

Daha sonra “OpenVPN” seçeneğini create ediyoruz.

Ardından bilgileri *.ovpn dosyasının içeriğindeki bilgilerle aşağıdaki şekilde girdikten sonra “Advanced” tıklıyoruz.

Daha sonra alttaki seçenekleri check ediyoruz, aslında çok gerekli değil fakat biz gene de yapalım.

Sonra Security kısmından Cipher seçeneğini *.ovpn dosyasında yazan şeklinde belirliyoruz.

TLS Authentication kısmını gene *.ovpn dosyasındaki bilgiler ışığında belirleyip “OK” diyoruz.

OK dedikten sonra aşağıdaki gibi bilgiler kayıt altına alınıyor.

Şimdi VPN bağlantısını gerçekleştirelim. Gene Wi-Fi yayın işaretine tıklayıp, ordan VPN Connections kısmına ve vpn bağlantımıza tıklıyoruz.

VPN user’ın şifresini isteyecektir, alttaki gibi girip OK diyoruz ve bağlanmasını bekliyoruz.

Ve bağlantı başarılı bilgisini aldık.

Başarılı bağlantı sonrası Wi-Fi işaretinin üzerinde kilit şekli oluşur.

Daha sonra “ifconfig” yada “ip address” komutu ile ip bilgilerinizi ve bir de “route” yada “netstat -nr” komutu ile yönlendirme tablomuza bakarak bağlantı doğrulamasını yapabiliriz.

Nginx Reverse Proxy Server (Ters Vekil Sunucu) URL Rewrite Senaryo – Uygulama

Nginx nedir : Rus yazılım mühendisi Igor Sysoev tarafından geliştirilen hafif, stabil, hızlı bir mail istemcisi olarak kodlanan daha sonraları geliştirilerek tüm sunucular için uygun hale getirilen bir web sunucusudur.

Nginx birçok amaç için kullanılabilir. Bunlar, ilk meydana çıkış sebebi olan Mail servisi, Web servisi, Reverse Proxy(bu özellik genelde web sayfalarını cache’lemek için kullanılır ve böylelikle sunucu yükünü azaltıp daha hızlı ve stabil çalışmasını sağlar) ve Load Balancer olarak sıralanabilir.

Daha fazla detay için https://nginx.org/en/ linkini ziyaret edebilirsiniz.

Proxy Server(Vekil Sunucu) mantığını açıklamak gerekirse, istemci tarafında bulunan ve web sunuculara çıkış için yani bağlanırken arada bir vekil görevini görmesidir. Reverse Proxy(Ters Vekil) ise sunucu tarafında bulunan ve istemcilerin isteklerine cevap verip web sunuculara bağlanıp istemcilere iletmesidir.

Biz şimdi uygulama senaryomuzda Nginx’i URL Rewrite yapması için kullanacağız. İleride uygulamayı yaptıkça kafanızda daha da oturacaktır. Url nedir aşağıda değinelim.

URL nedir : “Uniform Resource Locator” teriminin baş harflerinden oluşan kısaltmadır. Aslında “adres” dediğimiz şeydir.

URL Rewrite nedir : “Url Yeniden Yazma” yani website Url’lerinin uzun ve karmaşık yapısını daha anlaşılır hale getirme işlemine verilen isimdir.

URL Redirect(Yönlendirme) nedir : Bir URL’ye gelen istekleri başka bir URL’ye iletme yani geçici veya kalıcı olarak yönlendirme işlemidir. URL yönlendirme birçok sebep için kullanılabilir.

Şimdi uygulama senaryomuzu yazalım ve niye böyle bir senaryoya ihtiyaç duyarız bunu belirtelim. Herşeyden evvel ben tüm işlemler için 3 adet sanal makina(CentOS, Ubuntu, Fedora) hazırladım ve o sanallar üzerinden senaryoyu gerçekleştireceğiz. Test domain’imiz webmin.test olarak kullanacağız.

1. Adım : Web Servers olarak kullanacağımız CentOS Sunucu kurulumu gerçekleştirilecek. IP yapılandırması (192.168.1.100). Şimdi bu sunucu üzerinde Apache ile webden hizmet veren birden fazla servis çalışıyor olabilir ve bu servisler 80 değil de hepsi kendine özgü port’lardan erişiliyor olabilir. Ben test için bu sunucu üzerine 10000 portundan çalışan Webmin servisini kuracağım. Siz aynı sunucu üzerine farklı portlardan çalışan birden fazla servisi kurabilirsiniz. Jira, confluence vs gibi yada manuel yapılandırmış servisler gibi gibi.

2. Adım : Reverse Proxy Server için Ubuntu Server kurulumu gerçekleştirilecek. IP yapılandırması (192.168.1.101). Bu sunucu üzerine Nginx kurulumu gerçekleştirilip URL Rewrite için yapılandırılacak.

3. Adım : Tüm bu işlemleri test edeceğimiz Client kullanıcı olarak Fedora kurulumu gerçekleştirilecek.

Peki niye böyle bir şeye ihtiyaç var kısmını açıklamaya gelecek olursak. 1. Adımda farklı portlardan çalışıp webden hizmet sunan birden fazla servis olabilir. Tabi biz bu servislere erişimi Ip üzerinden değilde DNS’te kaydını oluşturacağımız domain üzerinden yapacağız FAKAT servis/servisler farklı portlardan hizmet verdiği için bilindiği gibi http://domain_name:port_numarası şeklinde erişmelidir ki yoksa web servisi default web sayfasını yansıtacaktır. Tabi kullanıcılara port ezberletip şöyle böyle erişin demek mümkün olmayacağı için 2. Adımdaki Reverse Proxy servisini kurup sonra yapılandırıp o işi arka planda Nginx’e yaptıracağız. Tabi böylelikle Web Server’ın yükünü de hafifletmiş olacağız.

Hemen senaryonu adım adım gerçekleştirelim.

1. Adım :

CentOS sunucu kurulumu gerçekleştirilecek. Aşağıdaki link yardımıyla bunu yapabilirsiniz.

http://www.fatlan.com/centos-7-minimal-kurulum/

Daha sonra Ip yapılandırmasını senaryodaki gibi yapılandırın. Aşağıdaki linkten yardım alabilirsiniz.

http://www.fatlan.com/centos-7-network-ayarlari/

Ardından ben test için 10000 portundan çalışan Webmin servisini kuracağım. Siz isterseniz kendi bildiğiniz farklı porttan çalışan webden hizmet veren bir yada birden fazla servisi kurup çalışır vaziyete getirebilirsiniz. Yada manuel olarak Apache kurup onun üzerine bina edebilirsiniz.

http://www.fatlan.com/webmin-nedir-nasil-kurulur-centos-7-ve-6/

2. Adım :

Ubuntu Server kurulumu gerçekleştirilecek. Aşağıdaki link yardımıyla bunu yapabilirsiniz.

http://www.fatlan.com/ubuntu-server-14-04-lts-kurulumu/

Daha sonra Ip yapılandırmasını senaryodaki gibi yapılandırın. Aşağıdaki linkten yardım alabilirsiniz.

http://www.fatlan.com/ubuntu-14-04-lts-network-ayarlari/

Şimdi Nginx kurulumu gerçekleştirin. Gene alttaki linkten yardım alabilirsiniz.

http://www.fatlan.com/linux-ubuntu-centos-server-uzerine-nginx-kurulumu-nginx-nedir/

Ve şimdi Nginx’i Reverse Proxy(Ters Vekil) olarak yapılandıralım.

Aşağıdaki komutla yapılandırma dosyasının dizin’ine gidelim.

> cd /etc/nginx/sites-available/

Yapılandırma dosyamızı oluşturalım.

> touch webmin.test

Şimdi listeleyelim.

> ls

Daha sonra ise dosyanın içine herhangi bir editör yardımıyla girip aşağıdaki şekilde yapılandıralım.

> sudo vi webmin.test

server {

             listen 80;

             server_name webmin.test;

             return 301 https://192.168.1.100:10000;                  —> Bu kısım webmin https(443) ten çalıştığı için webmin servisine özel eklenmiştir. Http(80) çalışan servislerde bu satırı eklemeyiniz.

location / {

                  proxy_pass https://192.168.1.100:10000/;

                  proxy_set_header X-Forwarded-Host $host;

                  proxy_set_header X-Forwarded-Server $host;

                  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

                  proxy_set_header X-Real-IP $remote_addr;

                    }

}

 

Ardından yapılandırmamızın etkin olabilmesi için sembolik link oluşturalım.

> sudo ln -s /etc/nginx/sites-available/webmin.test /etc/nginx/sites-enabled/webmin.test

İşlemin doğruluğunu teyit edelim.

>ls -l /etc/nginx/sites-enabled/webmin.test

En son Nginx servisini reboot edelim.

> systemctl restart nginx.service yada sudo /etc/init.d/nginx restart

3. Adım :

Herşey tamam, şimdi sıra test etme aşamasında. Bunun için webmin.test domaini için dns’te kaydını oluşturup, istekleri nginx’e göndereceğiz, her şey doğru yapılandırıldıysa zaten arka planda nginx request’i işleyip web sayfasını kullanıcıya gönderecektir. Tabi biz tüm bu işlemler için yerel dns olan hosts dosyasını kullanacağız.

İlk olarak aşağıdaki komutla kaydımızı oluşturuyoruz. Dosyayı kaydedip, çıkıyoruz.

> vi /etc/hosts

Şimdi ping atıp test edelim ve başarılı bir şekilde çözümlediğini görelim.

> ping webmin.test

 

Şimdi sıra geldi tarayıcı üzerinden hizmete erişim. Adres çubuğuna webmin.test/ yazıp enter’a basalım ve başarılı bir şekilde bağlandığımızı görelim.

Normalde işlem tamam ve istediğimiz senaryo gerçekleşti fakat burada bilgi amaçlı olarak şundan da bahsedelim Webmin https(443) üzerinden çalıştığı için kullanıcı adı ve şifreyi yazdığınız zaman login olamayacaksınız ve aşağıdaki uyarıyı alacaksınız.

Bu uyarıyı almamak ve login olabilmek için biz yukarıda “return 301 https://192.168.1.100:10000;” satırını ekledik. Yani bu satır eklenince Webmin’e login olunabiliniyor. Yani Http(80)’de çalışan bir servis olsaydı ne bu sorun olacaktı ne de bu satırı ekleyecektik. Aslında burada bir trik var Nginx’te virtualhost dosyasına 2. Adımda yukarıdaki kadar satır eklemek yerine Webmin servisi zaten 443’ten çalıştığı için “return 301 https://192.168.1.100:10000SADECE bu satırla bile işimizi çözüyor olacaktık fakat adres çubuğunda, bağlantı gerçekleştiğinde domain adı değil de ip bilgileri yer alıyor olurdu. Aşağıdaki gibi. Halbuki 101 makinesine istek attık.

Daha fazla bilgi için https://www.nginx.com/blog/creating-nginx-rewrite-rules/ linkini ziyaret edebilirsiniz.

Linux Ubuntu/CentOS Server Üzerine Nginx Kurulumu

Nginx nedir : Rus yazılım mühendisi Igor Sysoev tarafından geliştirilen hafif, stabil, hızlı bir mail istemcisi olarak kodlanan daha sonraları geliştirilerek tüm sunucular için uygun hale getirilen bir web sunucusudur.

Nginx birçok amaç için kullanılabilir. Bunlar, ilk meydana çıkış sebebi olan Mail servisi, Web servisi, Reverse Proxy(ters vekil, bu özellik genelde web sayfalarını cache’lemek için kullanılır ve böylelikle sunucu yükünü azaltıp daha hızlı ve stabil çalışmasını sağlar) ve Load Balancer olarak sıralanabilir.

Sunucuya konsol yada ssh üzerinden login(root kullanıcısı değilseniz komutların başına “sudo” ekini eklemeyi unutmayın) olduktan sonra alttaki komutu çalıştırın.

> sudo apt update

Daha sonra Nginx kurulumu için aşağıdaki komutu çalıştırın.

> sudo apt install nginx

Şimdi Nginx kuruldu, aşağıdaki komut ile servisin durumunu kontrol edelim.

> systemctl status nginx.service

Servisimiz çalışıyor ve etkin durumdadır.

Aksi durumlarda aşağıdaki komut setlerini kullanabilirsiniz. Nginx yönetim komutları.

> sudo systemctl stop nginx.service                      –> Nginx Servisini durdurur.

> sudo systemctl start nginx.service                     –> Nginx servisini başlatır.

> sudo systemctl restart nginx.service                  –> Nginx servisini yeniden başlatır.

> sudo systemctl reload nginx.service                  –> Nginx servisini yeniden yükler.

> sudo systemctl enable nginx.service                  –> Nginx servisini etkin duruma getirir.

> sudo systemctl disable nginx.service                 –> Nginx servisini devredışı bırakır.

Bu arada Nginx’i web server olarak çalıştırmak için sistem içerisinde Güvenlik duvarı etkin ise firewall yapılandırmasını yapmalısınız, http(80) ve çalışacaksa https(443) port’larını açmalısınız.

> sudo ufw app list                                         –> Güvenlik duvarında yapılandırılmış uygulamaları bu komutla görebilirsiniz.

> sudo ufw allow/deny ‘Nginx HTTP’           –> Bu komutla güvenlik duvarında uygulamaya izin verebilirsiniz yada kapatabilirsiniz.

Nginx ayarlamaları için dosya ve dizinler aşağıdaki gibidir;

> /var/www/html                     –> Web sayfalarının dosyalarının barındırıldığı default dizin yolu, isterseniz kendiniz belirlediği bir dizin yoluda belirleyebilirsiniz.

> /etc/nginx                             –> Nginx servisinin yapılandırması için kullanılan dosyaların tutulduğu temel dizin yoludur.

> /etc/nginx/nginx.conf          –> Nginx servisinin yapılandırma dosyasıdır.

> /etc/nginx/sites-available/   –> Her bir site için kullanılacak olan yapılandırma dosyalarının saklandığı dizindir.

> /etc/nginx/sites-enabled/     –> Her bir site için kullanılacak olan yapılandırma dosyalarının çalışması(etkin olması) için “/etc/nginx/sites-available/” den buraya link’leneceği dizin yoludur.

> /etc/nginx/snippets             –> Nginx servisi için farklı yapılandırmalar için kullanılabilecek yapılandırma dosyasıdır.

Nginx Log’larının tutulduğu dizin ve dosyalar da aşağıdaki gibidir;

> /var/log/nginx/access.log           –> Tüm isteklerin log’landığı dosyadır.

> //var/log/nginx/error.log             –> Tüm hataların log’landığı dosyadır.

Ayrıca bu link’i inceleyebilirsiniz https://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-ubuntu-16-04

Evet, Nginx servisinin ne olduğunu anladık ve kurulumu gerçekleştirmeyi öğrendik. Bundan sonra amaca yönelik olarak yapılandırıp kullanmak kalıyor. Örneğin site ekleme, yapılandırıp, aktif çalışmasını sağlama gibi, bir sonraki makalelerde yeri geldikçe bahsedeceğiz.

Linux Apache ve Nginx WordPress Web Server Üzerine WildCard SSL Kurulumu

Linux üzerine apache olur, nginx olur ki globalde en çok kullanılan web servisleri bunlardır. Bu servislere ssl işi ilk etapta herkesi korkutmaktadır. Aslında bu iş çok kolay diye herkes aynı şeyi söyleyebilir, doğru kolay fakat işin mantığını anladıktan sonra kolaydır yoksa bilmeyen için zor, bilen için tabi ki kolaydır. Ben bu makalede ssl kurulumundan bahsedeceğim, hemde kendimde ssl kurarken yaşadığım deneyimlerden bahsedip konuyu ele almaya çalışacağım. Web server nedir, apache nedir, nginx nedir, http ve https nedir gibi konulara değinmeden, bildiğinizi farz ederek devam edeceğiz ki bu konulara girersek mesele haliyle çok uzayacaktır fakat http ve https mevzusunu tekrar bir gözden geçirmenizde fayda var. Her ihtimale karşı kısa kısa aşağıda konuya girmeden değinelim.

Tabi yine ssl kurulumuna girmeden önce sertifika nedir, ssl nedir, ssl çeşitleri ve uzantıları, openssl nedir, csr nedir gibi bir kaç terimden bahsedelim. Standart her yerde olan tanımlarına değinelim zaten konuya ilerledikçe ve yaptıkça daha da hakim olacağız.

Web Server nedir : Hosting(barındırma) işlemini İnternet protokolü üzerinden sunan bir sunucudur yada servistir desek daha doğru. Diğer bir ifade ile, bir web sitesinde yayınlanmak istenen sayfaların, resimlerin, videoların veya dokümanların globalde kullanıcılar tarafından erişebilmesini sağlayan sunucudur.

Apache nedir : Açık kaynak kodlu ve özgür bir web sunucu programıdır.

Nginx nedir : Rus yazılım mühendisi Igor Sysoev tarafından geliştirilen hafif, stabil, hızlı bir mail istemcisi olarak kodlanan daha sonraları geliştirilerek tüm sunucular için uygun hale getirilen bir web sunucusudur.

Http nedir : Hyper Text Transfer Protocol” yani “Hiper Metin Transfer Protokolü“dür. 1990 yılından beri dünya çapında ağ üzerinde (www-world web wide) kullanılan bir iletişim protokolüdür. HTTP protokolü ağ üzerinden web sayfalarının görüntülenmesini sağlayan protokoldür.

Https nedir : “Secure Hyper Text Transfer Protocol” yani Türkçesiyle güvenli hiper metin aktarım iletişim kuralı anlamına gelmektedir. HTTP‘nin SSL sertifikası eklenerek daha kullanışlı ve güvenilir hale getirilmiş şeklidir.

Domain nedir : İnternet ortamında ip adresleri kolay hatırlanamayacağından onlara karşılık gelecek olan, sizin internette var olmanıza olanak tanıyan kimliğiniz diyebiliriz. Yani en basit deyimiyle internet sitelerinizin isimleri. Fatlan.com gibi, google.com gibi, youtube.com gibi gibi.

Subdomain nedir : Yukarıdaki domain tanıma bağlı olarak ilgili domain için kullanabileceği alt domainlerdir. Yani fatlan.com için www.fatlan.com, arge.fatlan.com, video.fatlan.com, mail.fatlan.com gibi gibi. Bu kısımda DNS ile ilgili yazdığım iki makaleyi gözden geçirmenizde fayda var.

URL nedir : “Uniform Resource Locator” teriminin baş harflerinden oluşan kısaltmadır. Aslında adres” dediğimiz şeydir.

URL Redirect(Yönlendirme) nedir : Bir URL’ye gelen istekleri başka bir URL’ye iletme yani geçici veya kalıcı olarak yönlendirme işlemidir. URL yönlendirme birçok sebep için kullanılabilir.

URL Rewrite nedir : “URL Yeniden Yazma” yani website URL’lerinin uzun ve karmaşık yapısını daha anlaşılır hale getirme işlemine verilen isimdir.

Sertifika nedir : Herhangi bir nesneye niteliğini ya da kendisine verilmiş olan bir hakkı belirten resmi belgedir.

SSL yada SSL Sertifika nedir : Server ile alıcı iletişimi esnasında verilerin şifrelenerek yapılması işlemidir. En bilinen kullanımı ise, web sitesindeki veri alışverişi esnasında, server ile internet tarayıcısı arasındaki iletişimi şifrelenme sidir.

SSL sertifika çeşitlerine gelince temelde iki daha sonra kendi aralarında üçe ayrılır.

1. Doğrulama türüne göre ssl sertifikası : yani ssl satın alırken istenen belgeler doğrultusunda değişen sertifika türüdür.

         1.a : DV (Domain Validation) SSL : Domain doğrulama tipi sertifikadır. Belge gerektirmemesi ve sertifikanın anında üretilmesi sebebiyle tercih edilir.

         1.b : OV (Organization Validation) SSL : Organizasyon doğrulama tipi sertifikadır. Onay süreci kuruma ait belgelerle birlikte tamamlanır.

         1.c : EV (Extended Validation) SSL : Genişletilmiş doğrulama tipi sertifikadır. En gelişmiş sertifika ve pahalı bir sertifika türüdür. DV ve OV SSL sertifikalarının tüm özelliklerini barındırır, EV SSL sertifikaları web tarayıcılarında yeşil bar içerisinde kuruma ait unvanın da kullanıcılara gösterilmesini sağlarlar. Örnekler aşağıda belirtilmiştir.

2. Kullanım Alanına (Domain Tipine) Göre SSL Seritifikaları : yani domain yada bir yada birden fazla subdomain kullanıma göre değişen sertifika türüdür.

         2.a : Tek Domain / Standart SSL Sertifikaları : Subdomainler olmadan tek bir domain için kullanabilir sertifika türüdür. Yani fatlan.com için olabilir yada www.fatlan.com gibi.

         2.b : Multi Domain SSL Sertifikaları : İlgili domain için belirlediğiniz birden fazla olarak subdomainle birlikte kullanabileceğiniz sertifika türüdür. Örneğin fatlan.com, www.fatlan.com, arge.fatlan.com, video.fatlan.com gibi.

         2.c : Wildcard SSL Sertifikaları : Sertifikanın kullanıldığı domainin tüm subdomainlerinin imzalanmasını sağlayan sertifika tipidir. Yani ilgili domain için “multi domain gibi önceden belirlemenize gerek kalmadan+n tane subdomaini için kullanabileceğiniz sertifika türüdür.

Ayrıca ilgili linki de inceleyebilirsiniz https://www.sslnedir.com/ssl-cesitleri-ssl-sertifikasi-turleri-nelerdir/

Sertifika uzantı dosyalarını başta belirtelim ki kafada bir karışılık olmasın. Daha çok karşınıza çıkacak *.crt, *.cer, *.der, *.pem, *.pfx, *.key gibi gibi, daha farklı formatlar tabi ki mevcut ama konu ilgili olarak genelde bu uzantılı sertifikalar ile meşgul olacaksınız. Ama cer/crt ve pem den biraz bahsedelim. İlgili domain için birincil sertifika uzantısı cer/crt olacaktır. Pem dosyası ise sertifika dosyalarının birleştirilmiş kapsayıcısıdır. Bundle edilmiş halidir diyebiliriz. PEM sertifikası Base64 ile kodlanmış ASCII dosyasıdır. Aşağıdaki örnek bir sertifika görüntüleyerek açıklamak gerekirse ;

Mouse’la seçili olan alan *.google.com wildcart ssl’i cer/crt’ye karşılık gelen dosyadır.

Sertifika hiyerarşisi olarak kırmızı seçili alan;

-GeoTrust Global CA

     -Google Internet Authority G2

          -*.google.com ise pem dosyasına karşılık gelir.

Pem dosyasını biraz daha açacak olursak birden fazla ssl dosyasının, içine aktarıldığı kapsayıcı ssl dosyasıdır. Pem’de ssl zinciri oluşturmanın kuralı vardır ve o kurala göre oluşturulur. Pem dosyası herhangi bir editör uygulamasıyla düzenlenebilir. SSL zinciri temel olarak aşağıdaki kurala göre bundle edilir. Google örnek olarak ele alınmıştır.

1.Birincil Sertifika – YourDomainName.crt

2.Orta Sertifika – DigiCertCA.crt

3.Kök Sertifika – TrustedRoot.crt yani aşağıda;

—–BEGIN CERTIFICATE—–
(
Birincil SSL sertifikası google.com.cer dosyasının içeriği)
—–END CERTIFICATE—– 

—–BEGIN CERTIFICATE—–
(Sertifikanızı imzalayan Alt KÖK Makamı/
Orta-Ara Sertifika googleinternetauhority.cer dosyasının içeriği)
—–END CERTIFICATE—– 

—–BEGIN CERTIFICATE—–
(Alt KÖK Makamını imzalayan KÖK Makamı/
Kök Sertifika geotrustca.cer dosyasının içeriği)
—–END CERTIFICATE—–

Pem dosyasını anlamak adına, ayrıntılı bilgi için https://www.digicert.com/ssl-support/pem-ssl-creation.htm linkini mutlaka inceleyin.

Gene burada bir püf nokta paylaşayım. WildCard SSL’i satın alırken diyelim *.fatlan.com olarak talep ettiğinizde fatlan.com’u alternatif name’i WildCard SSL’inizin içermesi gerekiyor, buna dikkat edin. Aksi taktirde COMMON NAME hata mesajını alacaksınız. Ki bu common name uyarısını alırsanız ya domain name düzgün konfigure edilmemiştir yada ssl sertifikanız common name kısmı ile alakalı olarak DomainName’inizi desteklemiyordur. Bu hatayı aldığınızda, düzeltmek için Server Name’inizi yada HostName’inizi değiştirmeyin, sorun düzelmeyecektir. Aşağıdaki linki incelemenizi tavsiye ederim. Bu adreste RFC‘ye de referans verilmiş.

https://serverfault.com/questions/310530/should-a-wildcard-ssl-certificate-secure-both-the-root-domain-as-well-as-the-sub

SSL den bu kadar bahsettik şimdi gelelim bir ssl’imizin olabilmesi için yani bir ssl satın alabilmek için yapılması gerekenlere, en başta bir *.csr dosyamızın ve *.key private key dosyamızın olması lazım. Bu işleme crs oluşturma, csr generate etme yada csr request de diyebiliriz. Yani her şeyden evvel bir ssl satın alabilmek için web sunucusunda ssl csr isteği oluşturmak gerekli. Bu işlem için OpenSSL’i kullanacağız.

Csr nedir : Certificate Signing Request web sunucunuz tarafından üretilen, içinde web sunucunuza ve SSL sertifikasını kullanacağınız web sitesine dair bir takım veriler içeren koddur. SSL csr dosyasıyla satın alınacaktır.

Private Key nedir : CSR (Certificate Signing Request) oluşturma sırasında kullanılan ve SSL Sertifikasıyla uyumlu bir anahtardır. Private Key dosyasını güvenlik nedeniyle muhafaza ediniz ve 3. şahıslarla paylaşmayınız.

OpenSSL nedir : SSL ve TLS protokollerinin açık kaynak kodlu uygulamasıdır.

Bu aşamada şu link incelenebilir. https://www.bilgiguvenligi.gov.tr/guvenlik-teknolojileri/sertifika-sertifika-olusturma-sertifika-turleri.html

Dediğimiz gibi CSR isteğini OpenSSL ile oluşturacağız bunun için sunucuda openssl uygulaması kurulu olması gerekiyor. Kurulumuna hiç girmeyeceğim konu dağılmasın. Kurulumunu başka bir makalede ele alırsak burada link verebiliriz. Her şeyden önce CSR üretme ile ilgili olarak ortak platformların ve işletim sistemlerinin yer aldığı https://www.digicert.com/csr-creation.htm linkini mutlaka inceleyin.

Bu arada sunucuda birden fazla web sitesi barındırıyorsanız komutlarda oluşturduğunuz ilgili domain’in ismini kullanın. Csr oluşturulması interaktif bir şekilde olacaktır. Sizden bir takım bilgiler isteyecektir (Common name, State, Organization Name vs gibi), bu bilgileri elde edince gerekli dosya oluşacaktır.

Apache ve Nginx için OpenSSL ile aşağıdaki komutları kullanarak csr isteği oluşturabiliriz.

> openssl genrsa -out fatlan.com.key 2048                                      –> *.key private key dosyası oluşur.

> openssl req -new -key fatlan.com.key -out fatlan.com.csr           –> Ssl için *.key dosyasını kullanarak *.csr dosyası oluşur.

yada böyle iki komut girmek yerine aşağıdaki gibi tek komutla da halladebilirsiniz.

> openssl req -new -newkey rsa:2048 -nodes -keyout fatlan.com.key -out fatlan.com.csr

Tabi komuttan sonra istenilen bilgileri girdikten sonra(Common name, State, Organization Name vs gibi).

Tüm bunlara alternatif olarak da interaktif olarak yani komuttan sonra tek tek bilgi girmeden de bu işlemleri tek seferde toptan yapabilirsiniz. Yani aslında istediği tüm bilgileri tek bir komutta toptan verebilirsiniz.

Bunun için ilk önce https://www.digicert.com/easy-csr/openssl.htm link’ini açıp, aşağıdaki resimden de görüldüğü üzere Certificate Details kısmını doldurup, Generate butonuna basıyorsunuz. Daha sonra Information bölümünde kullanacağınız komut seti oluşturuluyor. Siz bunu direk kopyalayıp ilgili sunucuda çalıştırdıktan sonra hem *.key hem *. csr dosyanız otomatik olarak oluşuyor. Tüm işlem bu kadar.

Türkçe kaynak olabilecek bir link http://destek.doruk.net.tr/index.php?/Knowledgebase/Article/View/234/44/csr-oluturma-linux–openssl

Şimdi asıl konumuza geri dönecek olursak elimizde bir Linux Sunucu var ve bunda Apache yada Nginx kurulu ve içerik olarak WordPress kullanıyoruz (WordPress kısmı önemli bir kaç şeyi onun üzerinden değiştireceğiz yoksa ilgili kodda değişiklik yapmak gerekebilir) ve bu sunucuda ilgili Domain için CSR oluştu ve o CSR ile, ilgili domain için istediğimiz SSL Sertifikayı aldık ve Sunucuda $DizinYolu/SSL diye bir dizin oluşturup(siz farklı bir dizin de oluşturabilirsiniz) bu sertifikaları bu dizin içine kopyaladık varsayıyorum.

Bu arada Url’inizi adres çubuğunda fatlan.com diye çağırdığınızda www.fatlan.com olarak gelmesini sağlamalısınız. Zaten bu bir standarttır. Yani screenshot’lardan anlaşılacağı üzere adres çubuğuna  yazıp enter’a bastığınızda siteniz  olarak açılmalıdır.

Bunun ayarı aşağıdaki screenshot’tan anlaşılacağı üzere WordPress’te Ayarlar(Settings)-Genel(General) sekmesine giderek aşağıdaki şekilde yapılabilir. Siteniz WordPress değilse kod tarafında bu değişikliği yapmalısınız. Daha sonra burada başka bir ayar daha yapacağız (http-https url redirect) onuda ilerde bahsedeceğim.

Apache için SSL kurulumu;

Ssl aldık ve sunucuda diyelim /root/ssl klasörünün içine attık, zaten apache için hali hazırda http(80) üzerinden çalıştığı için VirtualHost tanımı mevcut olmalıdır. Şimdi biz ise VirtualHost tanımını içine https(443)‘ü aşağıdaki görüldüğü üzere ssl’li bir şekilde ekleyeceğiz.

Domain’imizin fatlan.com olduğunu varsayalım.

etc/httpd/conf-available.d/fatlan.com(ki bu dosyanın /etc/httpd/conf.d/110-fatlan.com.conf gibi olarak linklenmesi olayına hiç girmiyorum) dosyasının içerisindeki VirtualHost tanımına;

Default http(80) üzerinden çalışırken;

<VirtualHost *:80>

ServerAdmin fatlan@fatlan.com               –> Server Yönetici Email Adresi(opsiyonel)

ServerName fatlan.com                             –> İlgili Domain/AlanAdı Adresi

ServerAlias www.fatlan.com                     –> İlgili Domain/AlanAdı www Kayıtlarınında Karşılanacağı(opsiyonel)

DocumentRoot /var/www/fatlan.com/       –> Web Dosyalarımızın Bulunduğu Klasör Yolu, isterseniz farklı dizin yolu kullanabilirsiniz

</VirtualHost>

Daha sonra SSL ile beraber https(443) için satırların eklenmiş hali;

<VirtualHost *:80>

ServerAdmin fatlan@fatlan.com

ServerName fatlan.com

ServerAlias www.fatlan.com

Redirect permanent / https://www.fatlan.com/           –> Bu kısımda ise tüm istekleri https(443)’ye yönlendiriyoruz

DocumentRoot /var/www/fatlan.com/

</VirtualHost>

<VirtualHost _default_:443>

ServerAdmin fatlan@fatlan.com

ServerName www.fatlan.com

DocumentRoot /var/www/fatlan.com/

SSLEngine On                                                            –> SSL’i aktif ediyoruz

SSLCertificateFile /root/ssl/fatlan.com.cer                 –> İlgili Domain sertifikamızı belirtiyoruz

SSLCertificateKeyFile /root/ssl/fatlan.com.key         –> İlgili Domain için key dosyamızı belirtiyoruz

SSLCertificateChainFile /root/ssl/fatlan.com.pem     –> İlgili domain için bundle edilmiş sertifikamızı belirtiyoruz

SSLProtocol all -SSLv2 -SSLv3                                –> Güvenlik sebebi için SSLv2 ve v3 pasif duruma getiriyoruz

</VirtualHost>

Tamda bu aşamada iki önemli bilgi daha paylaşayım;

İlki : Sunucuda birden fazla web site barındırıyor iseniz, <VirtualHost *:80> yada <VirtualHost _default_:443> tanımları için kullanılan * ve _default_ yerine sunucunuzun ip adresini yazarsanız domain sunucuyu kendine tahsis edecektir yani diğer mevcut web sayfalarını açmak istediğinizde açılmayacak, yerine bu sayfa açılacaktır.

İkincisi : <VirtualHost *:80> tanımındaki Redirect permanent satırı yani 80’den 443’e yönlendirme satırı, evet bu istediğimiz işlemi yapacaktır fakat bunun yerine site yapımız WordPress olduğu için bu kısmı WordPress’te Ayarlar(Settings)-Genel(General) sekmesine giderek aşağıdaki şekilde yapabiliriz ve aslında <VirtualHost *:80> tanımını da VirtualHost dosyasından komple kaldırabiliriz. Zaten WordPress’te bu ayarlama yapıldığı vakit o işlemi WordPress yapacaktır. Ben her iki ayarı da aktif şekilde kullandım.

Nginx için SSL kurulumu;

Ssl aldık ve sunucuda diyelim /root/ssl klasörünün içine attık, zaten nginx için hali hazırda http(80) üzerinden çalıştığı için VirtulHost tanımı mevcut olmalıdır. Şimdi biz ise VirtualHost tanımı içine https(443) tanımını aşağıdaki şekilde ssl’li bir şekilde yapacağız.

Domainimizin fatlan.com olduğunu varsayalım.

/etc/nginx/sites-available/fatlan.com.conf(ki bu dosyanın /etc/nginx/sites-enabled/fatlan.com.conf olarak link’lenmesi olayına hiç girmiyorum) dosyasının içerisindeki VirtualHost tanımına;

Default http(80) üzerinden çalışırken;

server {

             listen 80;                                                                                        > Bu kısım istek tipi

             server_name fatlan.com;                                                               > İlgili Domain/AlanAdı Adresi

location / {

              try_files $uri $uri/ $uri$args $uri$args/ /index.html;

              root /var/www/fatlan.com;                                                           > Web Dosyalarımızın Bulunduğu Klasör Yolu

              index index.html index.htm;

                 }

}

Daha sonra SSL ile beraber https(443) için satırların eklenmiş hali;

server {

             listen 80;

             server_name fatlan.com;

             return 301 https://www.fatlan.com;                                —> Bu satırda istekleri https(443) yönlendirir, yani URL Redirect

location / {

              try_files $uri $uri/ $uri$args $uri$args/ /index.html;

              root /var/www/fatlan.com;

              index index.html index.htm;

                  }

}

server {

             listen 443;

             server_name fatlan.com;

             ssl on;                                                                              —> SSL’i aktif ediyoruz

             ssl_certificate /root/ssl/fatlan.com.pem;                          —> İlgili Domain sertifikamızı belirtiyoruz

             ssl_certificate_key /root/ssl/fatlan.com.key;                   —> İlgili Domain için key dosyamızı belirtiyoruz

location / {

              try_files $uri $uri/ /index.html;

              root /var/www/fatlan.com;

              index index.html index.htm;

                 }

}

Hepsi bu kadar, Tüm tanımlarımız tamamsa test edebiliriz. Buraya kadar her şey doğru ise siteye bağlanırken adres çubuğuna fatlan.com yazıp enter’a bastığımız zaman https://www.fatlan.com adresine bağlanıp sertifikayı aktif etmelidir ve adres çubuğunda https’ye kadar olan kısım yeşil görünmelidir. Aşağıdaki gibi.

Her şey tamam fakat yeşil görünmüyorsa bir yerde bir şey vardır. Alttaki resimden de anlaşılacağı üzere, seçili alanda uyarı verecektir.

Hatanın bir sebebi de https(443) olarak getirilen sitede sayfa içerisinde http(80) ile çağrılmaya çalışılan url’ler varsa bundan kaynaklı, sayfa Insecure görünüp yeşil gösterilmeyebilir. Bu linkleri düzeltip https’ye çevirmelisiniz.

Bunu için sayfayı açtıktan sonra alttaki screenshot’tan da anlaşılacağı üzere;

Mozilla Fİrefox ise : sağ click – Inspect Element

Google Chrome ise : sağ click – Inspect tıklayıp Console sekmesine geliyoruz. Evet bu bölümde https(443) ile çağırılan sayfada http(80) ile çağrılmaya çalışılan linkleri kızarık bir şekilde belirtecektir. Bu linkleri https(443) çevirdikten sonra yani kızarıklıkları yok ettikten sonra sayfada ssl kısmı secure görünüp yeşil‘lenecektir.

Yukarda belirtmiştim tekrar belirtmekte fayda var Wildcard satın alırken örneğin *.fatlan.com için aldığınız SSL’e alternatif name olarak fatlan.com’unda bulunması gerekli yoksa şöyle bir şey söz konusu olabilir. Sitenize ilk defa bağlanan biri yada tüm çerezleri silip inatla manuel olarak https://fatlan.com yazarak siteye bağlanmaya çalıştığında ssl https://www.fatlan.com yönlendirirken çakılıp fatlan.com comman name’i bulamayacağı için Insecure Connection hatası verecektir. Aşağıdaki görselden de anlaşılabilir.

En son olarak konu ile ilgisi var ama tam olarak hedefi Virtual Hosts(Sanal Konak) tanımlama ve çeşitleri  https://httpd.apache.org/docs/current/tr/vhosts/examples.html linkini inceleyebilirsiniz, kafanız karışırsa unutun gitsin. İleride bu konuya da bir makale ile değineceğiz.

Aklıma gelenler bunlar, umarım faydalı olur. Eksik yada hatalı gördüğünüz kısımları belirtirseniz sevinirim ve düzeltmeye çalışırız.