Takip et

Nginx Üzerinde Kendinden İmzalı (Self-Signed) SSL Sertifikası Oluşturma Rehberi (Debian 8)

Nginx Üzerinde Kendinden İmzalı (Self-Signed) SSL Sertifikası Oluşturma Rehberi (Debian 8) Günümüzde internet güvenliği her zamankinden d

Nginx Üzerinde Kendinden İmzalı (Self-Signed) SSL Sertifikası Oluşturma Rehberi (Debian 8)

Günümüzde internet güvenliği her zamankinden daha önemli hale gelmiştir. Web sitelerinin HTTPS protokolü üzerinden güvenli bir bağlantı sunması, hem kullanıcı verilerinin korunması hem de arama motoru sıralamaları açısından kritik bir faktördür. Genellikle bu, bir sertifika yetkilisinden (CA) alınan ücretli veya ücretsiz (Let’s Encrypt gibi) bir SSL/TLS sertifikası ile sağlanır. Ancak geliştirme ortamları, dahili uygulamalar veya kişisel projeler gibi belirli senaryolarda, kendinden imzalı (self-signed) bir SSL sertifikası kullanmak pratik ve maliyetsiz bir çözüm sunar.

Bu rehberde, Debian 8 işletim sistemi üzerinde çalışan Nginx web sunucunuz için nasıl kendinden imzalı bir SSL sertifikası oluşturacağınızı ve yapılandıracağınızı adım adım öğreneceksiniz. Kendinden imzalı sertifikalar, tarayıcınız tarafından “güvenilir” olarak kabul edilmez ve bir uyarı mesajı görüntülenmesine neden olur, ancak bağlantıyı şifreleyerek veri bütünlüğünü ve gizliliğini sağlar. Bu, özellikle hassas verilerin internet üzerinden test edildiği veya dahili ağlarda kullanıldığı durumlar için idealdir.

Ön Hazırlıklar ve Gerekli Araçlar

Kendinden imzalı bir SSL sertifikası oluşturmaya başlamadan önce, sisteminizin güncel olduğundan ve gerekli paketlerin kurulu olduğundan emin olmalıyız. Bu adımlar, sorunsuz bir kurulum süreci için temel teşkil eder.

Sistemi Güncelleme

İlk olarak, Debian 8 sisteminizin paket listesini güncelleyelim ve mevcut paketleri yükseltelim. Bu, olası bağımlılık sorunlarını önlemeye yardımcı olacaktır:

sudo apt-get update
sudo apt-get upgrade -y

Nginx ve OpenSSL Kurulumu

Eğer sisteminizde Nginx web sunucusu kurulu değilse, aşağıdaki komutla kurabilirsiniz:

sudo apt-get install nginx -y

SSL sertifikaları oluşturmak ve yönetmek için openssl aracı gereklidir. Çoğu Debian sisteminde varsayılan olarak yüklü olsa da, kurulu olup olmadığını kontrol etmek ve gerekirse kurmak iyi bir uygulamadır:

sudo apt-get install openssl -y

Bu adımları tamamladıktan sonra, artık kendinden imzalı SSL sertifikanızı oluşturmaya hazırsınız.

Kendinden İmzalı SSL Sertifikası Oluşturma

Kendinden imzalı bir SSL sertifikası oluşturma süreci, openssl komut satırı aracını kullanmayı içerir. Bu adımda hem özel anahtarı (private key) hem de sertifika imzalama isteğini (CSR) oluşturacak, ardından bu CSR’ı kullanarak sertifikayı imzalayacağız.

Sertifika Dosyalarını Saklama Dizini Oluşturma

Öncelikle, oluşturacağımız sertifika ve anahtar dosyalarını güvenli ve düzenli bir şekilde saklamak için bir dizin oluşturalım. /etc/nginx/ssl veya /etc/ssl/nginx gibi bir dizin genellikle bu amaç için kullanılır. Biz /etc/nginx/ssl dizinini kullanacağız:

sudo mkdir /etc/nginx/ssl

Bu dizinin Nginx tarafından okunabilir olduğundan emin olun. Varsayılan izinler genellikle yeterlidir.

Özel Anahtar ve Sertifika Oluşturma

Şimdi openssl komutunu kullanarak özel anahtarımızı ve sertifikamızı tek bir adımda oluşturalım. Bu komut, hem özel anahtarı oluşturacak hem de bir sertifika imzalama isteği (CSR) oluşturarak bunu kendisi imzalayacaktır.

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

Bu komutu adım adım inceleyelim:

* sudo openssl req: Bir sertifika imzalama isteği (CSR) oluşturmak için openssl aracını kullanır. -x509 bayrağı ile bu isteği kendimiz imzalayarak bir X.509 sertifikası oluşturacağımızı belirtiriz.
* -nodes: “no DES” anlamına gelir. Bu, özel anahtarın şifrelenmeyeceği anlamına gelir. Geliştirme ortamlarında bu genellikle tercih edilir, çünkü her Nginx yeniden başlatılışında bir parola girmenize gerek kalmaz. Ancak üretim ortamlarında özel anahtarın bir parola ile şifrelenmesi daha güvenlidir.
* -days 365: Sertifikanın geçerlilik süresini gün cinsinden belirtir. Burada 365 gün (1 yıl) olarak ayarlanmıştır. Bu süreyi ihtiyacınıza göre değiştirebilirsiniz.
* -newkey rsa:2048: Yeni bir özel anahtar oluşturulmasını sağlar. rsa:2048 anahtarın RSA algoritması ve 2048 bit uzunluğunda olacağını belirtir. 2048 bit, günümüz standartlarına göre güvenli kabul edilen bir anahtar uzunluğudur.
* -keyout /etc/nginx/ssl/nginx.key: Oluşturulacak özel anahtar dosyasının yolunu belirtir.
* -out /etc/nginx/ssl/nginx.crt: Oluşturulacak sertifika dosyasının yolunu belirtir.

Komutu çalıştırdıktan sonra, sizden bazı bilgiler istenecektir. Bu bilgiler sertifikanıza gömülecektir:

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 Department
Common Name (e.g. server FQDN or YOUR name) []:example.com  # BURASI ÇOK ÖNEMLİ!
Email Address []:admin@example.com

Common Name (Ortak Ad) alanı özellikle önemlidir. Buraya web sitenizin alan adını (örneğin example.com veya www.example.com) veya sunucunuzun IP adresini girmelisiniz. Tarayıcılar, sertifikadaki “Common Name” ile erişmeye çalıştığınız alan adını veya IP adresini karşılaştırır. Eğer eşleşmezse, kendinden imzalı olsa bile daha şiddetli bir uyarı alırsınız. Eğer bir IP adresi üzerinden erişim sağlayacaksanız, buraya IP adresini girmeniz gerekir (örn. 192.168.1.100).

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

Dosya İzinlerini Ayarlama

Özel anahtarınızın güvenliği kritik öneme sahiptir. Bu nedenle, nginx.key dosyasının yalnızca root kullanıcısı tarafından okunabilir olduğundan emin olmak için izinlerini ayarlayalım:

sudo chmod 600 /etc/nginx/ssl/nginx.key

Bu komut, dosyanın yalnızca sahibi (root) tarafından okunabilir ve yazılabilir olmasını sağlar. Sertifika dosyası (nginx.crt) ise daha geniş bir okuma iznine sahip olabilir, çünkü genel bilgiler içerir ve Nginx’in onu okuyabilmesi gerekir.

Nginx’i SSL Kullanacak Şekilde Yapılandırma

Sertifika dosyalarımız hazır olduğuna göre, Nginx web sunucumuzu bu sertifikaları kullanarak güvenli (HTTPS) bağlantıları kabul edecek şekilde yapılandırabiliriz.

Nginx Yapılandırma Dosyasını Düzenleme

Nginx’in varsayılan yapılandırma dosyası genellikle /etc/nginx/sites-available/default konumundadır. Bu dosyayı düzenleyebilir veya yeni bir site yapılandırma dosyası oluşturabilirsiniz (örneğin /etc/nginx/sites-available/default-ssl). Biz varsayılan dosyayı düzenleyerek ilerleyeceğiz.

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

Dosyayı açtıktan sonra, mevcut server bloğunuzu bulmanız veya yeni bir server bloğu eklemeniz gerekecektir. Aşağıdaki örneği kendi yapılandırmanıza ekleyebilir veya mevcut HTTP bloğunuzu HTTPS’ye yönlendirecek şekilde düzenleyebilirsiniz.

server {
    listen 80;
    listen [::]:80;
    server_name example.com www.example.com; # Kendi alan adınızı veya IP adresinizi yazın

    # HTTP isteklerini HTTPS'ye yönlendirme (isteğe bağlı ama önerilir)
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2; # HTTPS ve HTTP/2 için dinle
    listen [::]:443 ssl http2;
    server_name example.com www.example.com; # Kendi alan adınızı veya IP adresinizi yazın

    ssl_certificate /etc/nginx/ssl/nginx.crt; # Sertifika dosyanızın yolu
    ssl_certificate_key /etc/nginx/ssl/nginx.key; # Özel anahtar dosyanızın yolu

    # SSL Ayarları (güvenlik için önerilir)
    ssl_protocols TLSv1.2 TLSv1.3; # Yalnızca güvenli TLS versiyonlarını kullan
    ssl_ciphers 'TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-GCM-SHA256';
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 8.8.8.8 8.8.4.4 valid=300s; # DNS çözümleyici
    resolver_timeout 5s;
    add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"; # HSTS
    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;

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

    # Diğer Nginx ayarları buraya gelebilir (loglar, hata sayfaları vb.)
}

Önemli Notlar:

* server_name: Buraya, sertifika oluştururken Common Name olarak girdiğiniz alan adını veya IP adresini yazın.
* ssl_certificate ve ssl_certificate_key: Bu yolların, sertifika ve özel anahtar dosyalarınızı kaydettiğiniz dizini ve dosya adlarını doğru bir şekilde işaret ettiğinden emin olun.
* ssl_protocols ve ssl_ciphers: Bu ayarlar, daha modern ve güvenli TLS protokollerini ve şifreleme paketlerini kullanmanızı sağlar. Debian 8’deki Nginx sürümünüz bu ayarları desteklemeyebilir veya farklı bir yapılandırma gerektirebilir. Eğer Nginx servisini başlatırken hata alırsanız, bu satırları geçici olarak yorum satırı yapıp daha temel bir yapılandırma ile başlayabilirsiniz. Ancak güvenlik için bu ayarları kullanmak her zaman önerilir.
* http2: HTTP/2, daha hızlı ve verimli bir web deneyimi sunar. Nginx’iniz bu özelliği destekliyorsa kullanmanız önerilir.

Yapılandırma dosyasını kaydettikten sonra (Nano’da Ctrl+O, Enter, Ctrl+X), Nginx yapılandırmanızın sözdizimi açısından doğru olduğundan emin olmak için test etmelisiniz:

sudo nginx -t

Eğer herhangi bir hata mesajı almazsanız ve “syntax is ok” ile “test is successful” gibi çıktılar görürseniz, Nginx’i yeniden yükleyerek yeni yapılandırmayı etkinleştirebilirsiniz:

sudo systemctl reload nginx

Şimdi web tarayıcınızdan https://your_domain_or_ip adresine giderek sitenize güvenli bağlantı üzerinden erişmeyi deneyebilirsiniz.

Tarayıcı Uyarıları ve Çözümler

