Laboratorní cvičení: Použití CA
- Nainstalujte webový server Apache2
- Vygenerujte SSL certifikát pro adresu localhost, podepište vlastní autoritou
- To znamená, že CN (Common Name) bude hostname - pak schválně ověřte rozdíl ve hlášce prohlížeče při prohlížení https://localhost/ vs. https://127.0.0.1/
- Použijte tento SSL certifikát pro službu https
- Ověřte si přes https://localhost/, že váš prohlížeč tomuto certifikátu nedůvěřuje
- Vysvětlete postup, kterým bez importu certifikátu CA do prohlížeče můžete certifikátu důvěřovat
- Naimportujte do webového prohlížeče certifikát vaší CA
- Ověřte, že se stránkou již “není problém” a certifikát není hlášen jako nedůvěryhodný
- Připojte se ke službě https na Vašem serveru pomocí openssl a ověřte, že po akceptování certifikátu je možné komunikovat se serverem plaintextově
Bodování
Zatím nevím, něco vymyslíme.
Nápověda pro cvičení
Budete muset nainstalovat webový server, nemusí to být nutně Apache, ale cvičící Vám nemusí nutně umět poradit s jinými servery. Server se nainstaluje příkazem
aptitude install apache2
Případně použijte svého oblíbeného správce balíčků.
Pokud Apache neznáte, tak vězte, že standardně se nainstaluje funkční apache, který poslouchá na adrese 0.0.0.0:80 a nefunguje mu SSL. Webové stránky se ukládají do adresáře /var/www
, respektive do podadresáře apache2-default, kam požadavky přesměrovává defaultní instalace Debianu.
Konfiguraci naleznete v adresáři /etc/apache2/
, pro Vaše potřeby bude stačit editace souboru /etc/apache2/sites-enabled/default
, s čistotou konfigurace si pro účely této laborky nedělejte hlavu. Správně byste měli vyrobit pro každou site (tzn. virtuální web) vytvořit soubor v adresáři /etc/apache2/sites-available/
a poté ji povolit pomocí a2ensite <stránka>
- pokud se to takto naučíte, bude to pro Vás přínosem.
Po každé editaci konfigurace zavolejte apache2ctl configtest
, což Vám nabonzuje všechny konfigurační chyby, které jste udělali.
Apache se zastavuje, spouští, restartuje pomocí initskriptu:
/etc/init.d/apache2
Použití je intuitivní, nápověda se vypíše po zadání příkazu bez parametru.
Budete potřebovat zprovoznit modul pro SSL:
a2enmod
Použití je opět triviální.
Povolením modulu nezačíná Apache poslouchat na portu 443, to mu musíte v konfiguraci povolit direktivou Listen. Tím, že Apache začne poslouchat na portu 443 jste ještě nevyhráli - na tento port musíte nakonfigurovat VirtualHost. To co máte na cvičení řešit je správné zapsání direktiv kolem SSL: http://httpd.apache.org/docs/2.0/mod/mod_ssl.html. Začněte direktivou SSLCertificateFile, ty ostatní si musíte domyslet - není to složité.
Prohlížeč
Vaší volbou bude téměř určitě Firefox, který máte v Ubuntu předinstalovaný. Webové stránky naleznete po instalaci na adrese http://localhost resp. http://ip.adresa.vasi.masiny (tu zjistíte pomocí příkazu /sbin/ifconfig
, pokud budete chtít na https, tak jde o adresu https://localhost resp. https://ip.adresa.vasi.masiny. Schválně si během konfigurace zkuste i adresy https://localhost:80 resp. http://localhost:443/, uvidíte, co na to prohlížeč.
Pečlivě čtěte hlášky prohlížeče kolem webových certifikátů a uvažujte, co po Vás chce a na co klikáte. Na nejasnosti se ptejte. Vaší úlohou je odnést si kus nových znalostí, ne splnit přání učitele.
Komunikace bez prohlížeče
Pokud nevíte jak přesně funguje protokol HTTP, je správný čas to zjistit. Protokol je textový a běžně z webového serveru dostanete odpověď takto:
~$ telnet www.vlada.cz 80 Trying 212.47.23.116... Connected to www.vlada.cz. Escape character is '^]'. GET / HTTP/1.0 # toto je prázdný řádek - u HTTP se dotaz ukončuje \n\n, dvakrát newline (na klávesnici Enter) HTTP/1.1 200 OK Date: Wed, 10 Mar 2010 08:09:58 GMT Server: Apache Last-Modified: Wed, 10 Mar 2010 08:00:08 GMT ETag: "4a06f8-4785-4816dafd17200" Accept-Ranges: bytes Content-Length: 18309 Connection: close Content-Type: text/html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="cs" lang="cs"> <head> Bla bla .. tady jsem to usekal pro nezajímavé čtení ... </body> </html> Connection closed by foreign host.
Takto to fungovalo kdysi - protokol HTTP/1.0, který virtuální servery rozlišoval IP adresou, tzn. pokud jeden server chtěl provozovat www.fel.cz i www.cvut.cz, musel mít (minimálně) 2 různé ip adresy. Aby se adresami neplýtvalo, protokol HTTP/1.1 zavedl rozšíření, které umožňuje protokolem sdělit, který server chceme vidět:
GET /premier/ HTTP/1.1 HOST: www.vlada.cz
Tímto způsobem může na jediné IP adrese běžet i www.parlament.cz, www.senat.cz, www.prezident.cz i miliarda dalších virtuálních webů. Pokud tomu stále nerozumíte, tak když napíšete:
telnet www.vlada.cz 80
Tak server poslouchá POUZE na IP adrese 212.47.23.116 a vůbec neví, že si Váš klient před připojením přeložil hostname www.vlada.cz na adresu 212.47.23.116, ke které se připojil na portu 80. Pokud by jiný host měl jinou IP adresu, tak server poznal, ke které se připojujete…
Good luck.