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:

$ nc -l 12345

Apoi, dintr-o alta consola, folositi nc cu rol de client, pentru a va conecta local pe portul 12345:

$ nc localhost 12345

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:

-
$ 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

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 aici
  • cheia privata server.ixlabs.key de aici

Apoi, porniti din nou openssl s_server, specificand parametrii -cert si -key:

$ openssl s_server -cert server.ixlabs.crt -key server.ixlabs.key -accept 12345
Using default temp DH parameters
ACCEPT

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:

$ 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
[...]

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 aici

Apoi, lansati din nou openssl s_client, dar cu parametru -CAfile:

$ 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)

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
    a2enmod ssl
  • 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 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.

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.

  • 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

sudo apt-get install courier-imap courier-imap-ssl

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.

Puteți urmări indicațiile de aici.

gsr/laboratoare/laborator-09.txt · Last modified: 2016/12/22 17:13 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