magmalinux-SSL/TLS üzerinden FTP desteği

4  SSL/TLS üzerinden FTP desteği

4.1  Sertifika oluşturmak

İlk olarak TLS bağlantısı sırasında, sunucu tarafından kullanılacak gizli anahtarımızı oluşturalım:

# openssl genrsa -des3 -out server.key 1024

Bu gizli anahtarımız oluşturulurken bizden bir passphrase (password ile aynı anlama gelir. Eski UNIX’lerde password 8 karakterle sınırlı iken passphrase daha uzun password anlamında kullanılırdı.) girmemiz istenecek (Çünkü yaratılacak olan bu gizli anahtar bilgisayarımıza kaydedilirken Triple DES algoritması ile şifrelenip kaydedilecek. Böylece bu dosyamız başka birinin eline geçse bile gizli anahtarı kullanabilmesi için, passphrase i bilmesi gerekir).

Şimdi gizli anahtarımızı kullanarak, imzalanmak üzere oluşturulacak Sertifika İmzalama İsteği (Certificate Signing Request – CSR) oluşturalım:

# openssl req -new -key server.key -out server.csr

CSR oluşturulurken openssl uygulaması sizinle ilgili bir takım sorular soracak. Bu sorulardan bizim için en önemli olanı ftp adresini (örneğin ftp.magmalinux.org gibi) girdiğimiz Common Name sorusudur. Common Name değeri olarak FTP sunucunuzun adresi ne ise onu girin.

CSR’nin bulunduğu dosya olan server.csr’yi VeriSign, GlobalSign gibi CA firmalarına belli bir ücret karşılığında imzalattırmamız gerekiyor. server.csr dosyamızı seçtiğimiz bir CA’ya gönderdikten sonra, bize gönderdikleri sertifika dosyasını (genellikle .crt uzantılı olur ama uzantının pek bir önemi yok). Bir diğer seçeneğimiz ise, kendi kendimizin CA’sı olmak ve kendi CSR’lerimizi kendimiz imzalamaktır. Biz bu belge de kendi CA’mızı oluşturup, kendi sertifikalarımızı kendimiz imzalayacağız.

Eğer CA firmalarına imzallattığınız bir sertifikanız varsa yazının bu kısmını atlayabilirsiniz.

İlk olarak CA’mız için bir gizli anahtar oluşturalım:

# openssl genrsa -des3 -out ca.key 1024

Bu aşamada bize ca.key dosyamız için bir passphrase sorulacak. Bu passphrase sayesinde, oluşturulacak bu gizli anahtar şifrelenmiş bir şekilde diskimize kaydedilecek.

Sırada CA’mız için kendinden imzalı bir sertifikaya ihtiyacımız var (Dikkat edin, bu sefer bir Sertifika İmzalama İsteği yerine kendi CA sertifikamızı CA’mızın gizli anahtarı ile imzalıyoruz). Aşağıdaki komut ile kendinden imzalı 365 gün boyunca geçerli bir sertifika oluşturuyoruz.

# openssl req -new -x509 -days 365 -key ca.key -out ca.crt

Artık kendi CA’mızın gizli anahtarı ve sertifikası hazır. Şimdi bunları kullanarak bir önceki bölümde oluşturduğumuz Sertifika İmzalama İsteği’ni (server.csr dosyasını) imzalayalım (komutun ilk satırının sonundaki \ işareti komutun bir alt satırdan devam ettiğini belirtir):

# openssl x509 -req -in server.csr -out server.crt -sha1 -CA ca.crt \
    -CAkey ca.key -CAcreateserial -days 365

Sonunda FTP sunucumuzun kullanacağı sertifikayı yaratabildik.

4.2  ProFTPD’yi Yapılandırmak

ProFTPD sunucusunda SSL/TLS desteğini açmak için proftpd.conf dosyasını aşağıdaki gibi düzenliyoruz:

