Takip et

Ubuntu 16.04’te Nginx İçin Kendi İmzalı SSL Sertifikası Oluşturma

Ubuntu 16.04’te Nginx İçin Kendi İmzalı SSL Sertifikası Oluşturma Giriş Günümüz internet dünyasında güvenlik, web uygulamaları ve sunuc

Ubuntu 16.04’te Nginx İçin Kendi İmzalı SSL Sertifikası Oluşturma

Giriş

Günümüz internet dünyasında güvenlik, web uygulamaları ve sunucular için vazgeçilmez bir unsurdur. Kullanıcı verilerinin korunması, veri bütünlüğünün sağlanması ve sunucu ile istemci arasındaki iletişimin şifrelenmesi, modern web standartlarının temelini oluşturur. Bu bağlamda, Secure Sockets Layer (SSL) ve onun daha modern halefi Transport Layer Security (TLS) protokolleri, web trafiğini şifrelemek için kullanılan kritik teknolojilerdir. Bir SSL/TLS sertifikası, bir web sitesinin kimliğini doğrular ve sunucu ile tarayıcı arasında şifreli bir bağlantı kurulmasını sağlar. Bu sayede, hassas bilgiler (kredi kartı numaraları, parolalar vb.) kötü niyetli üçüncü şahıslar tarafından ele geçirilmeye karşı korunmuş olur.

Nginx, yüksek performanslı, kararlı ve esnek bir web sunucusu ve ters proxy’dir. Dünya genelindeki en popüler web sunucularından biri olan Nginx, statik içerik sunmaktan dinamik uygulamaları yönetmeye kadar geniş bir yelpazede kullanılmaktadır. Ubuntu 16.04 ise, kararlılığı ve geniş paket desteği ile sunucu ortamları için sıkça tercih edilen bir Linux dağıtımıdır. Bu makale, Ubuntu 16.04 üzerinde çalışan bir Nginx sunucusu için kendi imzalı (self-signed) SSL sertifikası oluşturma ve yapılandırma sürecini adım adım detaylandıracaktır. Kendi imzalı sertifikalar, genellikle geliştirme ortamlarında, dahili ağlarda veya test amaçlı kullanılır, zira tarayıcılar tarafından otomatik olarak güvenilir kabul edilmezler ve bir uyarı mesajı gösterirler. Ancak, temel SSL/TLS işlevselliğini anlamak ve uygulamak için mükemmel bir başlangıç noktası sunarlar. Bu makale boyunca, OpenSSL aracını kullanarak bir özel anahtar ve sertifika oluşturacak, Nginx’i bu sertifikayı kullanacak şekilde yapılandıracak ve son olarak kurulumu test edeceğiz.

Neden Kendi İmzalı SSL Sertifikası?

SSL/TLS sertifikaları genellikle Let’s Encrypt gibi ücretsiz sertifika sağlayıcılarından veya Comodo, DigiCert gibi ticari Sertifika Yetkililerinden (CA) alınır. Bu sertifikalar, tarayıcılar tarafından otomatik olarak güvenilir kabul edilir çünkü sertifikayı veren CA, tarayıcıların güvendiği bir kök sertifika otoritesidir. Ancak, kendi imzalı sertifikaların da belirli kullanım durumları ve avantajları vardır:

* Maliyet Etkinliği: Kendi imzalı sertifikalar ücretsizdir. Bir sertifika yetkilisine ödeme yapmanıza gerek kalmaz.
* Hızlı Kurulum: Bir CA’dan sertifika alma süreci, doğrulama adımları gerektirdiğinden biraz zaman alabilir. Kendi imzalı sertifikayı anında oluşturabilirsiniz.
* Geliştirme ve Test Ortamları: Canlı bir üretim ortamında olmasa da, bir uygulamanın HTTPS üzerinden nasıl çalıştığını test etmek için idealdir. Geliştiriciler, uygulamanın SSL/TLS yapılandırmasını, yönlendirmeleri ve diğer güvenlik özelliklerini kendi imzalı sertifikalarla test edebilirler.
* Dahili Ağlar ve Intranet Uygulamaları: Şirket içi ağlarda veya sadece belirli bir grup kullanıcı tarafından erişilen intranet uygulamalarında, sertifika güvenini manuel olarak ekleyebileceğiniz durumlarda kendi imzalı sertifikalar kullanılabilir. Bu tür ortamlarda, harici bir CA’ya ihtiyaç duyulmaz.
* Temel SSL/TLS Bilgisi Edinme: Kendi imzalı sertifika oluşturma süreci, SSL/TLS protokolünün nasıl çalıştığı, özel anahtarların ve genel anahtarların rolü, sertifika imzalama süreci gibi temel kavramları anlamak için pratik bir yol sunar.

Ancak, kendi imzalı sertifikaların önemli bir dezavantajı vardır: tarayıcılar tarafından güvenilir kabul edilmezler. Bir kullanıcı kendi imzalı sertifika kullanan bir siteye eriştiğinde, tarayıcı genellikle “Bağlantınız güvenli değil” veya benzeri bir uyarı mesajı gösterir. Bu, sertifikanın bir CA tarafından doğrulanmadığı ve dolayısıyla site kimliğinin garanti edilmediği anlamına gelir. Üretim ortamlarında, özellikle genel kullanıma açık web sitelerinde, bu uyarı kullanıcı güvenini zedeleyeceği için kesinlikle ticari veya Let’s Encrypt gibi ücretsiz CA sertifikaları tercih edilmelidir.

Önkoşullar

Bu makaledeki adımları uygulayabilmek için aşağıdaki önkoşullara sahip olmanız gerekmektedir:

* Ubuntu 16.04 Sunucusu: Bu makale, Ubuntu 16.04 işletim sistemi üzerinde çalışmak üzere tasarlanmıştır. Farklı bir Linux dağıtımı veya sürümü kullanıyorsanız, bazı komutlar veya dosya yolları farklılık gösterebilir.
* Sudo Yetkisine Sahip Bir Kullanıcı: Sunucuda komutları çalıştırmak için sudo yetkisine sahip bir kullanıcı hesabınız olmalıdır.
* Nginx Kurulumu: Nginx web sunucusunun sunucunuza kurulu olması gerekmektedir. Eğer kurulu değilse, ilk adımda kurulumunu gerçekleştireceğiz.
* Temel Linux Komut Bilgisi: cd, ls, mkdir, nano (veya tercih ettiğiniz başka bir metin düzenleyici), sudo gibi temel Linux komutlarına aşina olmanız beklenir.
* Açık Port 443: Güvenlik duvarınızda HTTPS trafiği için varsayılan port olan 443’ün açık olması gerekmektedir.

Adım 1: Nginx Kurulumu

Eğer Nginx sunucunuzda kurulu değilse, aşağıdaki adımları izleyerek kurabilirsiniz. İlk olarak, paket listesini güncelleyelim ve ardından Nginx’i kuralım:

sudo apt update
sudo apt install nginx -y

Kurulum tamamlandıktan sonra, Nginx servisinin otomatik olarak başlaması gerekir. Durumunu kontrol etmek için aşağıdaki komutu kullanabilirsiniz:

sudo systemctl status nginx

Çıktıda active (running) ibaresini görmelisiniz. Eğer çalışmıyorsa, sudo systemctl start nginx komutuyla başlatabilirsiniz. Ayrıca, web tarayıcınızdan sunucunuzun IP adresine giderek Nginx’in varsayılan karşılama sayfasını görüp görmediğinizi kontrol edebilirsiniz.

Adım 2: SSL Sertifikası İçin Dizin Oluşturma

SSL sertifikaları ve özel anahtarların saklanması için genellikle /etc/ssl dizini altında özel bir yapılandırma tercih edilir. Güvenlik ve düzen açısından, Nginx’in kendi imzalı sertifikasını ve anahtarını saklamak için ayrı bir dizin oluşturalım:

sudo mkdir -p /etc/nginx/ssl

Bu komut, /etc/nginx dizini altında ssl adında bir dizin oluşturacaktır. -p parametresi, üst dizinlerin (bu durumda /etc/nginx) mevcut olmaması durumunda otomatik olarak oluşturulmasını sağlar.

Adım 3: Kendi İmzalı SSL Sertifikası ve Özel Anahtar Oluşturma

Şimdi OpenSSL aracını kullanarak kendi imzalı SSL sertifikamızı ve özel anahtarımızı oluşturacağız. OpenSSL, şifreleme ve sertifika yönetimi için güçlü ve çok yönlü bir komut satırı aracıdır.

