Differences

This shows you the differences between two versions of the page.

Link to this comparison view

gsr:laboratoare:laborator-09 [2016/12/21 22:03]
alexandru.carp
gsr:laboratoare:laborator-09 [2016/12/22 17:13] (current)
alexandru.carp [Configurarea HTTPS pentru un server web]
Line 1: Line 1:
 ====== Laborator 09: Securitate: SSL și TLS ====== ====== 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 ===== ===== Configurarea HTTPS pentru un server web =====
  
-Cu certificatul ​astfel obținut ​realizați o configurare a unui virtul ​host pe serverul Apache local (instalați-l dacă nu este instalat) cu suport HTTPS.+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: Pașii pe care trebuie să îi urmați sunt:
-  * Crearea unui fișier de configurare pentru hostname-ul ''​dorel.ixlabs'' ​(sau numele aferent domeniului vostru). +  * Crearea unui fișier de configurare pentru hostname-ul ''​server.ixlabs''​ 
-  * Crearea unui fișier de configurare pentru hostname-ul ''​dorel.ixlabs''​ cu suport HTTPS.+  * Crearea unui fișier de configurare pentru hostname-ul ''​server.ixlabs''​ cu suport HTTPS.
   * Activarea acestora folosind comanda ''​a2ensite''​.   * Activarea acestora folosind comanda ''​a2ensite''​.
   * Activarea suport-ului de TLS folosind comanda<​code>​   * Activarea suport-ului de TLS folosind comanda<​code>​
Line 13: Line 104:
 </​code>​ </​code>​
   * Copierea certificatului în directorul ''/​etc/​ssl/​certs/''​ și a cheii private în ''/​etc/​ssl/​private/''​.   * Copierea certificatului în directorul ''/​etc/​ssl/​certs/''​ și a cheii private în ''/​etc/​ssl/​private/''​.
-  * Configuarea ​suportului de TLS în configurarea ''​dorel.ixlabs''​ cu suport HTTPS. Vedeți liniile de configurare de [[https://​httpd.apache.org/​docs/​2.4/​ssl/​ssl_howto.html#​configexample|aici]]. +  * 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 ''​dorel.ixlabs''​ cu adresa locală (poate chiar adresa de loopback) ca să aveți rezolvat numele de domeniu.+  * 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.   * Repornirea serverului web.
   * Încărcați în browser-ul certificatul CA-ului.   * Încărcați în browser-ul certificatul CA-ului.
-  * Conectarea la serverul web folosind un URL de forma ''​%%https://​dorel.ixlabs%%''​ pentru a valida configurarea corectă a serviciului.+  * 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 ===== ===== Configurarea IMAPS pentru un server de IMAP =====
Line 25: Line 119:
 </​code>​ </​code>​
  
-Configurați pentru IMAPS certificatul ​verificat anterior ​și apoi folosiți un client de e-mail pentru vă conecta la server prin IMAPS.+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. Folosiți și ''​openssl s_client''​ pentru a verifica folosirea corespunzătoare a certificatului pe server.
gsr/laboratoare/laborator-09.1482350606.txt.gz · Last modified: 2016/12/21 22:03 by alexandru.carp
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0