Kendinden imzalı bir SSL sertifikası kullandığınızda, web tarayıcıları bu sertifikayı otomatik olarak güvenilir bulmayacaktır. Bunun nedeni, sertifikanın bilinen ve güvenilir bir sertifika yetkilisi (CA) tarafından imzalanmamış olmasıdır. Bu durum, tarayıcınızda bir güvenlik uyarısı görmenize neden olacaktır.

Tarayıcı Uyarılarını Anlama

Tarayıcınız, sertifikanın güvenilir olmadığını belirten bir uyarı gösterecektir. Bu uyarı genellikle “Bağlantınız gizli değil”, “Bu site güvenli değil” veya benzeri bir ifadeyle karşınıza çıkar. Bu uyarı, tarayıcının sertifikanın kimliğini doğrulayamadığını ve dolayısıyla bağlantının kim tarafından sağlandığı konusunda şüpheleri olduğunu gösterir.

Örnek Tarayıcı Uyarıları:

* Chrome: “Gizliliğiniz risk altında olabilir” veya “Bağlantınız gizli değil”
* Firefox: “Risk Almaya Hazır mısınız?” veya “Bağlantınız güvenli değil”
* Edge: “Bu site güvenli değil”

Bu uyarılar, bir kendinden imzalı sertifika kullanıldığında beklenen bir durumdur ve genellikle “Gelişmiş” veya “Devam et” seçeneklerini tıklayarak siteye erişmeye devam edebilirsiniz.

Tarayıcınıza Sertifikayı Ekleme (İsteğe Bağlı)

Eğer bu kendinden imzalı sertifikayı sık sık kullanacağınız bir geliştirme ortamı veya dahili bir uygulama için kurduysanız, her seferinde uyarıyı atlamak yerine sertifikayı tarayıcınızın veya işletim sisteminizin güvenilen kök sertifika deposuna ekleyebilirsiniz. Bu işlem, tarayıcının ilgili siteye erişirken uyarı göstermesini engelleyecektir.

Genel Adımlar (Tarayıcıya göre değişir):

1. Sertifikayı İndirme: Tarayıcınızda siteye erişirken çıkan uyarı sayfasında genellikle sertifika detaylarını görüntüleme veya indirme seçeneği bulunur. Veya doğrudan sunucunuzdan /etc/nginx/ssl/nginx.crt dosyasını bilgisayarınıza kopyalayabilirsiniz.
2. Sertifikayı İçe Aktarma:
* Chrome (Windows): Ayarlar > Gizlilik ve güvenlik > Güvenlik > Sertifikaları yönet > Güvenilen Kök Sertifika Yetkilileri > İçe Aktar.
* Firefox: Ayarlar > Gizlilik ve Güvenlik > Sertifikalar > Sertifikaları Görüntüle > Yetkililer > İçe Aktar.
* macOS: Anahtar Zinciri Erişimi uygulamasına sertifikayı sürükleyip bırakarak veya Dosya > Öğeleri İçe Aktar seçeneğini kullanarak.
* Linux (örneğin Debian): Sertifika dosyasını /usr/local/share/ca-certificates/ dizinine kopyalayıp ardından sudo update-ca-certificates komutunu çalıştırarak sistem genelinde güvenilir hale getirebilirsiniz.

Sertifikayı tarayıcınıza veya işletim sisteminize ekledikten sonra, tarayıcınızı yeniden başlatmanız gerekebilir. Bu işlemden sonra, aynı siteye eriştiğinizde artık güvenlik uyarısı almamalısınız. Ancak bu çözüm, yalnızca sizin kendi bilgisayarınızda veya yönettiğiniz cihazlarda işe yarar. Genel kullanıma açık bir web sitesi için bu yöntem uygun değildir.

Sonuç ve Sıkça Sorulan Sorular (SSS)

Bu rehberde, Debian 8 üzerinde Nginx için kendinden imzalı bir SSL sertifikası oluşturma ve yapılandırma sürecini detaylı bir şekilde ele aldık. Kendinden imzalı sertifikalar, geliştirme ve dahili kullanım senaryolarında büyük kolaylık sağlarken, üretim ortamlarında profesyonel bir CA tarafından imzalanmış sertifikaların kullanılması gerektiğini unutmamak önemlidir. Bu sertifikalar, bağlantıyı şifreleyerek veri güvenliğini sağlasa da, sunucunun kimliğini üçüncü bir tarafça doğrulamadıkları için tarayıcılar tarafından güvenilir olarak kabul edilmezler.

Bu adımları takip ederek, kendi güvenli test ortamınızı veya dahili uygulamanızı hızla kurabilir ve HTTPS’nin faydalarından yararlanabilirsiniz.

Sıkça Sorulan Sorular (SSS)

S: Kendinden imzalı sertifika nedir?
C: Kendinden imzalı (self-signed) bir sertifika, bir sertifika yetkilisi (CA) tarafından değil, doğrudan sertifikayı kullanan sunucu veya kişi tarafından imzalanmış bir SSL/TLS sertifikasıdır. Bu, kimlik doğrulama sürecinin üçüncü bir tarafça onaylanmadığı anlamına gelir.

S: Neden kendinden imzalı sertifika kullanmalıyım?
C: Kendinden imzalı sertifikalar genellikle geliştirme ortamları, test sunucuları, dahili ağ uygulamaları veya kişisel projeler için kullanılır. Ücretsizdir, kurulumu hızlıdır ve bağlantıyı şifreleyerek veri gizliliğini sağlar.

S: Kendinden imzalı sertifika güvenli midir?
C: Evet, kendinden imzalı sertifikalar bağlantıyı şifreleyerek verilerinizi dışarıdan gelebilecek dinlemelere karşı korur. Ancak, sertifikayı imzalayanın kimliği üçüncü bir güvenilir tarafça doğrulanmadığı için tarayıcılar tarafından “güvenilir” kabul edilmez ve güvenlik uyarısı verirler. Bu nedenle, genel kullanıma açık siteler için önerilmez.

S: Sertifika süresi dolarsa ne olur?
C: Sertifikanızın süresi dolduğunda (bizim örneğimizde 365 gün sonra), tarayıcılar daha şiddetli bir güvenlik uyarısı gösterecek ve siteye erişiminiz kesilebilir. Bu durumda, yeni bir sertifika oluşturmanız ve Nginx yapılandırmasını güncellemeniz gerekir.

S: Ortak Ad (Common Name) neden önemlidir?
C: Common Name (CN), sertifikanın hangi alan adı veya IP adresi için geçerli olduğunu belirtir. Tarayıcılar, erişmeye çalıştığınız adres ile sertifikadaki CN’yi karşılaştırır. Eşleşmezse, uyarı mesajı alırsınız. Bu nedenle, CN alanına doğru alan adını veya IP adresini girmek kritik öneme sahiptir.

S: Nginx’i HTTP’den HTTPS’ye nasıl yönlendiririm?
C: Rehberdeki Nginx yapılandırma örneğinde gösterildiği gibi, listen 80; bloğuna return 301 https://$host$request_uri; satırını ekleyerek tüm HTTP isteklerini HTTPS’ye kalıcı olarak yönlendirebilirsiniz.

S: Debian 8’den daha yeni sürümler için süreç farklı mı?
C: Temel süreç (openssl komutları ve Nginx yapılandırma mantığı) Debian’ın daha yeni sürümlerinde (Debian 9, 10, 11 gibi) büyük ölçüde aynıdır. Ancak apt-get yerine apt komutu kullanılması, Nginx’in varsayılan yapılandırma dizinlerinde veya bazı SSL/TLS ayarlarında küçük farklılıklar olabilir. Genel prensipler aynı kalı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

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.