sobota 5. ledna 2008

FTP a OpenSSL

FTP(File Transfer Protocol) je sám osobě nešifrovaný, což znamená, že jak odchozí, tak příchozí data lze pomocí tzv. "Packet snifferů" odchytávat. Této možnosti lze však předejít několika způsoby:

1. Využitím SCP(Secure Copy). Tato možnost je však pro běžného uživatele velmi nepraktická, navíc SCP klienti pracují se službou SSH(Secure Shell), což sice na jedné straně přináší velkou bezpečnostní výhodu, na straně druhé má uživatel přístup k de facto celému systému. Jistěže se dají nastavit potřebná oprávnění, ale je to velmi zdlouhavé.

2. Využití TLS/SSL. TLS/SSL je šifrovací metoda velmi podobná PGP(založena na asymetrické šifře). Funguje to tak, že na počátku každé relace si klient a server vymění pozdravy(certifikáty a veřejné klíče). Pokud je certifikát podepsán nějakou uznávanou certifikační autoritou, pokročí se dál. V opačném případě zobrazí klient zprávu o přijetí neznámého certifikátu(většinou se jedná o tzv. "Self-signed certificate" - certifikát, který je podepsán sám sebou). Následně se vytvoří tunel(šifrované spojení), kterým obousměrně prochází veškerá data. Vzhledem k tomu, že standardem pro SSL/TLS jsou dnes 1024 bitové RSA klíče, je jejich prolomení takřka nemožné.

* * *

OpenSSL

OpenSSL je UNIXovská knihovna funkcí pro práci s SSL. Patří zde např. generování a podepisování klíčů(certifikátů), šifrování/dešifrování souborů a mnoho dalšího. Tady je přehled aspoň těch nejzákladnějších funkcí knihovny OpenSSL:
ca - správa certifikačních autorit (CA)
crl - správa revokačních certifikátů (CRL)
crl2pkcs7 - konverze CRL na PKCS#7
dsa - práce s DSA klíči
dsaparam - generování a manipulace s DSA
enc - manipulace se symetrickými šiframi
dhparam - správa Diffie-Hellman parametrů
gendsa - generování DSA parametrů
genrsa - generování RSA parametrů
ocsp - poskytne různorodé informace o certifikátu
passwd - generování hashovaných hesel
pkcs12 - správa pkcs12 certifikátů
pkcs7 - správa pkcs7 certifikátů
rand - generování pseudonáhodných čísel
req - generování certifikátů
rsa - správa RSA dat
rsautl - utilita pro podepisování, ověřování, šifrování a dešifrování pomocí RSA
s_client - vytvoření SSL/TLS spojení ke vzdálenému serveru
s_server - server bude čekat na SSL/TLS spojení od klientů
s_time - SSL časovač
sess_id - správa SSL sessions
speed - měření rychlosti algoritmu
verify - ověřování X.509 certifikátů
version - informace o verzi OpenSSL
x509 - správa X.509 certifikátů

V následujících dvou příkladech si ukážeme nejprve zašifrování a posléze dešifrování textového souboru algoritmem DES3 pomocí knihovny OpenSSL

1.
martin@suky:~$ echo "Toto je testovací soubor" > input
martin@suky:~$ openssl enc -des3 -salt -in input -out output

2.
martin@suky:~$ openssl enc -des3 -d -salt -in output -out input
enter des-ede3-cbc decryption password:
martin@suky:~$ cat input
Toto je testovací soubor



* * *

Vygenerování vlastního páru klíčů a certifikátu

Nyní si ukážeme, jak vygenerovat self-signed certifikát a příslušný pár RSA klíčů pro FTP server Pure-FTP.

Než však budeme moci pokračovat, musíme vytvořit adresář, do něhož se budou všechny potřebné soubory ukládat
sudo mkdir -p /etc/ssl/private

Nyní vytvoříme pár klíčů pro pure-ftp.
sudo openssl req -x509 -nodes -newkey rsa:1024 -keyout /etc/ssl/private/pure-ftpd.pem -out /etc/ssl/private/pure-ftpd.pem -days 1098

Tady by bylo záhodno na chvíli se zastavit a vysvětlit si, co se vlastně stalo(na první pohled se může výše citovaný příkaz zdát trošičku chaotický a nepřehledný).
req - bude se pracovat s certifikační žádostí
x509 - Bude se pracovat s tzv. self-signed certifikátem
nodes - soubor s párem klíčů nebude zašifrován
newkey rsa:1024 - vytvoří se pár 1024 bitových RSA klíčů
keyout a out - vyexportují dvojci klíčů do příslušného souboru
days 1098 - certifikát bude platný po dobu tří let.

Nyní pokročíme dál
sudo chown 600 /etc/ssl/private/*.pem
600 - právo jen pro čtení(zapisovat smí pouze vlastník - v našem případě root)

sudo openssl req -new -key /etc/ssl/private/pure-ftpd.pem -out cert.csr
Vytvoří se certifikát k příslušnému páru klíčů.

Nyní musíme povolit TLS u serveru, takže
sudo echo "2" > /etc/pure-ftpd/conf/TLS
sudo /etc/init.d/pure-ftpd restart

Nyní se už jen stačí připojit k serveru a vše by mělo fungovat :-)

POZNÁMKA: Jako typ serveru musíme zvolit FTPES(File Transfer Protokol Over Explicit SSL/TLS).

Žádné komentáře: