This shows you the differences between two versions of the page.
gsr:laboratoare:laborator-09 [2016/12/21 23:20] alexandru.carp |
gsr:laboratoare:laborator-09 [2016/12/22 17:13] (current) alexandru.carp [Configurarea HTTPS pentru un server web] |
||
---|---|---|---|
Line 17: | Line 17: | ||
Porniti ''wireshark'' sau ''tcpdump'' si observati conversatia TCP pe portul ''12345''. Observati ca datele sunt transmise in clar, necriptate. | 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 30: | 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 42: | 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. |