Apache Sunucusu İçin Ubuntu 20.04’te Kendinden İmzalı SSL Sertifikası Oluşturma
Günümüzde internet üzerinde güvenli iletişim, kullanıcıların hassas bilgilerini korumak ve web sitelerinin güvenilirliğini artırmak için kritik öneme sahiptir. SSL/TLS sertifikaları, bu güvenli iletişimin temelini oluşturur. SSL sertifikaları, web sunucunuz ile ziyaretçilerinizin tarayıcıları arasındaki veri akışını şifreleyerek yetkisiz erişimi engeller. Genellikle, bu sertifikalar güvenilir Sertifika Otoriteleri (CA) tarafından verilir. Ancak, geliştirme ortamlarında, test sunucularında veya belirli iç ağ uygulamalarında, tam teşekküllü bir CA sertifikası almak gereksiz veya maliyetli olabilir. Bu gibi durumlarda, kendinden imzalı (self-signed) bir SSL sertifikası oluşturmak pratik ve hızlı bir çözüm sunar.
Bu makalede, Ubuntu 20.04 üzerinde çalışan Apache web sunucusu için nasıl kendinden imzalı bir SSL sertifikası oluşturulacağını adım adım inceleyeceğiz. Bu süreç, sertifika oluşturma, Apache yapılandırmasını ayarlama ve tarayıcı uyarılarını anlama gibi temel bilgileri kapsayacaktır.
Neden Kendinden İmzalı SSL Sertifikası Kullanılır?
Kendinden imzalı sertifikalar, genellikle aşağıdaki senaryolarda tercih edilir:
* Geliştirme Ortamları: Web siteleri veya uygulamalar geliştirilirken, yerel sunucularda veya test ortamlarında güvenli bağlantı sağlamak için kullanılır. Bu, gerçek bir CA sertifikası maliyetinden ve karmaşıklığından kaçınmayı sağlar.
* İç Ağ Uygulamaları: Sadece şirket içi ağda erişilebilen uygulamalar veya hizmetler için güvenlik katmanı eklemek amacıyla kullanılabilir.
* Test ve Prototipleme: Yeni web teknolojilerini veya yapılandırmalarını test ederken hızlı bir şekilde SSL/TLS etkinleştirmek için idealdir.
* Eğitim Amaçlı: SSL/TLS ve sunucu güvenliği konularını öğrenmek isteyenler için pratik bir araçtır.
Ancak, kendinden imzalı sertifikaların önemli bir dezavantajı vardır: Güvenilmezdirler. Tarayıcılar ve işletim sistemleri, kendinden imzalı sertifikaları otomatik olarak güvenilir kabul etmez. Bu nedenle, bu sertifikaları kullanan bir web sitesini ziyaret eden kullanıcılar, genellikle bir güvenlik uyarısı ile karşılaşırlar. Bu uyarı, sertifikanın bir üçüncü taraf tarafından doğrulanmadığını ve potansiyel olarak güvenli olmadığını belirtir. Bu nedenle, halka açık ve geniş kitlelere hitap eden üretim ortamlarında kendinden imzalı sertifikalar kesinlikle kullanılmamalıdır.
Gereksinimler
Bu rehberi takip etmek için aşağıdaki gereksinimlere sahip olmanız gerekmektedir:
* Ubuntu 20.04 LTS kurulu ve çalışan bir sunucu.
* Apache2 web sunucusunun kurulu ve çalışır durumda olması.
* Sunucuya SSH erişimi veya doğrudan komut satırı erişimi.
* sudo ayrıcalıklarına sahip bir kullanıcı.
Adım 1: Gerekli Modülleri Kontrol Etme ve Etkinleştirme
Apache’nin SSL/TLS desteğini kullanabilmesi için bazı modüllerin etkinleştirilmiş olması gerekir. Özellikle mod_ssl modülü gereklidir. Ubuntu 20.04’te bu modül genellikle varsayılan olarak kuruludur, ancak kontrol etmek ve gerekirse etkinleştirmek iyi bir pratiktir.
Öncelikle, mod_ssl modülünün etkin olup olmadığını kontrol edelim:
sudo a2query -m ssl
Eğer çıktı ssl ise, modül etkindir. Eğer modül etkin değilse, aşağıdaki komutla etkinleştirebilirsiniz:
sudo a2enmod ssl
Bu komutu çalıştırdıktan sonra Apache’yi yeniden başlatmanız gerekecektir:
sudo systemctl restart apache2
Ayrıca, sanal host yapılandırmaları için mod_socache_shmcb modülünün de etkin olması genellikle tavsiye edilir. Bu modül, SSL oturumlarının önbelleğe alınmasını sağlayarak performansı artırır.
sudo a2enmod socache_shmcb
sudo systemctl restart apache2
Adım 2: Kendinden İmzalı SSL Sertifikası ve Özel Anahtar Oluşturma
Kendinden imzalı SSL sertifikası ve özel anahtar oluşturmak için openssl komut satırı aracını kullanacağız. Bu işlem, sertifika için gerekli bilgileri (alan adı, organizasyon adı vb.) girmenizi gerektirecektir.
Öncelikle, sertifika ve anahtar dosyalarınızın saklanacağı bir dizin oluşturmak iyi bir pratiktir. Genellikle bu tür dosyalar /etc/ssl/private/ veya /etc/apache2/ssl/ gibi dizinlerde saklanır. Biz, Apache’nin varsayılan SSL yapılandırmasına daha uygun olacağını düşündüğümüz /etc/apache2/ssl/ dizinini kullanacağız.
sudo mkdir -p /etc/apache2/ssl/
cd /etc/apache2/ssl/
Şimdi, sertifika ve özel anahtarı oluşturacak openssl komutunu çalıştıralım. Bu komut, hem özel anahtarı hem de sertifikayı tek bir adımda oluşturacaktır.
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout apache-selfsigned.key -out apache-selfsigned.crt
Bu komut çalıştırıldığında, sizden bazı bilgiler istenecektir. Bu bilgiler, sertifikanın içeriğini oluşturur. İşte istenen bilgiler ve ne anlama geldikleri:
* Country Name (2 letter code): Ülke kodu (örn: TR).
* State or Province Name (full name): Eyalet veya il adı (örn: Istanbul).
* Locality Name (eg, city): Şehir adı (örn: Istanbul).
* Organization Name (eg, company): Organizasyon veya şirket adı (örn: Benim Şirketim).
* Organizational Unit Name (eg, section): Departman veya birim adı (örn: IT Departmanı).
* Common Name (e.g. server FQDN or YOUR name): Bu en kritik alandır. Web sitenizin tam nitelikli alan adını (FQDN) veya sunucunuzun IP adresini buraya girmelisiniz. Örneğin, www.ornekalanadi.com veya 192.168.1.100. Eğer bu alana sunucu adını girerseniz, tarayıcılar bu alan adıyla eşleşmediği sürece uyarı verecektir. Test sunucuları için genellikle IP adresi kullanılır.
* Email Address: İletişim e-posta adresi (isteğe bağlı).
Bu bilgileri girdikten sonra, apache-selfsigned.key adında özel anahtarınız ve apache-selfsigned.crt adında sertifika dosyanız /etc/apache2/ssl/ dizininde oluşturulacaktır.
Önemli Not: openssl req -x509 komutu, sertifikayı doğrudan kendisi imzalar. -nodes seçeneği, özel anahtarın şifrelenmeyeceği anlamına gelir, bu da sunucu yeniden başlatıldığında şifre girme ihtiyacını ortadan kaldırır. -days 365 sertifikanın 365 gün geçerli olacağını belirtir. İhtiyacınıza göre bu süreyi değiştirebilirsiniz. -newkey rsa:2048 ise 2048 bit uzunluğunda bir RSA özel anahtarı oluşturur.
Oluşturulan dosyaların doğru dizinde ve doğru izinlerle olduğundan emin olun. Özel anahtar dosyası, yalnızca root tarafından okunabilir olmalıdır.
sudo chmod 600 /etc/apache2/ssl/apache-selfsigned.key
### Adım 3: Apache SSL Sanal Host Yapılandırmasını Oluşturma
Apache’nin SSL’i kullanabilmesi için bir SSL sanal host yapılandırması oluşturmamız gerekiyor. Genellikle bu, /etc/apache2/sites-available/ dizininde yeni bir yapılandırma dosyası oluşturularak yapılır. Mevcut varsayılan SSL yapılandırmasını kopyalayarak başlayabiliriz.
sudo cp /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-available/ornekalanadi-ssl.conf
Şimdi, yeni oluşturduğumuz ornekalanadi-ssl.conf dosyasını düzenleyelim. Bu dosya, sanal host’un nasıl çalışacağını belirleyen direktifleri içerir.
sudo nano /etc/apache2/sites-available/ornekalanadi-ssl.conf
Dosya içeriğinde aşağıdaki değişiklikleri yapmanız gerekmektedir:
1. ServerAdmin: E-posta adresinizi güncelleyin.
2. ServerName: Web sitenizin alan adını veya IP adresini buraya girin. Bu, sertifika oluştururken Common Name alanına girdiğiniz değerle eşleşmelidir.
3. SSLEngine on: Bu direktifin etkin olduğundan emin olun.
4. SSLCertificateFile: Oluşturduğumuz sertifika dosyasının yolunu belirtin.
5. SSLCertificateKeyFile: Oluşturduğumuz özel anahtar dosyasının yolunu belirtin.
Dosyanın ilgili bölümleri aşağıdaki gibi görünmelidir (kendi alan adınıza ve yollara göre ayarlayın):
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin webmaster@localhost
ServerName www.ornekalanadi.com # Kendi alan adınızı veya IP adresinizi girin
DocumentRoot /var/www/html # Web sitenizin kök dizini
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/apache-selfsigned.crt
SSLCertificateKeyFile /etc/apache2/ssl/apache-selfsigned.key
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/share/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
</VirtualHost>
</IfModule>
Değişiklikleri kaydettikten sonra dosyadan çıkın.
### Adım 4: Sanal Host Yapılandırmasını Etkinleştirme ve Apache’yi Yeniden Başlatma
Yeni SSL sanal host yapılandırmamızı etkinleştirmemiz gerekiyor.
sudo a2ensite ornekalanadi-ssl.conf
Bu komut, /etc/apache2/sites-available/ornekalanadi-ssl.conf dosyasını /etc/apache2/sites-enabled/ dizinine sembolik bir bağlantı oluşturarak etkinleştirir.
Apache yapılandırmasında herhangi bir hata olup olmadığını kontrol etmek için aşağıdaki komutu çalıştırabilirsiniz:
sudo apache2ctl configtest
Eğer çıktı Syntax OK ise, yapılandırma doğrudur. Aksi takdirde, hata mesajlarını dikkatlice inceleyerek ornekalanadi-ssl.conf dosyasındaki yanlışları düzeltin.
Son olarak, Apache’yi yeniden başlatarak değişikliklerin uygulanmasını sağlayın:
sudo systemctl restart apache2
### Adım 5: HTTP’den HTTPS’e Yönlendirme (İsteğe Bağlı)
Genellikle, kullanıcılarınızı otomatik olarak güvenli HTTPS bağlantısına yönlendirmek istersiniz. Bunu yapmak için, varsayılan HTTP sanal host yapılandırmasını düzenleyebilir ve tüm istekleri HTTPS’e yönlendiren bir kural ekleyebilirsiniz.
Varsayılan HTTP yapılandırma dosyasını açalım:
sudo nano /etc/apache2/sites-available/000-default.conf
Dosyanın içine, VirtualHost *:80 bloğunun içine aşağıdaki satırları ekleyin:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
# HTTP'den HTTPS'e yönlendirme
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Bu yapılandırma, gelen tüm HTTP isteklerini yakalar (RewriteEngine On). Eğer bağlantı güvenli değilse (RewriteCond %{HTTPS} off), tüm istekleri aynı URL’ye ancak HTTPS protokolü ile yeniden yönlendirir (RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]). [L,R=301] bayrakları, bu kuralın son kural olduğunu ve kalıcı bir yönlendirme (301 Moved Permanently) olduğunu belirtir.
Değişiklikleri kaydedin ve Apache’yi tekrar başlatın:
sudo systemctl restart apache2
### Adım 6: Tarayıcıda Test Etme ve Güvenlik Uyarıları
Şimdi, web tarayıcınızda sunucunuzun alan adını veya IP adresini kullanarak HTTPS üzerinden erişmeyi deneyin (örn: https://www.ornekalanadi.com veya https://192.168.1.100).
Muhtemelen bir güvenlik uyarısı ile karşılaşacaksınız. Bu uyarı, tarayıcının sertifikayı güvendiği bir Sertifika Otoritesi (CA) tarafından verilmediğini belirtir. Bu, kendinden imzalı sertifikaların doğasında vardır.
Tarayıcınızda bu uyarıyı geçici olarak kabul edip devam etmenin yolları genellikle şunlardır:
* Chrome: “Advanced” (Gelişmiş) veya “Details” (Detaylar) gibi bir seçeneğe tıklayın ve ardından “Proceed to [alan adınız] (unsafe)” (Devam et [alan adınız] (güvenli değil)) gibi bir seçeneği seçin.
* Firefox: “Advanced” (Gelişmiş) butonuna tıklayın, “Accept the Risk and Continue” (Riski Kabul Et ve Devam Et) seçeneğini seçin.
* Diğer Tarayıcılar: Benzer şekilde, güvenlik uyarılarını geçersiz kılma seçenekleri bulunur.
Bu uyarıyı kalıcı olarak kaldırmak için, sertifikayı tarayıcınıza veya işletim sisteminize güvenilir kök sertifikalar listesine eklemeniz gerekir. Ancak bu, her kullanıcı için manuel olarak yapılması gereken bir işlemdir ve bu nedenle üretim ortamlarında pratik değildir.
### Sonuç
Bu makalede, Ubuntu 20.04 üzerinde Apache web sunucusu için kendinden imzalı bir SSL sertifikası oluşturmayı ve yapılandırmayı öğrendiniz. Bu yöntem, geliştirme, test veya iç ağ uygulamaları için hızlı ve maliyetsiz bir SSL/TLS çözümü sunar. Ancak, halka açık web siteleri için her zaman güvenilir bir Sertifika Otoritesi’nden (CA) alınan bir sertifika kullanmanız gerektiğini unutmayın. Kendinden imzalı sertifikaların güvenlik uyarıları, ziyaretçilerinizde güven kaybına neden olabilir.
SSL/TLS güvenliği, günümüz web dünyasında vazgeçilmezdir. Kendinden imzalı sertifikalar bu yolculukta bir başlangıç noktası olsa da, gerçek dünya uygulamaları için Let’s Encrypt gibi ücretsiz ve otomatik sertifika sağlayıcılarını veya ticari CA’ları tercih etmek en doğru yaklaşımdır.