This shows you the differences between two versions of the page.
pc:laboratoare:13 [2020/05/10 06:07] catalin.leordeanu |
pc:laboratoare:13 [2022/06/02 13:09] (current) dorinel.filip |
||
---|---|---|---|
Line 2: | Line 2: | ||
==== Utilizare programatica ==== | ==== Utilizare programatica ==== | ||
+ | |||
+ | Protocolul SSL (Secure Socket Layer - https://www.ssl.com/faqs/faq-what-is-ssl/) a aparut ca urmare | ||
+ | a necesitatii de a asigura conexiuni sigure in Internet, in stiva de protocoale fiind situat intre nivelul TCP | ||
+ | si nivelul aplicatie. Protocolul asigura autentificarea mutuala a celor doua entitati care comunica, confidentialitatea | ||
+ | comunicarii si protectia integritatii datelor. Una dintre cele mai des intalnite aplicatii ale SSL-ului este | ||
+ | HTTPS (HTTP securizat), care consta din protocolul HTTP utilizat peste SSL. | ||
SSL si conexiunile securizate pot fi folosite pentru orice tip de protocol pe Internet, HTTP, POP3 sau FTP. | SSL si conexiunile securizate pot fi folosite pentru orice tip de protocol pe Internet, HTTP, POP3 sau FTP. | ||
Line 40: | Line 46: | ||
OpenSSL foloseste o biblioteca numita BIO pentru a asigura comunicarea atit securizata cat si nesecurizata. | OpenSSL foloseste o biblioteca numita BIO pentru a asigura comunicarea atit securizata cat si nesecurizata. | ||
Pentru a crea o conexiune fie ea securizata sau nu, un pointer pentru un obiect de tip BIO trebuie creat | Pentru a crea o conexiune fie ea securizata sau nu, un pointer pentru un obiect de tip BIO trebuie creat | ||
- | similar cu crearea unui pointer la FILE (in C). Crearea unei noi conexiuni se face cu BIO new connect, | + | similar cu crearea unui pointer la FILE (in C). Crearea unei noi conexiuni se face cu //BIO_new_connect()//, |
- | specificind hostname si portul. Daca a aparut vreo eroare la crearea obiectului BIO, functia va intoarce | + | specificand hostname si portul. Daca a aparut vreo eroare la crearea obiectului BIO, functia va intoarce |
NULL. Totodata se va incerca sa se deschida conexiunea. Pentru a verifica daca acest lucru s-a realizat cu | NULL. Totodata se va incerca sa se deschida conexiunea. Pentru a verifica daca acest lucru s-a realizat cu | ||
- | succes se apeleaza BIO do connect care returneaza 0 (OK) sau -1 (eroare). | + | succes se apeleaza //BIO_do_connect()// care returneaza 0 (OK) sau -1 (eroare). |
<code> | <code> | ||
Line 101: | Line 107: | ||
</code> | </code> | ||
- | Conexiunea poate fi inchisa in doua moduri, cu BIO reset() astfel incat poate fi reutilizata ulterior sau cu | + | Conexiunea poate fi inchisa in doua moduri, cu //BIO_reset()// astfel incat poate fi reutilizata ulterior sau cu |
//BIO_free_all()// caz in care se elibereaza memoria alocata si se inchide socketul asociat. | //BIO_free_all()// caz in care se elibereaza memoria alocata si se inchide socketul asociat. | ||
Line 120: | Line 126: | ||
handshake la orice moment. RFC 2246 detaliaza aspectele referitoare la protocolul de handshake. | handshake la orice moment. RFC 2246 detaliaza aspectele referitoare la protocolul de handshake. | ||
- | Pentru a stabili o conexiune securizata mai sunt necesari doi pointeri unul de tip SSL CTX (context object) | + | Pentru a stabili o conexiune securizata mai sunt necesari doi pointeri unul de tip //SSL_CTX// (context object) |
si unul de tip SSL. | si unul de tip SSL. | ||
Line 132: | Line 138: | ||
toate certificatele trusted. | toate certificatele trusted. | ||
- | Functia SSL CTX load verify locations e folosita pentru a incarca acest fisier. Aceasta functie are trei | + | Functia //SSL_CTX_load_verify_ locations()// e folosita pentru a incarca acest fisier. Aceasta functie are trei |
parametri: pointerul la context calea catre fisierul *.pem si calea catre un director ce contine certificate. | parametri: pointerul la context calea catre fisierul *.pem si calea catre un director ce contine certificate. | ||
Unul din ultimii doi parametri trebuie specificat (ori fisierul *.pem sau, alternativ, directorul ce contine | Unul din ultimii doi parametri trebuie specificat (ori fisierul *.pem sau, alternativ, directorul ce contine | ||
Line 168: | Line 174: | ||
</code> | </code> | ||
- | Pentru a verifica daca validarea certificatului s-a facut cu succes se apeleaza SSL get verify result() cu unic | + | Pentru a verifica daca validarea certificatului s-a facut cu succes se apeleaza //SSL_get_verify_result()// cu unic |
parametru structura SSL. Daca validarea s-a efectuat cu succes returneaza X509 V OK, altfel intoarce un | parametru structura SSL. Daca validarea s-a efectuat cu succes returneaza X509 V OK, altfel intoarce un | ||
cod de eroare care poate fi documentat daca se foloseste optiunea verify in linia de comanda a utilitarului. | cod de eroare care poate fi documentat daca se foloseste optiunea verify in linia de comanda a utilitarului. | ||
Line 179: | Line 185: | ||
</code> | </code> | ||
- | Stiva de erori poate fi scrisa intr-un fisier cu ERR print errors fp(FILE *); | + | Stiva de erori poate fi scrisa intr-un fisier cu //ERR_print_errors_fp(FILE *);// |
Erorile au urmatorul format: | Erorile au urmatorul format: | ||
Line 189: | Line 195: | ||
==== Cerinte laborator ==== | ==== Cerinte laborator ==== | ||
- | Completati scheletul de cod astfel incat sa se efectueze o conexiune prin HTTPS la verisign.com si sa se | + | Completati [[https://ocw.cs.pub.ro/courses/_media/pc/laboratoare/lab13-skel.zip|scheletul de cod]] astfel incat sa se efectueze o conexiune prin HTTPS la verisign.com si sa se |
- | citeasca local, intr-un fisier pe disc, pagina home, printr-un apel de tip GET. | + | salveze local, intr-un fisier pe disc, pagina home, printr-un apel de tip GET. |
Portul HTTPS implicit este 443. | Portul HTTPS implicit este 443. | ||
Line 197: | Line 203: | ||
<code> | <code> | ||
- | gcc sablon.c -lssl -lcrypto | + | gcc http_client.c -lssl -lcrypto |
</code> | </code> | ||