Aşağıdaki komutu kullanarak hem özel anahtarı hem de sertifikayı tek bir adımda oluşturabiliriz:

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/nginx.key -out /etc/nginx/ssl/nginx.crt

Bu komutu çalıştırdığınızda, size sertifika bilgileriyle ilgili bazı sorular sorulacaktır. Bu sorulara vereceğiniz cevaplar sertifikanın içeriğinde yer alacaktır.

Sertifika Bilgileri

Komut çalıştırıldıktan sonra aşağıdaki gibi bir dizi soru ile karşılaşacaksınız:

You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:TR
State or Province Name (full name) [Some-State]:Istanbul
Locality Name (eg, city) []:Istanbul
Organization Name (eg, company) [Internet Widgits Pty Ltd]:MyCompany
Organizational Unit Name (eg, section) []:IT
Common Name (e.g. server FQDN or YOUR name) []:example.com
Email Address []:admin@example.com

Bu alanları kendi bilgilerinize göre doldurabilirsiniz.
* Country Name (2 letter code): Ülke kodu (örn: TR, US).
* State or Province Name (full name): Eyalet veya il adı (örn: Istanbul).
* Locality Name (eg, city): Şehir adı (örn: Istanbul).
* Organization Name (eg, company): Şirket veya organizasyon adı (örn: MyCompany).
* Organizational Unit Name (eg, section): Organizasyonel birim (örn: IT).
* Common Name (e.g. server FQDN or YOUR name): Bu, sertifikanın verileceği alan adıdır. Test amaçlı olarak sunucunuzun IP adresini veya example.com gibi bir alan adını kullanabilirsiniz. Eğer canlı bir alan adı kullanıyorsanız, buraya o alan adını girmeniz önemlidir.
* Email Address: İletişim e-posta adresi.

Önemli Parametreler

Yukarıdaki OpenSSL komutunda kullanılan parametrelerin anlamları şunlardır:

* -req: Yeni bir Sertifika İmzalama İsteği (CSR) oluşturulacağını belirtir. -x509 ile birlikte kullanıldığında, doğrudan bir sertifika oluşturur.
* -x509: Bu, bir sertifika imzalama isteği oluşturmak yerine, doğrudan kendi imzalı bir sertifika oluşturacağımızı belirtir. Bu sertifika, kendi özel anahtarımızla imzalanır.
* -nodes: “no DES” anlamına gelir. Bu parametre, özel anahtarın şifrelenmemesini sağlar. Özel anahtarın şifrelenmesi, her Nginx yeniden başlatıldığında bir parola girmenizi gerektireceğinden, çoğu otomatik sunucu yapılandırmasında bu istenmeyen bir durumdur. Ancak güvenlik açısından, anahtarın şifrelenmesi daha iyi olabilir, bu durumda -nodes parametresini kaldırmanız gerekir.
* -days 365: Sertifikanın geçerlilik süresini gün cinsinden belirtir. Burada 365 gün (1 yıl) olarak ayarlanmıştır. Üretim ortamlarında bu süre genellikle daha uzun olabilir.
* -newkey rsa:2048: Yeni bir özel anahtar oluşturulacağını belirtir. rsa:2048, 2048 bit uzunluğunda bir RSA anahtarı oluşturulacağını gösterir. Bu, günümüz standartlarına göre yeterince güvenli kabul edilen bir anahtar uzunluğudur.
* -keyout /etc/nginx/ssl/nginx.key: Oluşturulan özel anahtarın kaydedileceği dosya yolunu belirtir. Bu dosya, /etc/nginx/ssl/nginx.key olarak ayarlanmıştır. Bu dosyanın yetkisiz erişimden korunması çok önemlidir.
* -out /etc/nginx/ssl/nginx.crt: Oluşturulan SSL sertifikasının kaydedileceği dosya yolunu belirtir. Bu dosya, /etc/nginx/ssl/nginx.crt olarak ayarlanmıştır.

Bu adımları tamamladığınızda, /etc/nginx/ssl/ dizininde nginx.key (özel anahtar) ve nginx.crt (SSL sertifikası) adında iki dosya bulunacaktır.

Adım 4: Nginx’i SSL Kullanacak Şekilde Yapılandırma

