Cum https oferă o conexiune securizată pe care fiecare dezvoltator web ar trebui să o cunoască

Cum https oferă o conexiune securizată pe care fiecare dezvoltator web ar trebui să o cunoască

Cum funcționează HTTPS-ul? Aceasta este o întrebare pe care am luptat-o ​​pentru câteva zile în proiectul meu de lucru.

Ca dezvoltator de web, mi-am dat seama că folosirea HTTPS pentru a proteja datele utilizatorilor este o idee foarte bună, însă nu am avut niciodată o înțelegere prin cristal despre modul în care HTTPS funcționează.







Cum sunt protejate datele? Cum poate un client și un server să stabilească o conexiune securizată dacă cineva deja ascultă canalul lor? Ce este un certificat de securitate și de ce ar trebui să plătesc pe cineva să o primească?

conducte

Înainte de a ne arunca cu capul în modul în care funcționează, să discutăm pe scurt despre motivul pentru care este atât de important să protejăm conexiunea la Internet și de ce protejează HTTPS-ul.

Când un browser face o solicitare pe site-ul dvs. preferat, această solicitare trebuie să treacă prin mai multe rețele diferite, dintre care oricare ar putea fi folosită pentru a asculta sau a interfera cu conexiunea stabilită.

Cum https oferă o conexiune securizată pe care fiecare dezvoltator web ar trebui să o cunoască

De la computerul propriu la alte computere din rețeaua locală, prin intermediul routerelor și switch-urilor, prin ISP-ul dvs. și prin intermediul multor furnizori intermediari - un număr mare de organizații vă transmit datele. Dacă un atacator se găsește în cel puțin una dintre ele - are ocazia să vadă ce date sunt transmise.

De regulă, cererile sunt transmise prin HTTP normal, în care atât cererea clientului, cât și răspunsul serverului sunt transmise în formă clară. Și există multe argumente grele de ce HTTP nu folosește criptarea implicită:

• Aceasta necesită mai multă putere de calcul
• Sunt transmise mai multe date
• Nu puteți utiliza cache-ul

Dar, în unele cazuri, atunci când se transmite prin intermediul canalului de comunicare informații extrem de importante (cum ar fi parolele sau datele cărților de credit), trebuie luate măsuri suplimentare pentru a preveni audierea acestor conexiuni.

Securitatea stratului de transport (TLS)

Acum ne vom plimba în lumea criptografiei, dar nu avem nevoie de o experiență specială pentru aceasta - vom lua în considerare doar cele mai frecvente întrebări. Deci, criptografia vă permite să protejați conexiunea de atacatorii potențiali care doresc să lucreze la conexiune sau doar să o asculte.

TLS, succesorul SSL, este protocolul cel mai frecvent folosit pentru a furniza o conexiune HTTP sigură (așa-numitul HTTPS). TLS este localizat la nivelul sub protocolul HTTP din modelul OSI. Explicând pe degete, aceasta înseamnă că, în timpul executării cererii, mai întâi apar toate "lucrurile" asociate cu conexiunea TLS și apoi tot ceea ce este legat de conexiunea HTTP.

TLS este un sistem criptografic hibrid. Aceasta înseamnă că utilizează mai multe abordări criptografice, pe care le vom lua în considerare în continuare:

1) criptarea asimetrică (criptosistemul cheii publice) pentru a genera o cheie secretă partajată și autentificare (adică identitatea pe care o faceți pentru dvs.).
2) criptare simetrică. Folosind o cheie secretă pentru a cripta în continuare cererile și răspunsurile.

Cryptosystem Cheie Publică

Un sistem de criptare cu chei publice este un fel de sistem criptografic, în care fiecare parte are atât o cheie deschisă, cât și o cheie privată, relaționate matematic între ele. Cheia publică este utilizată pentru a cripta textul mesajului în "gibberish", în timp ce cheia privată este utilizată pentru a decripta și a obține textul sursă.

Aceasta înseamnă că, dacă cineva se află între client și server și monitorizează conexiunea, acesta nu va putea să afle nici cheia privată a clientului, cheia privată a serverului sau cheia secretă a acestuia.

Cum este posibil acest lucru? Math!

Algoritmul Diffie-Hellman

Una dintre cele mai comune abordări este algoritmul de schimb al cheilor Diffie-Hellman (DH). Acest algoritm permite clientului și serverului să convină asupra cheii secrete comune, fără a fi nevoie să transferați cheia secretă peste conexiune. Astfel, atacatorii care asculta canalul nu vor putea determina cheia secretă, chiar dacă interceptează toate pachetele de date fără excepție.







De îndată ce a existat un schimb de taste DH, cheia secretă obținută poate fi utilizată pentru a cripta alte conexiuni în cadrul acestei sesiuni utilizând o criptare simetrică mult mai simplă.

Un pic de matematică ...

Funcțiile matematice care stau la baza acestui algoritm au o trăsătură distinctivă importantă - ele sunt relativ ușor de calculat în direcția înainte, dar practic nu sunt calculate în sens invers. Aceasta este exact zona în care apar numere foarte mari prime.

Fie ca Alice și Bob să fie cele două părți care schimbă cheile prin algoritmul DH. În primul rând, ele sunt de acord cu unele rădăcini (de obicei, un număr mic, cum ar fi 2,3 sau 5) și un număr foarte mare (mai mare de 300 de cifre). Ambele valori sunt trimise în formă clară peste canalul de comunicații, fără a compromite conexiunea.

Amintiți-vă că atât Alice, cât și Bob au propriile chei private (de peste 100 de cifre) care nu sunt niciodată transmise prin canalele de comunicare.