<IfModule mod_tls.c>
        TLSEngine on
        TLSLog /var/log/proftpd/tls.log
        TLSProtocol TLSv1

        TLSRequired off

        # Sunucu sertifikalari
        TLSRSACertificateFile /etc/proftpd/ssl/server.crt
        TLSRSACertificateKeyFile /etc/proftpd/ssl/server.key

        # CA sertifikasi
        TLSCACertificateFile /etc/proftpd/ssl/ca.crt

        TLSVerifyClient off

        TLSRenegotiate required off
</IfModule>

<IfModule> etiketi bir modülün yüklenip yüklenmediğini kontrol eder. Eğer etikette belirtilen modül (bizim bu örneğimizde mod_tls) yüklemiş ise etiket içerisindeki yönergeler çalıştırılır.

TLSEngine yönergesi, TLS üzerinden bağlantıları aktif hale getirir. Değeri on ya da off olabilir.

TLSLog yönergesi, TLS ile ilgili logların tutulacağı dosyayı belirler.

TLSProtocol yönergesi, TLS bağlantılar için kullanılacak TLS sürümünü belirler. Alabileceği değerler SSLv23 uyumluluk modu (SSLv3 ve TLSv1 bir arada kullanılır), SSLv3 ve TLSv1’dir. SSLv2 kullanılamaz çünkü ProFTPD’de SSLv2 desteği kaldırılmıştır.

TLSRequired yönergesinin değeri on olduğunuda, istemci hem denetleme hem de veri kanalında TLS kullanmaya zorunlu tutulur. off değeri herhangi bir kanalda zorunluluğu ortadan kaldırır. ctrl değeri sadece denetleme kanalında, data değeri ise sadece veri kanalında TLS kullanmayı zorunlu kılar. auth değeri, denetleme kanalında sadece kullanıcı doğrulaması esnasında TLS kullanmayı zorunlu kılar. Son olarak auth+data değeri ise, denetleme kanalında sadece kullanıcı doğrulaması esnasında ve veri kanalında TLS kullanmayı zorunlu kılar.

TLSRSACertificateFile yönergesi, sertifika dosyasının yolunu belirtir.

TLSRSACertificateKeyFile yönergesi, gizli anahtar dosyasının yolunu belirtir.

TLSCACertificateFile yönergesi, CA’mızın sertifika dosyasının yolunu belirtir.

TLSVerifyClient yönergesinin değeri off ise ProFTPD istemciden gelen sertifikayı doğruluğunu kontrol etmeden kabul eder ve bağlantı sağlanır. Eğer değeri on ise istemciden gelen sertifikanın doğruluğu kontrol edilir. Bu yönergenin değeri on iken ProFTPD istemciden sertifika istediği taktirde, istemci göndermez ise, bağlantı hata ile sonuçlanır.

Bu ayarları yaptıktan sonra ProFTPD sunucusunu yeniden başlatalım. Servis başlatılırken size sunucu için yarattığınız sertifika dosyasının passphrase’i sorulacak:

# /etc/init.d/proftpd restart
Stopping ftp server: proftpd.
Starting ftp server: proftpd
Please provide passphrases for these encrypted certificate keys:
RSA key for the 192.168.1.2#21 (Magma FTP Server) server:
Verifying - RSA key for the 192.168.1.2#21 (Magma FTP Server) server

Sistem başlangıcında da ProFTPD başlatılıyorsa, her seferinde passphrase girmek canınızı sıkabilir. Bundan kurtulmak için gizli anahtarınızı şifrelemeden saklamanız gerekiyor. server.key dosyasında duran gizli anahtarımızı şifrelemesiz saklamak istersek:

# openssl rsa -in server.key -out server.key.unsecure

komutunu çalıştırın ve server.key dosyasının passphrase’ini girin. Bu işlemden sonra şifrelenmemiş gizli anahtarımız server.key.unsecure isminde bir dosyaya kaydedilecek. Şimdi ProFTPD’ye bu gizli anahtarı kullanması gerektiğini söyleyelim. Bunun için tekrardan proftpd.conf dosyasını açın ve TLSRSACertificateKeyFile yönergesine yeni dosyanın yolunu verin.

        TLSRSACertificateKeyFile /etc/proftpd/ssl/server.key.unsecure

Şimdi ProFTPD servisini yeni baştan başlatmayı deneyin.