Sertifikamız ve özel anahtarımız hazır olduğuna göre, Nginx’i bu dosyaları kullanarak HTTPS trafiğini sunacak şekilde yapılandırmamız gerekiyor. Nginx yapılandırmaları genellikle /etc/nginx/sites-available/ dizininde bulunur ve sites-enabled dizinine sembolik bağlantılar aracılığıyla etkinleştirilir.

Yeni Bir Sunucu Bloğu Oluşturma

En iyi uygulama, mevcut varsayılan yapılandırmayı değiştirmek yerine, yeni bir sunucu bloğu dosyası oluşturmaktır. Bu, yapılandırmalarınızı daha düzenli tutmanıza yardımcı olur.

Yeni bir yapılandırma dosyası oluşturalım:

sudo nano /etc/nginx/sites-available/default-ssl

Açılan boş dosyaya aşağıdaki yapılandırmayı yapıştırın. Bu yapılandırma, HTTP (port 80) trafiğini HTTPS’e (port 443) yönlendirecek ve HTTPS bağlantılarını yapılandırdığımız kendi imzalı sertifika ile sunacaktır.

server {
    listen 80;
    listen [::]:80;
    server_name example.com www.example.com; # Kendi alan adınızı veya sunucu IP'nizi buraya yazın
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name example.com www.example.com; # Kendi alan adınızı veya sunucu IP'nizi buraya yazın

    ssl_certificate /etc/nginx/ssl/nginx.crt;
    ssl_certificate_key /etc/nginx/ssl/nginx.key;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH;
    ssl_ecdh_curve secp384r1;
    ssl_session_cache shared:SSL:10m;
    ssl_session_tickets off;
    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 8.8.8.8 8.8.4.4 valid=300s;
    resolver_timeout 5s;
    add_header X-Frame-Options DENY;
    add_header X-Content-Type-Options nosniff;
    add_header X-XSS-Protection "1; mode=block";

    root /var/www/html; # Web sitenizin kök dizini
    index index.html index.htm index.nginx-debian.html;

    location / {
        try_files $uri $uri/ =404;
    }
}

Önemli Not:
* server_name yönergesini kendi alan adınızla veya sunucu IP adresinizle değiştirmeyi unutmayın. Eğer bir alan adınız yoksa ve sadece IP adresi üzerinden erişiyorsanız, buraya sunucunuzun IP adresini yazabilirsiniz. Örneğin: server_name 192.168.1.100;
* root yönergesi, web sitenizin dosyalarının bulunduğu dizini gösterir. Varsayılan Nginx kurulumunda bu genellikle /var/www/html‘dir.
* Bu yapılandırma, HTTP’den HTTPS’ye yönlendirme (301 kalıcı yönlendirme) içerir. Bu, kullanıcıların sitenize HTTP üzerinden erişmeye çalıştığında otomatik olarak HTTPS’ye yönlendirileceği anlamına gelir.

Yapılandırmayı kaydettikten sonra (Nano’da Ctrl+O, Enter ve Ctrl+X), bu sunucu bloğunu etkinleştirmek için bir sembolik bağlantı oluşturmamız ve varsayılan Nginx yapılandırmasını devre dışı bırakmamız gerekir (çünkü o da port 80’i dinliyor olabilir).

sudo ln -s /etc/nginx/sites-available/default-ssl /etc/nginx/sites-enabled/
sudo rm /etc/nginx/sites-enabled/default

Bu komutlar, yeni oluşturduğumuz default-ssl yapılandırmasını etkinleştirir ve Nginx’in varsayılan yapılandırmasını devre dışı bırakır.

Gerekli Yönergelerin Açıklaması

Yukarıdaki Nginx yapılandırmasında kullanılan bazı önemli yönergeleri açıklayalım:

