Ubuntu 18.04 Üzerinde Apache İçin Kendi İmzalı (Self-Signed) SSL Sertifikası Oluşturma Rehberi
Bu rehber, Ubuntu 18.04 işletim sistemi üzerinde çalışan bir Apache web sunucusu için kendi imzalı (self-signed) bir SSL sertifikasının nasıl oluşturulacağını adım adım açıklamaktadır. Kendi imzalı sertifikalar, özellikle geliştirme ortamları, dahili uygulamalar veya test süreçleri için oldukça kullanışlıdır. Üretim ortamlarında veya halka açık web sitelerinde kullanılmaları önerilmez, zira tarayıcılar tarafından güvenli kabul edilmezler ve ziyaretçilere “güvenli değil” uyarısı gösterirler. Ancak, bir SSL bağlantısının nasıl çalıştığını anlamak, HTTPS trafiğini şifrelemek ve sunucu yapılandırmalarını test etmek için mükemmel bir başlangıç noktasıdır.
Kendi imzalı sertifikalar, bir üçüncü taraf sertifika yetkilisi (CA) tarafından doğrulanmadığı için “güvenilir” olarak kabul edilmezler. Bunun yerine, sertifikayı oluşturan kişi veya kurum tarafından imzalanırlar. Bu durum, sertifikanın gerçekliğini garanti eden bağımsız bir doğrulama katmanının olmaması anlamına gelir. Bu rehberin sonunda, Apache’nizi HTTPS üzerinden güvenli bir şekilde erişilebilir hale getirecek, ancak tarayıcınızda bir güvenlik uyarısı göreceğiniz bir yapılandırmaya sahip olacaksınız. Bu uyarı, sertifikanın geçerli olmadığı anlamına gelmez; sadece tarayıcınızın sertifikayı doğrulamak için bir CA’ya güvenmediği anlamına gelir.
Ön Hazırlıklar
Kendi imzalı SSL sertifikamızı oluşturmaya başlamadan önce, sistemimizin güncel olduğundan ve Apache web sunucusunun kurulu ve çalışır durumda olduğundan emin olmamız gerekiyor. Ayrıca, Apache’nin SSL modülünü de etkinleştirmemiz gerekecektir.
Sistem Güncelleme
İlk adım olarak, sunucunuzdaki paket listesini güncelleyerek ve mevcut paketleri yükselterek sisteminizin güncel olduğundan emin olun. Bu, olası güvenlik açıklarını kapatmaya ve en son yazılım sürümlerini kullanmaya yardımcı olur.
sudo apt update
sudo apt upgrade -y
Bu komutlar, sisteminizdeki tüm yazılım paketlerini güncelleyecektir. -y bayrağı, tüm sorulara otomatik olarak “evet” yanıtı verilmesini sağlar.
Apache Kurulumu
Eğer Apache henüz sunucunuzda kurulu değilse, aşağıdaki komutla kolayca kurabilirsiniz:
sudo apt install apache2 -y
Kurulum tamamlandıktan sonra Apache servisinin çalışıp çalışmadığını kontrol etmek için aşağıdaki komutu kullanabilirsiniz:
sudo systemctl status apache2
Çıktıda active (running) ifadesini görmeniz gerekir. Eğer Apache çalışmıyorsa, sudo systemctl start apache2 komutuyla başlatabilirsiniz.
Güvenlik Duvarı Ayarları (UFW): Eğer UFW (Uncomplicated Firewall) kullanıyorsanız, Apache trafiğine izin vermeniz gerekmektedir. Hem HTTP (80) hem de HTTPS (443) portları için izin vermek iyi bir uygulamadır:
sudo ufw allow 'Apache Full'
sudo ufw reload
Apache Full profili, hem HTTP hem de HTTPS trafiğine izin verir. Eğer sadece HTTPS trafiğine izin vermek isterseniz Apache Secure profilini kullanabilirsiniz.
SSL Modülünü Etkinleştirme
Apache’nin SSL sertifikalarını kullanabilmesi için mod_ssl modülünün etkinleştirilmesi gerekmektedir. Bu modül, Apache’nin SSL/TLS şifrelemesini yönetmesini sağlar.
sudo a2enmod ssl
Bu komut, SSL modülünü etkinleştirir. Ardından, Apache’nin varsayılan SSL sanal host yapılandırmasını da etkinleştirelim. Bu dosya, temel bir SSL yapılandırması içerir ve kendi sertifikamızı buraya entegre etmek için bir başlangıç noktası olacaktır.
sudo a2ensite default-ssl.conf
Değişikliklerin etkili olması için Apache servisini yeniden başlatmadan önce, yapılandırmada herhangi bir hata olup olmadığını kontrol etmek iyi bir alışkanlıktır:
sudo apache2ctl configtest
Eğer Syntax OK çıktısını alırsanız, yapılandırmanızda bir sorun yok demektir. Şimdi Apache servisini yeniden başlatabiliriz:
sudo systemctl restart apache2
Bu adımlarla, kendi imzalı SSL sertifikamızı oluşturmak ve Apache’ye entegre etmek için gerekli tüm ön hazırlıkları tamamlamış oluyoruz.
Kendi İmzalı SSL Sertifikası Oluşturma
Şimdi sıra, openssl aracıyla kendi imzalı SSL sertifikamızı ve özel anahtarımızı oluşturmaya geldi. Bu işlem, bir dizi bilgi girmenizi gerektirecek ve sonunda sunucumuzun kullanacağı iki ana dosya üretecektir: .key uzantılı özel anahtar dosyası ve .crt uzantılı sertifika dosyası.
Sertifika ve Anahtar Dosyaları Oluşturma
Aşağıdaki openssl komutunu kullanarak, hem özel anahtarı hem de sertifikayı tek bir adımda oluşturabiliriz. Bu komut, çeşitli parametreler içerir ve her birinin belirli bir amacı vardır:
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/apache-selfsigned.key -out /etc/ssl/certs/apache-selfsigned.crt
Şimdi bu komuttaki parametreleri inceleyelim:
* openssl req: Bu, bir sertifika imzalama isteği (CSR) veya kendi imzalı bir sertifika oluşturmak için kullanılan OpenSSL alt komutudur.
* -x509: Bu bayrak, bir sertifika imzalama isteği yerine kendinden imzalı bir sertifika oluşturacağımızı belirtir.
* -nodes: Bu, özel anahtarın bir parola ile korunmayacağını belirtir. Geliştirme ortamları için pratik olsa da, üretim ortamlarında özel anahtarı bir parola ile korumak daha güvenlidir. Ancak, parola kullanıldığında Apache her başlatıldığında parolayı sormanız gerekir.
* -days 365: Sertifikanın geçerlilik süresini gün olarak belirtir. Burada sertifika bir yıl (365 gün) boyunca geçerli olacaktır.
* -newkey rsa:2048: Yeni bir özel anahtar oluşturulacağını belirtir. rsa:2048, 2048 bitlik bir RSA anahtarı oluşturulacağı anlamına gelir, bu çoğu kullanım durumu için yeterince güçlüdür.
* -keyout /etc/ssl/private/apache-selfsigned.key: Oluşturulan özel anahtarın kaydedileceği dosya yolunu belirtir. /etc/ssl/private dizini, özel anahtarlar için standart bir konumdur ve erişim izinleri genellikle sıkıdır.
* -out /etc/ssl/certs/apache-selfsigned.crt: Oluşturulan sertifikanın kaydedileceği dosya yolunu belirtir. /etc/ssl/certs dizini, sertifika dosyaları için standart bir konumdur.
Bu komutu çalıştırdığınızda, sizden sertifika hakkında çeşitli bilgiler girmeniz istenecektir.
Sertifika Bilgilerini Girme
Komutu çalıştırdıktan sonra, aşağıdakine benzer bir dizi soru göreceksiniz. Bu bilgiler, sertifikanın kimliğini tanımlamak için kullanılır:
Country Name (2 letter code) [AU]:TR
State or Province Name (full name) [Some-State]:Istanbul
Locality Name (eg, city) []:Sisli
Organization Name (eg, company) [Internet Widgits Pty Ltd]:MyCompany
Organizational Unit Name (eg, section) []:IT
Common Name (e.g. server FQDN or YOUR name) []:your_domain_or_ip_address
Email Address []:admin@your_domain.com
Her bir alanı dikkatlice doldurun:
* 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. Sisli).
* Organization Name (eg, company): Şirket veya organizasyon adı (örn. MyCompany).
* Organizational Unit Name (eg, section): Departman veya birim adı (örn. IT).
* Common Name (e.g. server FQDN or YOUR name): Bu alan çok önemlidir. Web sitenize erişmek için kullanacağınız tam etki alanı adını (FQDN) veya sunucunuzun IP adresini girmelisiniz. Örneğin, example.com veya 192.168.1.100 gibi. Eğer buraya yanlış bir değer girerseniz, tarayıcılar “Common Name mismatch” (Ortak Ad uyuşmazlığı) hatası verecektir.
* Email Address: İletişim e-posta adresi.
Tüm bilgileri girdikten sonra, openssl aracı özel anahtarınızı ve sertifikanızı belirtilen konumlara kaydedecektir. Özel anahtar dosyasının (.key) izinlerinin doğru ayarlandığından emin olmak önemlidir, zira bu dosya hassas bilgiler içerir. Varsayılan olarak, /etc/ssl/private dizinindeki dosyalar genellikle yalnızca root kullanıcısı tarafından okunabilir, bu da iyi bir güvenlik uygulamasıdır.
Bu adımlarla, Apache’nin HTTPS trafiğini şifrelemek için kullanacağı kendi imzalı SSL sertifikasını ve özel anahtarını başarıyla oluşturmuş oluyoruz. Bir sonraki adım, Apache’yi bu sertifikayı kullanacak şekilde yapılandırmaktır.
Apache’yi SSL Kullanacak Şekilde Yapılandırma
Sertifikalarımızı oluşturduktan sonra, Apache’nin bu sertifikaları kullanmasını sağlayacak şekilde yapılandırmamız gerekiyor. Bu genellikle bir sanal host yapılandırma dosyası düzenlenerek yapılır.
SSL Yapılandırma Dosyasını Düzenleme
Daha önce etkinleştirdiğimiz default-ssl.conf dosyasını düzenleyeceğiz. Bu dosya /etc/apache2/sites-available/ dizininde bulunur.
sudo nano /etc/apache2/sites-available/default-ssl.conf
Bu dosyayı açtığınızda, SSLCertificateFile ve SSLCertificateKeyFile yönergelerini bulmanız gerekecektir. Bunlar, Apache’ye sertifika ve özel anahtar dosyalarınızın nerede olduğunu söyler. Varsayılan olarak, bunlar genellikle örnek sertifika dosyalarına işaret eder.
Şu satırları bulun:
SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
Bu satırları, kendi oluşturduğunuz sertifika ve anahtar dosyalarınızın yollarını gösterecek şekilde güncelleyin:
SSLCertificateFile /etc/ssl/certs/apache-selfsigned.crt
SSLCertificateKeyFile /etc/ssl/private/apache-selfsigned.key
Ayrıca, ServerName yönergesini de yapılandırmanız önerilir. Bu, sanal host’un hangi alan adına yanıt vereceğini belirtir. Kendi imzalı sertifikanızı oluştururken kullandığınız Ortak Ad (Common Name) ile eşleşmelidir.
ServerName your_domain_or_ip_address:443
your_domain_or_ip_address yerine, sertifikanızı oluştururken girdiğiniz Ortak Ad’ı (Common Name) yazın. Örneğin, example.com veya 192.168.1.100.
Dosyayı kaydedin ve kapatın (nano’da Ctrl+X, Y, Enter).
Sanal Host Oluşturma (Alternatif Yöntem)
default-ssl.conf dosyasını doğrudan düzenlemek yerine, daha düzenli bir yaklaşım olarak kendi sanal host yapılandırma dosyanızı oluşturabilirsiniz. Bu, özellikle birden fazla web sitesi barındırıyorsanız veya varsayılan yapılandırmayı değiştirmek istemiyorsanız kullanışlıdır.
Öncelikle, default-ssl.conf dosyasını kopyalayarak yeni bir dosya oluşturun:
sudo cp /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-available/my-ssl-site.conf
Şimdi yeni oluşturduğunuz dosyayı düzenleyin:
sudo nano /etc/apache2/sites-available/my-ssl-site.conf
Bu dosya içinde, aşağıdaki değişiklikleri yapmanız gerekecektir:
1. yönergesini olarak değiştirebilirsiniz, ancak varsayılan _default_ genellikle çalışır.
2. ServerName yönergesini sertifikanızdaki Ortak Ad (Common Name) ile eşleşecek şekilde ayarlayın:
ServerName your_domain_or_ip_address
3. DocumentRoot yönergesini web sitenizin dosyalarının bulunduğu dizine ayarlayın. Örneğin, /var/www/html veya özel bir dizin.
DocumentRoot /var/www/html
4. SSLCertificateFile ve SSLCertificateKeyFile yönergelerini kendi sertifika ve anahtar dosyalarınıza işaret edecek şekilde güncelleyin:
SSLCertificateFile /etc/ssl/certs/apache-selfsigned.crt
SSLCertificateKeyFile /etc/ssl/private/apache-selfsigned.key
5. Varsayılan olarak default-ssl.conf içinde bulunan SSLCertificateChainFile yönergesini yorum satırı yapın veya silin, zira kendi imzalı sertifikamız için bir sertifika zinciri dosyamız yoktur.
Dosyayı kaydedin ve kapatın. Şimdi yeni sanal host’unuzu etkinleştirin ve varsayılan SSL sanal host’u devre dışı bırakın (eğer kullanmayacaksanız):
sudo a2ensite my-ssl-site.conf
sudo a2dissite default-ssl.conf # Eğer kendi dosyanızı kullanıyorsanız
Yapılandırmayı Test Etme ve Apache’yi Yeniden Başlatma
Yapılandırma dosyalarınızda değişiklik yaptıktan sonra, Apache’yi yeniden başlatmadan önce her zaman yapılandırma sözdizimini kontrol etmelisiniz:
sudo apache2ctl configtest
Eğer Syntax OK çıktısını alırsanız, her şey yolunda demektir. Şimdi Apache servisini yeniden başlatarak değişikliklerin etkili olmasını sağlayın:
sudo systemctl restart apache2
Artık web tarayıcınızı açıp sunucunuzun IP adresine veya alan adına https:// önekiyle erişmeyi deneyebilirsiniz (örn. https://your_domain_or_ip_address). Tarayıcınız muhtemelen bir güvenlik uyarısı gösterecektir (“Bağlantınız gizli değil”, “Bu site güvenli değil” vb.). Bu beklenen bir durumdur çünkü sertifika kendi imzalıdır ve tarayıcınız tarafından güvenilen bir sertifika yetkilisi tarafından doğrulanmamıştır. Uyarıyı kabul ederek veya gelişmiş seçeneklerden devam ederek siteye erişebilirsiniz. Bağlantının HTTPS üzerinden yapıldığını ve adres çubuğunda bir kilit simgesi (ancak muhtemelen kırmızı veya uyarı içeren) gördüğünüzü doğrulamalısınız.
Sonuç ve Sıkça Sorulan Sorular
Bu rehberde, Ubuntu 18.04 üzerinde Apache web sunucusu için kendi imzalı (self-signed) bir SSL sertifikasının nasıl oluşturulacağını ve yapılandırılacağını ayrıntılı olarak ele aldık. Kendi imzalı sertifikalar, geliştirme ve test ortamlarında HTTPS bağlantılarını kurmak için pratik ve hızlı bir çözüm sunar. Ancak, halka açık web siteleri için bir Let’s Encrypt sertifikası veya ücretli bir CA’dan alınan sertifika gibi güvenilir bir alternatif kullanmak her zaman önerilir.
Başarılı bir şekilde kendi imzalı sertifikanızı oluşturup Apache’yi yapılandırdığınızda, sunucunuz artık HTTPS üzerinden şifreli bağlantıları kabul edecektir. Tarayıcınızda gördüğünüz güvenlik uyarısı, sertifikanızın güvenilir bir üçüncü tarafça doğrulanmamış olmasından kaynaklanmaktadır ve bu, kendi imzalı sertifikalar için normal bir davranıştır. Bu rehber, SSL/TLS teknolojisinin temelini anlamanız ve Apache’de HTTPS yapılandırması yapmanız için sağlam bir temel oluşturmuştur.
Sıkça Sorulan Sorular (SSS)
Kendi imzalı sertifikalar üretim ortamında kullanılmalı mıdır?
Hayır, kesinlikle önerilmez. Kendi imzalı sertifikalar, tarayıcılar tarafından güvenilir kabul edilmez ve kullanıcılarınıza “güvenli değil” uyarıları gösterir. Bu durum, sitenizin profesyonelliğine zarar verir ve kullanıcı güvenini azaltır. Üretim ortamları için Let’s Encrypt gibi ücretsiz veya ücretli bir Sertifika Yetkilisi’nden (CA) alınan sertifikalar kullanılmalıdır.
Sertifika süresi dolarsa ne olur?
Sertifikanızın süresi dolduğunda (bizim örneğimizde 365 gün sonra), tarayıcılar daha ciddi güvenlik uyarıları göstermeye başlayacaktır. Bu durumda, yeni bir sertifika oluşturmanız ve Apache yapılandırmanızı güncellemeniz gerekecektir.
Birden fazla site için tek bir kendi imzalı sertifika kullanabilir miyim?
Tek bir kendi imzalı sertifika genellikle sadece tek bir “Ortak Ad” (Common Name) için geçerlidir. Eğer birden fazla alan adınız varsa, her biri için ayrı bir sertifika oluşturmanız veya birden fazla alan adını kapsayan bir sertifika (Subject Alternative Name – SAN ile) oluşturmanız gerekir ki bu, kendi imzalı sertifikalarla daha karmaşık bir işlemdir. Genellikle her site için ayrı bir sertifika oluşturmak en basit yoldur.
Oluşturduğum sertifikayı nasıl iptal ederim veya kaldırırım?
Kendi imzalı bir sertifikayı “iptal etmek” diye bir kavram yoktur, çünkü bir CA tarafından imzalanmamıştır. Sertifikayı kullanmayı durdurmak için, sertifika (.crt) ve özel anahtar (.key) dosyalarını silebilir, Apache yapılandırma dosyasından (örn. my-ssl-site.conf) ilgili SSLCertificateFile ve SSLCertificateKeyFile yönergelerini kaldırabilir veya sanal host’u devre dışı bırakabilirsiniz (sudo a2dissite my-ssl-site.conf).
Ortak Ad (Common Name) neden bu kadar önemli?
Ortak Ad (Common Name), tarayıcının erişmeye çalıştığı etki alanı adı veya IP adresi ile sertifikanın verildiği adı eşleştirdiği ana alandır. Eğer bu iki değer eşleşmezse, tarayıcı bir “Common Name mismatch” (Ortak Ad uyuşmazlığı) hatası verir ve siteye erişimi engeller veya bir uyarı gösterir.
Apache’yi her yeniden başlattığımda sertifika parolası sorulur mu?
Bizim örneğimizde openssl komutunda -nodes (no DES) bayrağını kullandığımız için özel anahtar parolayla korunmaz. Bu nedenle Apache’yi her yeniden başlattığınızda parola sorulmayacaktır. Eğer -nodes kullanmasaydık, özel anahtar parolayla şifrelenir ve Apache her başlatıldığında bu parolanın girilmesi gerekirdi, bu da otomatik yeniden başlatmaları zorlaştırırdı.