Šifrování (2), FTP Petr Koloros p.koloros [at] sh.cvut.cz http://sut.sh.cvut.cz
Obsah Úvod do šifrování FTP FTP server ProFTPd Šifrovaný přístup Virtuální servery Síť FTPek na klíč
FTP File Transfer Protokol Velmi starý protokol, žádné zabezpečení Porty 20 data 21 příkazy (control port) Režimy Aktivní, server navazuje datové spojení Pasivní, klient navazuje datové spojení
Sever ProFTPd Server ProFTPd (rozšířený, podpora featur) Šifrování: mod_tls (v balíčku ProFTP) http://www.castaglia.org/proftpd/doc/contrib/pro FTPD-mini-HOWTO-TLS.html http://www.castaglia.org/proftpd/modules/mod_tls.html Explicitní TLS (vysvětleno dále) Kompilace: --with-modules=mod_tls
Šifrování Šifrovací protkol TLS Transport Layer Security Dříve SSL (Secure Socket Layer) Implicitní Šifrované automaticky na zvláštním portu Explicitní Vyjednávání šifrování (preferováno) Šetří porty (je jich omezený počet)
Jak funguje TLS (zjednodušeno) Klient i server se domluví na algoritmu Server pošle certifikát (mj. veřejný klíč) Klient ním zašifruje premaseter-secret (náhodná data) a pošle ho serveru Server i klient spočítají z premaster secretu master secret Použijí master secret k vytvoření session key (symetrické šifrování)
Jak funguje TLS komunikace Klient ověří certifikát serveru Platnost certifikátu Jméno serveru Podpis certifikátu důvěryhodnou CA Veřejný klíč Certifikační Autority je znám Spočítá hash serverového cerfitikátu Dešifruje podpis CA v certifikátu = hash porovná hashe (ověří autentičnost certifikátu) CA a cert = hiearchie vs. PGP (distr. důvěra)
Certifikát a CA Klient vygeneruje klíč Z klíče vygeneruje požadavek na podpis (CSR) CSR podepíše CA a vrátí jako certifikát Nebo z klíč budeme považovat za CA a podepíšeme ním CSR = self signed certifikát
Certifikát serveru Vygenerování klíče openssl genrsa -out server.key 1024 RSA algoritmus Klíč dlouhý 1024 bitů Vygenerování CSR (Cert. Sign Request) openssl req -new -key server.key -out server.csr CSR se pošle CA k podpisu, výsledek = certifikát
Self signed certifikát Vytvoření self signed certifikátu na základě CSR openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt Platnost 365 dní
Self signed certifikát Vytvoření self signed certifikátu bez CSR openssl genrsa -out server.key 1024 openssl req -new -x509 -key server.key -out server.crt -days 365 Lze i jedním krokem openssl req -new -x509 -nodes -out server.crt -keyout server.key -days 365
Opravdová CA Umožnuje vytvoření více certifikátu podepsaných jednou CA Trošku složitější OpenSSL na to má určitou strukturu adresářů
Opravdová CA Vygenerujeme klíč, zašifrovaný na heslo s použitím triple DES openssl genrsa -des3 -out ca.key 1024 Vytvoříme self signed certifikát CA openssl req -new -x509 -key ca.key -out ca.crt -days 1095
Opravdová CA Vytvoříme konfiguraci CA (config.ca) podle man ca Vytvoříme potřebné soubory touch index.txt echo 01 > serial Podepíšeme CSR openssl ca -config config.ca -out server.crt -in server.csr
Poznámky k certifikátům Bez -des3 to nevyžaduje passphrase Passphrase je dobré mít u CA Není dobré u serveru, protože se na to ptá při každém spuštění Při vytváření CSR nebo self signed certifikátu je důležité dát pro server Common name = DNS název stroje
Konfigurace anonymous User je anonymous Heslo je email uživatele (nekontroluje se) Přístup má každý, pokud není specifikováno pomocí Limit LOGIN
Konfigurace featured Porty pro pasivní přístup (veškerou komunikaci zahajuje server), dobré pro nastavení firewallu Omezení přístupu na IP/host name pomocí Limit LOGIN Timeouty při idle a pod.
Konfigurace s ověřením Může koexistovat s anonymous Pomocí další sekce anonymous Ale bez UserAlias anonymous Možnost vyžadovat heslo AnonRequirePassword on
Konfigurace s TLS Nutno zapnout TLS engine Možnost volby TLS na klientovi (TLSRequire off) Pozor, pokud je vyžadováno TLS, musí být TLSRequire mimo Anonymous sekci, protože se nejprve vyjednává zabezpečení a pak username. Anonymous se spouští až podle zadaného username. Nutný certifikát a klíč serveru
Konfigurace s TLS a cizí CA Jako s self signed certifikátem, ale: Nutný certifikát serveru podepsaný cizí CA Nutný CA certifikát (kvůli ověření podpisu)
Konfigurace VirtualHosta Jiná konfigurace pro jiné Domain Name Umožňuje FTP na nestandardním portu Nekopíruje defaultní nastavení serveru Kopíruje pouze to, co je v Global direktivě
Síť FTPek Všichni mají stejné username/heslo Server vyžaduje certifikát klienta Klient musí mít certifikát podepsaný CA Server musí mít certifikát podepsaný CA Klient se může připojit k jakémukoliv FTP, které patří do sítě (podepsané CA) Dobré přes VirtualHost a nutnost TLS
Ukázka konfigurace klienta Řádkový klient lftp (http://lftp.yar.ru) ~/.lftp/rc: set ftp:ssl-allow true debug 10 set ssl:cert-file /home/silk/.lftp/ssl/client.crt set ssl:key-file /home/silk/.lftp/ssl/client.key set ssl:ca-file /home/silk/.lftp/ssl/ca.crt
Poděkování Michal Medvecký (misk0) Síť FTPek Martin Fiala (Digri) CA, certifikáty Radek Dostál (Dusty) Šifrovaný přenos souborů
O TLS/SSL http://www.lupa.cz/clanky/odposlouchavame-datana-prepinanem-ethernetu-6/ http://en.wikipedia.org/wiki/secure_sockets_laye r#how_it_works http://www.cryptofest.cz (sekce archív, 2003)