Pe canalul de comunicare, amestecul este trecut prin amestec. Acest lucru este obținut de la chei private, precum și de valorile prime și rădăcină.

În acest fel:
Amestecul lui Alice = (root ^ Alice's Secret)% prime
Amestecul lui Bob = (rădăcina lui Bob's Secret)% prime
unde% reprezintă restul diviziunii

Astfel, Alice își creează amestecul pe baza valorilor aprobate ale constantelor (rădăcină și prime), Bob face același lucru. Odată ce au obținut valoarea amestecului dintre ele, produc operații matematice suplimentare pentru a obține o cheie de sesiune privată. Și anume:

Calculele lui Alice
(Amestecul lui Bob ^ Secretul lui Alice)% prime

Calculul lui Bob
(Amestecul lui Alice ^ Bob's Secret)% prime

Rezultatul acestor operații este același număr ca și pentru Alice și Bob, iar acest număr devine cheia privată pentru această sesiune. Rețineți că nici una din părți nu și-a transmis cheia privată prin canalul de comunicație, iar cheia secretă obținută nu a fost transmisă nici prin conexiunea deschisă. Excelent!

Pentru cei mai puțin matematicieni, Wikipedia oferă o imagine frumoasă. explicând acest proces cu exemplul de amestecare a culorilor:

Cum https oferă o conexiune securizată pe care fiecare dezvoltator web ar trebui să o cunoască

Observați cum culoarea inițială (galbenă) se transformă în final în aceeași culoare "mixtă" atât în ​​Bob cât și în Alice. Singurul lucru care este transmis printr-un canal de comunicare deschis este faptul că sunt culori în jumătate mixte, de fapt, lipsite de sens pentru orice conexiune de ascultare a legăturilor.

Criptarea simetrică

Schimbul de chei are loc numai o singură sesiune, în timpul stabilirii conexiunii. Atunci când părțile au convenit deja asupra unei chei secrete, comunicarea client-server se realizează utilizând criptare simetrică, care este mult mai eficientă pentru transferul de informații, deoarece nu sunt necesare costuri suplimentare pentru confirmare.

Folosind cheia secretă obținută mai devreme și acceptând modul de criptare, clientul și serverul pot schimba în siguranță datele, criptează și decriptează mesajele recepționate unele de altele folosind o cheie secretă. Un atacator care se conectează la canal va vedea numai "gunoiul" care merge pe marginea rețelei înainte și înapoi.

autentificare

Algoritmul Diffie-Hellman permite celor două părți să obțină o cheie secretă privată. Dar de unde ambele părți pot fi siguri că într-adevăr vorbesc unul cu celălalt? Nu am vorbit încă despre autentificare.

Dacă o să-i sun pe prietenul meu, vom implementa schimbul de chei DH, dar brusc se pare că apelul meu a fost interceptat și, de fapt, am comunicat cu altcineva. Încă mai pot comunica în siguranță cu această persoană - nimeni altcineva nu ne poate asculta - dar nu va fi cel cu care cred că comunic. Nu e prea sigur!

Pentru a rezolva problema autentificării, avem nevoie de o infrastructură de chei publice. permițându-ne să fim siguri că subiecții sunt aceia pentru care se eliberează ei înșiși. Această infrastructură este concepută pentru a crea, administra, distribui și revoca certificate digitale. Certificate sunt acele lucruri enervante pe care trebuie să le plătiți pentru ca site-ul să funcționeze pe HTTPS.

Dar, de fapt, ce este acest certificat și cum ne asigură securitatea?

certificări

De fapt, certificatele leagă numele de domeniu cu o cheie publică specifică. Acest lucru previne posibilitatea ca un atacator să furnizeze cheia publică, prezentând ca server accesul clientului.

Pentru a avea încredere în orice browser web, acesta trebuie să fie semnat de o autoritate de certificare acreditată (CA, Autoritatea de certificare, CA). CA sunt companii care efectuează o verificare manuală, faptul că o persoană care încearcă să obțină un certificat îndeplinește următoarele două condiții:

1. este real;
2. are acces la domeniu, certificatul pentru care încearcă să obțină.

Odată ce CA verifică dacă solicitantul - reale și el controlează într-adevăr domeniu, CA semnează certificatul pentru site-ul, de fapt, instalarea unui timbru pentru a confirma faptul că cheia publică a site-ului aparține într-adevăr să-l și el poate fi de încredere.

Browserul dvs. a preîncărcat deja lista de CA acreditată. Dacă serverul returnează un certificat care nu este semnat de un CA acreditat, va apărea un avertisment roșu mare. În caz contrar, toată lumea ar putea semna certificate fictive.

Deci, chiar dacă hackerul a luat cheia publică a serverului său și a generat un certificat digital care confirmă faptul că această cheie publică este asociată cu facebook.com, browserul nu va crede acest lucru, deoarece certificatul nu este semnat de un CA acreditat.

Alte lucruri pe care trebuie să le cunoașteți despre certificate

Validare extinsă

În plus față de certificatele uzuale X.509, există certificate de validare extinsă care oferă un nivel mai înalt de încredere. Prin emiterea unui astfel de certificat, CA efectuează și mai multe controale împotriva persoanei care primește certificatul (de obicei, folosind datele de pașaport sau conturile).

Servirea mai multor site-uri pe un singur server

Există o mulțime de date pe această temă în Wikipedia, există un curs pentru Coursera. Mulțumiri speciale băieților de la chat pe adresa security.stackexchange.com. care mi-a răspuns la întrebările mele în această dimineață.







Articole similare

Trimiteți-le prietenilor: