Bu yazımızda, Ubuntu / Apache web sunucularımızın, güvenli HTTPS protokolü ile iletişimini sağlamak üzere yapılması gereken işlemleri en başından sonuna kadar adım adım ele alıyoruz.

SSL Nedir?

Kayıt yaptırmak, soru sormak, kullanıcı girişi yapmak gibi pek çok işlem için web formları sıklıkla kullanılır. Fakat web tarayıcınız (Chrome, Firefox, Safari vs.) ile site arasında güvenli iletişim sağlanmadıkça, gönderip aldığınız her veri 3. kişilerce okunabilecektir. Yani gönderip almakta olduğunuz veriler eğer gizli nitelik taşıyorsa, başkaları bu bilgileri ele geçirebilecektir. SSL (Secure Socket Layer) protokolü, işte bu iletişimi karşılıklı olarak şifreleyerek temel iletişim güvenliğini sağlamaktadır. Bu yazımızda Ubuntu web sunucunuzda SSL kurulumu, sertifikaların hazırlanması ve Apache konfigürasyonu anlatılacaktır.

Gereksinimler :

  • Ubuntu 16.04 LTS
    Burada anlatılanlar Ubuntu 16.04 için yazılmış olsa da yakın sürümler için de aynen uygulanabilmektedir.
  • Apache 2
  • SSH console bağlantısı
  • root ya da root yetkisinde bir kullanıcı

Adım 1 : root Yetkileri

Eğer SSH konsola root kullanıcısı haricinde bir kullanıcı ile bağlanmışsanız, öncelikle sudo -s komutu ile root yetkilerini almanız gerekiyor. Tabii ki kullanıcınıza bu yetkiler tanımlanmış olması gerek.

user@ubuntu:~$ sudo -s
[sudo] password for user:
root@ubuntu:/#

Adım 2 : OpenSSL Kurulumu

Eğer kurulu değilse, OpenSSL'i şu komutla kolayca kurabilirsiniz:

apt-get install openssl

Adım 3 : KEY ve CSR Dosyalarını Hazırlama

OpenSSL de kurulu ise şimdi sertifika anahtar (KEY) ve imzalama (CSR) dosyamızı hazırlayabiliriz. Önce ilgili klasöre girelim.

root@xubuntu:/# cd /etc/ssl/private
root@xubuntu:/etc/ssl/private#

Şimdi anahtar dosyasını hazırlayalım. Burada 2048 bitlik bir anahtar kullanacak anahtar dosyası (server.key) oluşturacağız. Sistem bizden şifrelemede kullanılacak anahtar kelimeyi ister. Burada önemli nokta anahtar kelimenin (pass phrase) çok basit olmaması. 

root@ubuntu:/etc/ssl/private# openssl genrsa -aes128 -out server.key 2048
Generating RSA private key, 2048 bit long modulus
.............+++
...+++
e is 65537 (0x10001)
Enter pass phrase for server.key:
Verifying - Enter pass phrase for server.key:

Oluşturulan dosya içeriğini kodluyoruz. Sorulduğunda az önce belirlediğimiz anahtar kelimeyi giriyoruz.

root@ubuntu:/etc/ssl/private# openssl rsa -in server.key -out server.key
Enter pass phrase for server.key:
writing RSA key

Sırada CSR (Sertifika imzalama talebi) dosyasını hazırlamak var. Komutun içinde 3650 olarak yer alan kısım sertifikanın 3650 gün yani 10 yıl geçerli olacağını belirtiyor. Bunu istediğiniz gibi değiştirebilirsiniz. İstenilen bilgilere türkçe karakter girmemeye özen gösteriyoruz. Girişleri tamamlayarak, az önce oluşturduğumuz server.key dosyasını anahtar olarak kullanan server.csr dosyamızı oluşturmuş oluyoruz.

root@ubuntu:/etc/ssl/private# openssl req -new -days 3650 -key server.key -out server.csr 
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]:Ankara
Locality Name (eg, city) []:Ankara
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Ornek Internet Hizmetleri
Organizational Unit Name (eg, section) []:Network Yonetimi
Common Name (e.g. server FQDN or YOUR name) []:kurulusadresi.com
Email Address []:admin@kurulusadresi.com
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

Adım 4 : CRT (Sertifika) Dosyasını Hazırlama

Öncelikle KEY ve sonrasında bu KEY dosyasını kullanan CSR dosyasını oluşturduk. Şimdi oluşturduğumuz CSR dosyası ile ihtiyacımız olan sertifikayı yani CRT dosyasını oluşturacağız.

root@ubuntu:/etc/ssl/private#openssl x509 -in server.csr -out server.crt -req -signkey server.key -days 3650
Signature ok
subject=/C=TR/ST=Ankara/L=Ankara/O=Ornek Internet Hizmetleri/OU=Network Yonetimi/CN=kurulusadresi.com/emailAddress=admin@kurulusadresi.com
Getting Private key

Herşey doğru ise komutu çalıştırdığımızda ihtiyacımız olan CRT dosyası oluşacaktır. Şimdi bu dosyaya erişim yetkilendirmesi yaparak bu bölümü tamamlıyoruz.

root@ubuntu:/etc/ssl/private# chmod 400 server.*

Yazının ikinci bölümünde Apache ve Firewall konfigürasyonuna geçeceğiz.