* listen 443 ssl http2;: Nginx’in 443 numaralı portu SSL/TLS ve HTTP/2 protokolleri için dinlemesini sağlar. http2 desteği, modern web performansını artırır.
* ssl_certificate /etc/nginx/ssl/nginx.crt;: SSL sertifikasının tam yolunu belirtir.
* ssl_certificate_key /etc/nginx/ssl/nginx.key;: Özel anahtarın tam yolunu belirtir.
* ssl_protocols TLSv1.2 TLSv1.3;: Kullanılacak SSL/TLS protokollerini belirler. Eski ve güvensiz protokolleri (SSLv3, TLSv1.0, TLSv1.1) devre dışı bırakarak güvenliği artırır.
* ssl_prefer_server_ciphers on;: Sunucunun, istemcinin önerdiği yerine kendi şifreleme paketlerini tercih etmesini sağlar.
* ssl_ciphers EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH;: Güvenli şifreleme paketlerini tanımlar. Bu liste, güçlü şifrelemeleri tercih eder.
* ssl_ecdh_curve secp384r1;: ECDH anahtar değişiminde kullanılacak eğriyi belirtir.
* ssl_session_cache shared:SSL:10m;: SSL oturum önbelleğini etkinleştirir. Bu, aynı istemcinin birden fazla bağlantı kurması durumunda el sıkışma sürecini hızlandırır.
* ssl_session_tickets off;: SSL oturum biletlerini devre dışı bırakır. Güvenlik endişeleri nedeniyle genellikle kapatılması önerilir.
* ssl_stapling on; ssl_stapling_verify on;: OCSP Stapling’i etkinleştirir. Bu, sunucunun sertifika iptal durumunu CA’dan önceden alıp istemciye sunarak performans ve gizliliği artırır.
* resolver 8.8.8.8 8.8.4.4 valid=300s; resolver_timeout 5s;: OCSP Stapling için DNS çözümleyicilerini ve zaman aşımını belirtir. Google DNS sunucuları örnek olarak verilmiştir.
* add_header X-Frame-Options DENY; add_header X-Content-Type-Options nosniff; add_header X-XSS-Protection "1; mode=block";: HTTP güvenlik başlıkları ekler. Bu başlıklar, tıklama kaçırma (clickjacking), MIME türü koklama ve XSS saldırılarına karşı koruma sağlamaya yardımcı olur.

Bu yapılandırma, modern güvenlik standartlarına uygun ve iyi yapılandırılmış bir HTTPS sunumu için sağlam bir temel oluşturur.

Adım 5: Nginx Yapılandırmasını Test Etme ve Yeniden Başlatma

Nginx yapılandırma dosyasını düzenledikten sonra, herhangi bir sözdizimi hatası olup olmadığını kontrol etmek çok önemlidir. Hatalı bir yapılandırma Nginx’in başlamasını engelleyebilir.

Yapılandırmayı test etmek için aşağıdaki komutu kullanın:

sudo nginx -t

Eğer her şey yolundaysa, aşağıdaki gibi bir çıktı görmelisiniz:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Herhangi bir hata mesajı alırsanız, yapılandırma dosyanızı dikkatlice kontrol edin ve hataları düzeltin. Genellikle noktalı virgül eksikliği veya yanlış yazılmış yönergeler yaygın hatalardır.

Yapılandırma testi başarılı olduktan sonra, Nginx servisini yeniden başlatarak yeni ayarların etkinleşmesini sağlayın:

sudo systemctl restart nginx

Şimdi web tarayıcınızdan sunucunuzun alan adına veya IP adresine https:// önekiyle erişmeyi deneyin (örneğin: https://example.com veya https://192.168.1.100).

Adım 6: Güvenlik Duvarını Yapılandırma

Eğer sunucunuzda bir güvenlik duvarı (örneğin UFW) etkinse, HTTPS trafiği için 443 numaralı portun açık olduğundan emin olmanız gerekir. Ubuntu 16.04’te UFW (Uncomplicated Firewall) genellikle varsayılan olarak gelir ve Nginx kurulumu sırasında bazı kurallar ekleyebilir.

Mevcut UFW durumunu kontrol etmek için:

sudo ufw status

Eğer 443 portu açık değilse veya Nginx’in HTTPS profili etkin değilse, aşağıdaki komutlarla izin verebilirsiniz:

sudo ufw allow 'Nginx HTTPS'

veya sadece port 443'e izin vermek için

sudo ufw allow 443/tcp

Eğer HTTP’den HTTPS’ye yönlendirme yapıyorsanız ve HTTP trafiğini kabul etmek istemiyorsanız, Nginx HTTP profilini devre dışı bırakabilirsiniz:

sudo ufw delete allow 'Nginx HTTP'

Ardından UFW durumunu tekrar kontrol ederek değişikliklerin uygulandığından emin olun.

Tarayıcıda Sertifika Uyarısı ve Yönetimi

Kendi imzalı SSL sertifikası kullandığınızda, web tarayıcınız büyük olasılıkla bir güvenlik uyarısı gösterecektir. Bu, sertifikanın bir Sertifika Yetkilisi (CA) tarafından doğrulanmadığı ve tarayıcının otomatik olarak güvenmediği anlamına gelir. Bu durum beklenen bir davranıştır ve sertifikanızın hatalı olduğu anlamına gelmez.

Neden Uyarı Görünür?

Web tarayıcıları, önceden tanımlanmış ve güvenilir kabul edilen bir dizi kök sertifika yetkilisi (CA) listesiyle birlikte gelir. Bir web sitesine HTTPS üzerinden bağlanıldığında, tarayıcı sunucunun sunduğu sertifikayı bu güvenilir CA listesindeki bir otorite tarafından imzalanıp imzalanmadığını kontrol eder. Eğer sertifika, güvenilir bir CA tarafından imzalanmamışsa (ki kendi imzalı sertifikalar bu kategoriye girer), tarayıcı kullanıcının bağlantısının güvenli olmadığını veya bir risk taşıdığını belirten bir uyarı gösterir. Bu uyarı, ortadaki adam (Man-in-the-Middle) saldırılarına karşı kullanıcıyı koruma amacı taşır.

Sertifikayı Güvenilir Olarak Ekleme

Geliştirme veya dahili ağ ortamlarında çalışırken, bu uyarıyı atlayabilir ve sertifikayı tarayıcınızda veya işletim sisteminizde manuel olarak güvenilir olarak işaretleyebilirsiniz. Bu, tarayıcınızın gelecekte bu sertifikaya sahip sitelere eriştiğinde uyarı göstermesini engeller.

Chrome (veya Chromium tabanlı tarayıcılar) için genel adımlar:
1. Uyarı sayfasında “Gelişmiş” veya “Devam et” seçeneğini tıklayın.
2. “example.com adresine güvenli olmayan bir şekilde devam et” (veya benzeri) seçeneğini seçerek siteye erişin.
3. Sertifikayı indirmek ve işletim sisteminize eklemek için tarayıcınızın sertifika yönetimi ayarlarına gidin. Genellikle adres çubuğundaki kilit simgesine tıklayıp “Sertifika” veya “Bağlantı ayarları” seçeneğinden sertifikayı dışa aktarabilirsiniz.
4. İndirdiğiniz .crt dosyasını işletim sisteminizin güvenilen kök sertifika depolarına ekleyin. Bu işlem işletim sistemine göre değişir:
* Windows: .crt dosyasına çift tıklayın, “Sertifikayı Yükle” sihirbazını takip edin ve “Güvenilen Kök Sertifika Yetkilileri” deposuna yerleştirin.
* macOS: .crt dosyasına çift tıklayın, Anahtar Zinciri Erişimi uygulamasında sertifikayı bulun, çift tıklayın, “Güven” bölümünü genişletin ve “Bu sertifikayı kullanırken” seçeneğini “Her zaman güven” olarak ayarlayın.
* Linux (Ubuntu/Debian tabanlı sistemler):

sudo cp /etc/nginx/ssl/nginx.crt /usr/local/share/ca-certificates/
        sudo update-ca-certificates

Bu komutlar, sertifikanızı sistem genelinde güvenilir hale getirecektir. Tarayıcınızın bu değişiklikleri görmesi için yeniden başlatmanız gerekebilir.

Bu adımlar, kendi imzalı sertifikanızın sadece sizin tarafınızdan veya dahili ağınızdaki kullanıcılar tarafından güvenilir olarak kabul edilmesini sağlar. Harici kullanıcılar için bu manuel adımları uygulamak pratik değildir, bu yüzden üretim ortamlarında CA tarafından imzalanmış sertifikalar tercih edilmelidir.

Kendi İmzalı Sertifikaların Kullanım Alanları ve Sınırlamaları

Kendi imzalı sertifikalar, belirli senaryolarda oldukça kullanışlı olsa da, üretim ortamlarında dikkatli kullanılması gereken önemli sınırlamalara sahiptir.

Kullanım Alanları

* Geliştirme Ortamları: Web uygulamaları geliştirirken, uygulamanın HTTPS üzerinden nasıl davrandığını test etmek için hızlı ve ücretsiz bir yöntem sunar. Geliştiriciler, SSL/TLS yapılandırmalarını, güvenlik başlıklarını ve HTTP’den HTTPS’ye yönlendirmeleri kendi imzalı sertifikalarla kolayca deneyebilirler.
* Dahili Ağlar ve Intranet Uygulamaları: Şirket içi ağlarda veya sadece belirli bir grup kullanıcı tarafından erişilen uygulamalarda, sertifika güvenini manuel olarak ekleyebileceğiniz veya tüm istemcilerin merkezi olarak yönetildiği durumlarda kendi imzalı sertifikalar kullanılabilir. Bu tür ortamlarda, harici bir CA’ya ihtiyaç duyulmaz ve maliyetten tasarruf edilir.
* API Testleri: Geliştirilen API’lerin HTTPS üzerinden güvenli bir şekilde iletişim kurup kurmadığını test etmek için kullanılabilir. Postman, Insomnia gibi araçlar genellikle kendi imzalı sertifikaları kabul etme veya manuel olarak ekleme seçeneği sunar.
* IoT Cihazları ve Gömülü Sistemler: Kısıtlı kaynaklara sahip veya kapalı ekosistemlerde çalışan IoT cihazları ve gömülü sistemler, kimlik doğrulama ve veri şifreleme için kendi imzalı sertifikaları kullanabilirler. Bu senaryolarda, cihazlar genellikle birbirlerine veya belirli bir merkeze güvenirler ve harici bir CA’ya bağımlılık istenmez.
* Eğitim ve Öğrenme: SSL/TLS’nin nasıl çalıştığını, sertifika oluşturma süreçlerini ve web sunucusu yapılandırmalarını öğrenmek için pratik bir araçtır.

Sınırlamalar

* Tarayıcı Uyarıları: En büyük sınırlama, tarayıcıların kendi imzalı sertifikalara otomatik olarak güvenmemesi ve güvenlik uyarıları göstermesidir. Bu, genel kullanıma açık web siteleri için kabul edilemezdir çünkü kullanıcı güvenini zedeler ve profesyonel olmayan bir izlenim bırakır.
* Kullanıcı Deneyimi: Her yeni kullanıcı veya yeni bir cihazla siteye erişildiğinde manuel olarak sertifikayı güvenilir olarak eklemek veya uyarıyı atlamak zorunda kalmak, kötü bir kullanıcı deneyimine yol açar.
* Güvenilirlik Eksikliği: Kendi imzalı sertifikalar, bir üçüncü taraf CA tarafından doğrulanmadığı için, web sitesinin kimliği hakkında herhangi bir güvence sağlamaz. Bu, ortadaki adam saldırılarına (Man-in-the-Middle attacks) karşı savunmasız kalma riski taşır, çünkü kötü niyetli bir aktör de kendi imzalı bir sertifika oluşturup kendini sizin siteniz gibi gösterebilir.
* Sınırlı Tarayıcı/İşletim Sistemi Desteği: Bazı eski tarayıcılar veya işletim sistemleri, kendi imzalı sertifikaları yönetmekte veya kabul etmekte zorlanabilir.
* Sertifika Yönetimi Zorluğu: Eğer çok sayıda kendi imzalı sertifikayı farklı sunucularda kullanıyorsanız, bunların geçerlilik sürelerini takip etmek ve yenilemek zamanla karmaşık hale gelebilir. CA’lar genellikle bu süreçleri otomatikleştirir.
* HTTP/2 ve Diğer Modern Özellikler: Modern web teknolojileri, HTTPS’i bir temel gereklilik olarak görür. Kendi imzalı sertifikalarla HTTP/2 gibi özellikler teknik olarak çalışsa da, tarayıcı uyarıları nedeniyle bu özelliklerin tam faydasını göremeyebilirsiniz.

Özetle, kendi imzalı sertifikalar geliştirme, test ve kapalı dahili ağlar gibi kontrollü ortamlarda değerli araçlardır. Ancak, halka açık ve üretim ortamlarında, kullanıcı güvenini ve güvenliği sağlamak için mutlaka ticari veya ücretsiz (örn. Let’s Encrypt) bir Sertifika Yetkilisi tarafından imzalanmış sertifikalar kullanılmalıdır.

