This shows you the differences between two versions of the page.
gsr:laboratoare:laborator-09 [2015/12/16 17:44] razvan.deaconescu |
gsr:laboratoare:laborator-09 [2016/12/22 17:13] (current) alexandru.carp [Configurarea HTTPS pentru un server web] |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Laborator 09: Securitatea serviciilor de rețea ====== | + | ====== Laborator 09: Securitate: SSL și TLS ====== |
+ | ===== Comunicare client/server necriptata ===== | ||
+ | O modalitate foarte simpla de a crea o sesiune client server este folosirea utilitarului ''nc''(netcat). | ||
+ | |||
+ | Intr-o consola, porniti ''nc'', cu rol de server, sa asculte pe portul ''12345'': | ||
+ | <code> | ||
+ | $ nc -l 12345 | ||
+ | </code> | ||
+ | |||
+ | Apoi, dintr-o alta consola, folositi ''nc'' cu rol de client, pentru a va conecta local pe portul ''12345'': | ||
+ | <code> | ||
+ | $ nc localhost 12345 | ||
+ | </code> | ||
+ | |||
+ | Observati ca textul introdus in client apare pe server, si invers. | ||
+ | |||
+ | Porniti ''wireshark'' sau ''tcpdump'' si observati conversatia TCP pe portul ''12345''. Observati ca datele sunt transmise in clar, necriptate. | ||
+ | |||
+ | Opriti apoi cele doua procese ''nc''. | ||
+ | |||
+ | ===== Comunicare client/server peste SSL/TLS ===== | ||
+ | Pentru a crea o sesiune client/server, dar de data aceasta criptata, putem folosi utilitarul ''openssl'': | ||
+ | * ''openssl s_server'' va avea rol de server | ||
+ | * ''openssl s_client'' va avea rol de client | ||
+ | |||
+ | Incercati sa porniti ''openssl s_server'' pe portul 12345: | ||
+ | <code>- | ||
+ | $ sudo openssl s_server -accept 12345 | ||
+ | Error opening server certificate private key file server.pem | ||
+ | 140455789008536:error:02001002:system library:fopen:No such file or directory:bss_file.c:398:fopen('server.pem','r') | ||
+ | 140455789008536:error:20074002:BIO routines:FILE_CTRL:system lib:bss_file.c:400: | ||
+ | unable to load server certificate private key file | ||
+ | </code> | ||
+ | |||
+ | Observati ca ''openssl s_server'' nu poate porni, deoarece are nevoie de un certificat de server si de o cheie privata. | ||
+ | Descarcati: | ||
+ | * certificatul ''server.ixlabs.crt'' de [[http://swarm.cs.pub.ro/~carpalex/gsr/ssl/server.ixlabs.crt|aici]] | ||
+ | * cheia privata ''server.ixlabs.key'' de [[http://swarm.cs.pub.ro/~carpalex/gsr/ssl/server.ixlabs.key|aici]] | ||
+ | |||
+ | Apoi, porniti din nou ''openssl s_server'', specificand parametrii ''-cert'' si ''-key'': | ||
+ | <code> | ||
+ | $ openssl s_server -cert server.ixlabs.crt -key server.ixlabs.key -accept 12345 | ||
+ | Using default temp DH parameters | ||
+ | ACCEPT | ||
+ | </code> | ||
+ | |||
+ | Observati ca serverul a pornit cu succes si asteapta conexiuni. | ||
+ | |||
+ | Dintr-o alta console, folositi ''openssl s_client'' pentru a va conecta local pe portul ''12345'': | ||
+ | <code> | ||
+ | $ openssl s_client -connect localhost:12345 | ||
+ | CONNECTED(00000003) | ||
+ | depth=0 C = RO, ST = Some-State, O = Ixia, OU = Development, CN = server | ||
+ | verify error:num=20:unable to get local issuer certificate | ||
+ | verify return:1 | ||
+ | depth=0 C = RO, ST = Some-State, O = Ixia, OU = Development, CN = server | ||
+ | verify error:num=21:unable to verify the first certificate | ||
+ | verify return:1 | ||
+ | [...] | ||
+ | </code> | ||
+ | |||
+ | Observati ca: | ||
+ | * sesiunea se stabileste | ||
+ | * clientul primeste certificatul serverului | ||
+ | * clientul **NU poate valida** certificatul serverului | ||
+ | |||
+ | Pentru a putea valida certificatul serverului, avem nevoie de certificatul CA-ului care l-a semnat. | ||
+ | Descarcati certificatul CA-ului ''ca.crt'' de [[http://swarm.cs.pub.ro/~carpalex/gsr/ssl/ca.crt|aici]] | ||
+ | |||
+ | Apoi, lansati din nou ''openssl s_client'', dar cu parametru ''-CAfile'': | ||
+ | <code> | ||
+ | $ openssl s_client -CAfile ca.crt -connect localhost:12345 | ||
+ | CONNECTED(00000003) | ||
+ | depth=1 C = RO, O = Ixia, OU = Development, CN = Ixia-CA | ||
+ | verify return:1 | ||
+ | depth=0 C = RO, ST = Some-State, O = Ixia, OU = Development, CN = server | ||
+ | verify return:1 | ||
+ | --- | ||
+ | Certificate chain | ||
+ | 0 s:/C=RO/ST=Some-State/O=Ixia/OU=Development/CN=server | ||
+ | i:/C=RO/O=Ixia/OU=Development/CN=Ixia-CA | ||
+ | --- | ||
+ | [...] | ||
+ | Verify return code: 0 (ok) | ||
+ | </code> | ||
+ | |||
+ | Observati ca de data aceasta certificatul este validat. | ||
+ | |||
+ | Similar cu ''nc'', textul introdus in client apare pe server, si invers. | ||
+ | |||
+ | Porniti wireshark sau tcpdump si observati conversatia TCP pe portul 12345. Observati ca datele sunt criptate in cadrul unei sesiuni SSL. | ||
+ | |||
+ | ===== Configurarea HTTPS pentru un server web ===== | ||
+ | |||
+ | Folositi certificatul ''server.ixlabs'' pentru a realiza o configurare a unui virtual host pe serverul Apache local (instalați-l dacă nu este instalat) cu suport HTTPS. | ||
+ | |||
+ | Pașii pe care trebuie să îi urmați sunt: | ||
+ | * Crearea unui fișier de configurare pentru hostname-ul ''server.ixlabs'' | ||
+ | * Crearea unui fișier de configurare pentru hostname-ul ''server.ixlabs'' cu suport HTTPS. | ||
+ | * Activarea acestora folosind comanda ''a2ensite''. | ||
+ | * Activarea suport-ului de TLS folosind comanda<code> | ||
+ | a2enmod ssl | ||
+ | </code> | ||
+ | * Copierea certificatului în directorul ''/etc/ssl/certs/'' și a cheii private în ''/etc/ssl/private/''. | ||
+ | * Configurarea suportului de TLS în configurarea ''server.ixlabs'' cu suport HTTPS. Vedeți liniile de configurare de [[https://httpd.apache.org/docs/2.4/ssl/ssl_howto.html#configexample|aici]]. | ||
+ | * Adăugarea unei intrări în ''/etc/hosts'' pentru numele ''server'' cu adresa locală (poate chiar adresa de loopback) ca să aveți rezolvat numele de domeniu. | ||
+ | <note> | ||
+ | **Nota:** Trebuie facuta maparea cu ''server'' si nu cu ''server.ixlabs'' pentru ca browserul se asteapta ca domeniul din URL sa faca match cu CN-ul din certificat, iar acesta este ''server''. | ||
+ | </note> | ||
+ | * Repornirea serverului web. | ||
+ | * Încărcați în browser-ul certificatul CA-ului. | ||
+ | * Conectarea la serverul web folosind un URL de forma ''%%https://server%%'' pentru a valida configurarea corectă a serviciului. | ||
+ | |||
+ | ===== Configurarea IMAPS pentru un server de IMAP ===== | ||
+ | |||
+ | Pe sistemul local instalați pachetul Courier IMAP<code> | ||
+ | sudo apt-get install courier-imap courier-imap-ssl | ||
+ | </code> | ||
+ | |||
+ | Configurați pentru IMAPS certificatul ''server.ixlabs'' și apoi folosiți un client de e-mail pentru vă conecta la server prin IMAPS. | ||
+ | |||
+ | Folosiți și ''openssl s_client'' pentru a verifica folosirea corespunzătoare a certificatului pe server. | ||
+ | |||
+ | <note tip> | ||
+ | Puteți urmări indicațiile de [[http://www.cyberciti.biz/tips/ssl-certificate-installation-courier-imap-server.html|aici]]. | ||
+ | </note> | ||
+ | |||
+ | |||
+ | /* | ||
Laboratorul de securitatea serviciilor de rețea va avea formatul unui seminar. În acest seminar vom discuta despre subiecte de securitate și cum pot fi acestea abordate. | Laboratorul de securitatea serviciilor de rețea va avea formatul unui seminar. În acest seminar vom discuta despre subiecte de securitate și cum pot fi acestea abordate. | ||
Line 27: | Line 155: | ||
[[https://en.wikipedia.org/wiki/Heartbleed|Heartbleed]] | [[https://en.wikipedia.org/wiki/Heartbleed|Heartbleed]] | ||
- | * COȘOVANU Vasile | + | * COSOVANU Vasile |
* VASILE Cătălin | * VASILE Cătălin | ||
* CERNICA Ionuț-Cosmin | * CERNICA Ionuț-Cosmin | ||
Line 67: | Line 195: | ||
* NIȚĂ Costin-Adrian | * NIȚĂ Costin-Adrian | ||
- | /* | + | |
====== Laborator 09 - Servicii web ====== | ====== Laborator 09 - Servicii web ====== |