Alternatifler: Let’s Encrypt

Eğer bir üretim ortamı için gerçek bir SSL sertifikasına ihtiyacınız varsa ve maliyet endişeleriniz varsa, Let’s Encrypt mükemmel bir çözümdür. Let’s Encrypt, ücretsiz, otomatik ve açık bir Sertifika Yetkilisidir (CA). Certbot gibi araçlar sayesinde, bir alan adı için SSL sertifikalarını kolayca alabilir, yükleyebilir ve otomatik olarak yenileyebilirsiniz.

Ubuntu 16.04’te Nginx için Let’s Encrypt sertifikası almak için aşağıdaki adımları izleyebilirsiniz:
1. Certbot Kurulumu:

sudo apt update
    sudo apt install software-properties-common
    sudo add-apt-repository ppa:certbot/certbot
    sudo apt update
    sudo apt install python-certbot-nginx

2. Sertifika Alma:

sudo certbot --nginx -d example.com -d www.example.com

Bu komut, Certbot’un Nginx yapılandırmanızı otomatik olarak analiz etmesini, sertifikaları almasını ve Nginx’i HTTPS kullanacak şekilde yapılandırmasını sağlar. Sizden bir e-posta adresi isteyecek ve hizmet şartlarını kabul etmenizi isteyecektir.
3. Otomatik Yenileme Testi:

sudo certbot renew --dry-run

Bu komut, otomatik yenileme sürecinin sorunsuz çalıştığını doğrular. Certbot, sertifikaları otomatik olarak yenilemek için bir cron işi veya systemd zamanlayıcısı kurar.

Let’s Encrypt, kendi imzalı sertifikaların dezavantajlarını ortadan kaldırarak, halka açık web siteleri için güvenli ve ücretsiz bir HTTPS çözümü sunar.

Sonuç

Bu makalede, Ubuntu 16.04 işletim sistemi üzerinde Nginx web sunucusu için kendi imzalı bir SSL sertifikasının nasıl oluşturulacağını ve yapılandırılacağını ayrıntılı bir şekilde inceledik. Süreç, OpenSSL aracını kullanarak bir özel anahtar ve sertifika oluşturmaktan, Nginx yapılandırma dosyasını bu sertifikayı kullanacak şekilde düzenlemeye ve son olarak güvenlik duvarı ayarlarını yapmaya kadar tüm adımları kapsadı. Kendi imzalı sertifikaların neden kullanıldığı, hangi durumlarda avantajlı olduğu ve tarayıcı uyarılarının nasıl yönetileceği gibi konulara da değindik.

Kendi imzalı sertifikalar, geliştirme ortamları, test sunucuları veya dahili ağ uygulamaları gibi kontrollü ve kapalı ortamlarda SSL/TLS işlevselliğini hızlı ve maliyetsiz bir şekilde sağlamak için değerli bir araçtır. Bu sertifikalar, HTTPS’in temel prensiplerini anlamak ve web sunucusu yapılandırmalarını öğrenmek için de harika bir başlangıç noktası sunar. Ancak, genel kullanıma açık üretim ortamlarında, tarayıcıların otomatik olarak güvendiği ve kullanıcı güvenini artıran Let’s Encrypt gibi ücretsiz veya ticari bir Sertifika Yetkilisi tarafından imzalanmış sertifikalar tercih edilmelidir. Kendi imzalı sertifikaların tarayıcı uyarıları ve güvenilirlik eksikliği gibi önemli sınırlamaları bulunmaktadır.

Bu rehberi takip ederek, Ubuntu 16.04 sunucunuzda Nginx için başarılı bir şekilde kendi imzalı SSL sertifikası kurmuş ve temel HTTPS yapılandırmasını anlamış olmalısınız. Web güvenliği yolculuğunuzda bir sonraki adım, eğer bir üretim ortamı söz konusu ise, Let’s Encrypt gibi bir çözümle gerçek bir SSL sertifikasına geçiş yapmak olacaktır. Güvenli web uygulamaları geliştirmek ve sunmak, modern internetin temel taşıdır ve bu adımlar, bu amaca ulaşmanız için sağlam bir temel oluşturmaktadır.

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Gönder

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.
Exit mobile version