This shows you the differences between two versions of the page.
amres_cbp_wiki:bpd_106_dodatakb_ssl [2011/05/15 20:15] mara |
amres_cbp_wiki:bpd_106_dodatakb_ssl [2011/05/15 20:49] (current) mara |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ======== SSL protokol ======== | + | ====== SSL protokol ====== |
Za zaštitu komunikacije između klijenta i servera npr. //web// klijenta (//web// pretraživača) i //web// servera, načešče se koristi SSL (//Secure Sockets Layer//) protokol, odnosno njegova standardizovana verzija TLS (//Transport Layer Security//). SSL protokol nastao je u Netscapu, ali je standardizovan u IETF-u pod nazivom Transport Layer Security (TLS). Naziv SSL se zadržao, pa ćemo ga i mi češće koristiti. SSL može biti ugrađen u softverski paket (npr. Microsoft Explorer pretraživač dolazi sa ugrađenim SSL protokolom i većina //web// servera ima implementiran protokol). Alternativno SSL/TLS može biti instaliran kao deo TCP/IP protokol steka i tako transparentan za aplikativni nivo. | Za zaštitu komunikacije između klijenta i servera npr. //web// klijenta (//web// pretraživača) i //web// servera, načešče se koristi SSL (//Secure Sockets Layer//) protokol, odnosno njegova standardizovana verzija TLS (//Transport Layer Security//). SSL protokol nastao je u Netscapu, ali je standardizovan u IETF-u pod nazivom Transport Layer Security (TLS). Naziv SSL se zadržao, pa ćemo ga i mi češće koristiti. SSL može biti ugrađen u softverski paket (npr. Microsoft Explorer pretraživač dolazi sa ugrađenim SSL protokolom i većina //web// servera ima implementiran protokol). Alternativno SSL/TLS može biti instaliran kao deo TCP/IP protokol steka i tako transparentan za aplikativni nivo. | ||
Line 6: | Line 7: | ||
Sa stanovišta SSL protokola, ono što pravi razliku između klijenta i servera su akcije koje oni preduzimaju prilikom pregovora oko sigurnosnih parametara. Klijent inicira komunikaciju, porukom u kojoj se nalazi i njegov predloži skup SSL opcija koje će se koristiti za uspostavu zaštićenog kanala. Server, na osnovu onoga što je klijent ponudio, bira skup opcija koje će se koristiti. Iako je konačna odluka na serveru, server može da bira samo iz skupa parametara koje je klijent inicijalno predložio. | Sa stanovišta SSL protokola, ono što pravi razliku između klijenta i servera su akcije koje oni preduzimaju prilikom pregovora oko sigurnosnih parametara. Klijent inicira komunikaciju, porukom u kojoj se nalazi i njegov predloži skup SSL opcija koje će se koristiti za uspostavu zaštićenog kanala. Server, na osnovu onoga što je klijent ponudio, bira skup opcija koje će se koristiti. Iako je konačna odluka na serveru, server može da bira samo iz skupa parametara koje je klijent inicijalno predložio. | ||
- | ====== B.1 SSL poruke ====== | + | ===== B.1 SSL poruke ===== |
Najkompleksniji deo SSL protokola je deo oko započinjanja i dogovora o parametrima komunikacije između klijenta i servera, //SSL Handshake//. On omogućava serveru i klijentu da međusobno autentifikuju jedan drugog, da izaberu algoritam za šifrovanje, MAC algoritam i da razmene kriptografske ključeve koji će se koristiti za zaštitu podataka u SSL zapisu. | Najkompleksniji deo SSL protokola je deo oko započinjanja i dogovora o parametrima komunikacije između klijenta i servera, //SSL Handshake//. On omogućava serveru i klijentu da međusobno autentifikuju jedan drugog, da izaberu algoritam za šifrovanje, MAC algoritam i da razmene kriptografske ključeve koji će se koristiti za zaštitu podataka u SSL zapisu. | ||
Line 39: | Line 41: | ||
**//ServerKeyExchange//** - Poruka od servera koja sadrži kriptografske ključeve za uspostavu sigurne komunikacije. | **//ServerKeyExchange//** - Poruka od servera koja sadrži kriptografske ključeve za uspostavu sigurne komunikacije. | ||
- | ====== B.2 Uspostavljanje zaštićene komunikacije ====== | + | ===== B.2 Uspostavljanje zaštićene komunikacije ===== |
Osnovna funkcija koju SSL klijent i server mogu da urade je uspostavljanje kanala po kome se odvija sigurna komunikacija. | Osnovna funkcija koju SSL klijent i server mogu da urade je uspostavljanje kanala po kome se odvija sigurna komunikacija. | ||
Line 121: | Line 123: | ||
U tabeli B.4.1 su objašnjeni svi koraci u razmeni poruka. | U tabeli B.4.1 su objašnjeni svi koraci u razmeni poruka. | ||
- | ^ Razmena poruka pri razdvajanju autentifikacije od enkripcije ^^ | + | ^Razmena poruka pri razdvajanju autentifikacije od enkripcije ^^ |
^ Poruka ^ Akcija ^ | ^ Poruka ^ Akcija ^ | ||
| 1 |Klijent šalje //ClientHello// poruku sa predlozima za izbor SSL parametara| | | 1 |Klijent šalje //ClientHello// poruku sa predlozima za izbor SSL parametara| | ||
Line 138: | Line 140: | ||
\\ | \\ | ||
- | ===== Autentifikacija klijenta ===== | + | ===== B.5 Autentifikacija klijenta ===== |
- | Pored autentifikacije servera SSL omogućava i autentifikaciju klijenta koja je realizovana na sličan način. Na slici 10 je prikazana odgovarajuca razmena poruka, a u tabeli 5 su objašnjeni odgovarajući koraci. | + | Server takođe može da zahteva autentifikaciju klijenta, tokom razmene inicijalnih //Hello// poruka između klijenta i servera. SSL specificira da server ne može da traži autentifikaciju klijenta ukoliko se on prethodno nije autentifikovao klijentu. |
- | {{ amres_cbp_wiki:interni_deo:sigurnost:ssl_autentifikacija_klijenta.jpg?450 |Slika 10}} | + | **Napomena:** SSL koristi javni ključ klijenta samo za digitalno potpisivanje, odnosno autentifikaciju klijenta. Za razliku od slučaja sa serverom, ne postoji potreba za enkripcijom korišćenjem javnog ključa klijenta. |
+ | |||
+ | Na slici B.5.1 je prikazana odgovarajuća razmena poruka, a u tabeli B.5.1 su objašnjeni odgovarajući koraci. | ||
+ | |||
+ | {{ amres_cbp_wiki:interni_deo:sigurnost:ssl_autentifikacija_klijenta.jpg?400 |Slika 10}} | ||
;#; | ;#; | ||
- | //Slika 10// | + | //Slika B.5.1 Tri dodatne SSL poruke autentifikuju klijenta// |
;#; | ;#; | ||
\\ | \\ | ||
- | ^ Razmena poruka pri odvajanju autentifikaciji od enkripcije ^^ | + | ^Razmena poruka pri autentifikaciji klijenta ^^ |
^ Poruka ^ Akcija ^ | ^ Poruka ^ Akcija ^ | ||
- | | 1 |Klijent šalje //ClientHello// poruku sa predlozima SSL parametara| | + | | 1 |Klijent šalje //ClientHello// poruku sa predlozima za izbor SSL parametara| |
- | | 2 |Server odgovara sa //ServerHello// porukom sa SSL parametrima koje je izabrao| | + | | 2 |Server odgovara //ServerHello// porukom sa SSL parametrima koje je izabrao| |
| 3 |Server šalje //Certificate// poruku koja sadrži sertifikat servera| | | 3 |Server šalje //Certificate// poruku koja sadrži sertifikat servera| | ||
| 4 |Server šalje //CertificateRequest// poruku kojom traži da autentifikuje klijenta| | | 4 |Server šalje //CertificateRequest// poruku kojom traži da autentifikuje klijenta| | ||
- | | 5 |Server zaključuje svoj deo pregovora sa //ServerHelloDone// porukom| | + | | 5 |Server zaključuje svoj deo pregovora //ServerHelloDone// porukom| |
| 6 |Klijent šalje //Certificate// poruku koja sadrži sertifikat klijenta| | | 6 |Klijent šalje //Certificate// poruku koja sadrži sertifikat klijenta| | ||
- | | 7 |Klijent šalje ključ koji će se koristiti za sesiju (enkriptovan javnim ključem servera) u //ClientKeyExchange// poruci| | + | | 7 |Klijent šalje ključ koji će se koristiti tokom sesije (kriptovan javnim ključem servera) u //ClientKeyExchange// poruci| |
| 8 |Klijent šalje //CertificateVerify// poruku koja sadrži važne informacije o sesiji potpisane privatnim ključem klijenta; server koristi javni ključ klijenta iz sertifikata klijenta, kako bi mogao da potvrdi identitet klijenta| | | 8 |Klijent šalje //CertificateVerify// poruku koja sadrži važne informacije o sesiji potpisane privatnim ključem klijenta; server koristi javni ključ klijenta iz sertifikata klijenta, kako bi mogao da potvrdi identitet klijenta| | ||
- | | 9 |Klijent šalje //ChangeCipherSpec// poruku kojom aktivira korišćenje zaštićene komunikacije sa dogovorenim parametrima za sve nadalje poslate poruke| | + | | 9 |Klijent šalje //ChangeCipherSpec// poruku kojom aktivira korišćenje zaštićene komunikacije sa dogovorenim parametrima za sve buduće poruke| |
| 10 |Klijent šalje //Finished// poruku kako bi server proverio novoaktivirane sigurnosne opcije| | | 10 |Klijent šalje //Finished// poruku kako bi server proverio novoaktivirane sigurnosne opcije| | ||
- | | 11 |Server šalje //ChangeCipherSpec// poruku kojom aktivira korišćenje zaštićene komunikacije sa dogovorenim parametrima za sve nadalje poslate poruke| | + | | 11 |Server šalje //ChangeCipherSpec// poruku kojom aktivira korišćenje zaštićene komunikacije sa dogovorenim parametrima za sve buduće poruke| |
+ | | 12 |Server šalje //Finished// poruku kako bi klijent proverio novoaktivirane sigurnosne opcije| | ||
;#; | ;#; | ||
- | //Tabela 5// | + | //Tabela B.5.1 Razmena SSL poruka pri autentifikaciji klijenta// |
;#; | ;#; | ||
\\ | \\ | ||
- | Ako server zahteva autentifikaciju klijenta, šalje //Certificate Request// poruku u sklopu //hello// razmene. SSL specificira da server ne može da traži autentifikaciju klijent ukoliko se on prethodno nije autentifikovao klijentu. | ||
- | Napomena: SSL koristi javni ključ klijenta samo za digitalno potpisivanje, odnosno autentifikaciju. Za razliku od slučaja sa serverom, ne postoji potreba za enkripciju korišćenjem javnog ključa klijenta. Iz tog razloga, nema potrebe da se u slucaju autentifikacije klijenta posebno odvaja enkripcija. | + | Samo slanje //Certificate// poruke od strane klijenta ne obezbeđuje potpunu autentifikaciju klijenta. Klijent mora da dokaže da poseduje i odgovarajući privatni ključ. Zato, klijent šalje //CertificateVerify// poruku koja sadrži digitalno potpisan heš dobijen od informacije koja je poznata i klijentu i sreveru. Na taj način server može da proveri potpis i utvrdi da li klijent poseduje odgovarajući privatni ključ. |
- | Samo slanje Certificate poruke od strane klijenta ne obezbeđuje potpunu autentifikaciju klijenta. Klijent mora da dokaže da poseduje i odgovarajući privatni ključ. Zato, klijent šalje //CertificateVerify// poruku koja sadrži digitalno potpisan heš dobijen od informacije koja je poznata i klijentu i sreveru. Na taj način server može da proveri potpis i utvrdi da li klijent poseduje odgovarajući privatni ključ. | + | Podrazumeva se da je server dužan da proveri da li može da veruje sertifikatu koji dobije od klijenta. To uključuje proveru lanca poverenja i provore validnosti sertifikata. |
- | ====== Format poruke ====== | + | U navedenom primeru SSL klijent je //web// pretraživač, a digitalni sertifikat koji mu je potreban da bi opisani scenario funkcionisao je lični korisnički sertifikat. |
- | SSL protokol je organizovan iz više delova kao što je prikazano na slici 11. Četiri različita izvora kreiraju SSL poruke: //ChangeCipherSpec// protokol, //Alert// protokol, //Handshake// protokol i aplikativni protokoli kao što je http. //Record Layer// protokol prihvate poruke navedenih protokola, formatira ih, vrši odgovarajuću enkapsulaciju i prosleđuje ih transportnom sloju. | + | Prednosti korištenja PKI za autentifikaciju klijenta (krajnjih korisnika) su: |
+ | |||
+ | * Osetljive informacije (//password// ili privatni ključ) ne prenose se kroz mrežu. | ||
+ | * Nije potreban repozitorijum za korisničke akreditiv (//credential//) – postoji CA kome svi veruju. | ||
+ | * Autentifikacija nije centralizovan servis. | ||
+ | |||
+ | |||
+ | |||
+ | ===== B.6 Kreiranje i format SSL poruke ===== | ||
+ | |||
+ | SSL protokol se oslanja na TCP protokol preko svog //Record// protokola. //Record// protokol preuzima poruke aplikacije i poruke jednog od tri SSL //Handshake// pod-protokola (slika B.6.1), formatira ih, vrši odgovarajuću enkapsulaciju i prosleđuje ih transportnom sloju | ||
{{ amres_cbp_wiki:interni_deo:sigurnost:ssl_format_poruke.jpg?350 |Slika 11}} | {{ amres_cbp_wiki:interni_deo:sigurnost:ssl_format_poruke.jpg?350 |Slika 11}} | ||
;#; | ;#; | ||
- | //Slika 11// | + | //Slika B.6.1 Komponente SSL protokola// |
;#; | ;#; | ||
\\ | \\ | ||
- | ===== SSL i transportni sloj ===== | ||
- | SSL protokol zahteva puzdan prenos i bez grešaka, tako da koristi tcp kao protokol transportnog sloja. SSL omogućava kombinovanje više SSL poruka u okviru jednog TCP segmenta. | + | ==== B.6.1 SSL i transportni sloj ==== |
- | {{ amres_cbp_wiki:interni_deo:sigurnost:ssl_transportni_sloj.jpg?450 |Slika 12 }} | + | Pošto zahteva puzdan prenos, bez grešaka, SSL koristi TCP na transportnom sloju. Omogućeno je kombinovanje više SSL poruka u okviru jednog TCP segmenta. |
+ | |||
+ | {{ amres_cbp_wiki:interni_deo:sigurnost:ssl_transportni_sloj.jpg?400 |Slika 12 }} | ||
;#; | ;#; | ||
- | //Slika 12// | + | //Slika B.6.1.1 Kombinovanje više SSL poruka u jedan TCP segmentu// |
;#; | ;#; | ||
\\ | \\ | ||
- | ===== Record layer ===== | ||
- | SSL koristi //Record Layer// protokol za enkapsulaciju koji definiše zajednički format za sve SSL poruke (//Alert//, //ChangeCipherSpec//, //Handshake// i poruke same aplikacije). Na slici 13 je prikazan format poruke koji specificira //Record Layer//, a u tabeli 6 su data objašnjenja odgovarajućih polja. | + | ==== B.6.2 Record sloj SSL protokola ==== |
+ | |||
+ | //Record// sloj SSL protokola vrši enkapsulaciju u format prepoznatljiv za sve SSL poruke (//Alert//, //ChangeCipherSpec//, //Handshake// i poruke aplikacije). Na slici B.6.2.1 je prikazan format poruke, a u tabeli B.6.2.1 su navedena objašnjenja za odgovarajuća imena polja. | ||
{{ amres_cbp_wiki:interni_deo:sigurnost:ssl_record_layer.jpg?350 |Slika 13}} | {{ amres_cbp_wiki:interni_deo:sigurnost:ssl_record_layer.jpg?350 |Slika 13}} | ||
;#; | ;#; | ||
- | //Slika 13// | + | //Slika B.6.2.1 Record sloj SSL protokola je zadužen za enkapsulaciju poruke// |
;#; | ;#; | ||
\\ | \\ | ||
^ Polje ^ Veličina (B) ^ Namena ^ | ^ Polje ^ Veličina (B) ^ Namena ^ | ||
- | |//Protocol//| 1 |Označava protokol koji je enkapsuliran. Može da ima sledeće vrednosti: 20 – //ChangeCipherSpec//; 21 – //Alert//; 22 – //Handshake//; 23 - Aplikacija| | + | |//Protocol//| 1 |Označava da je poruka deo jednog od tri //handshake// pod-protokola ili aplikacije. Moguće su sledeće vrednosti: \\ 20 – //ChangeCipherSpec//; \\ 21 – //Alert//; \\ 22 – //Handshake//; \\ 23 - Aplikacija| |
|//Version//| 2 |Verzija SSL protokola. Trenutna verzija je 3.0, a TLS koristi verziju 3.1| | |//Version//| 2 |Verzija SSL protokola. Trenutna verzija je 3.0, a TLS koristi verziju 3.1| | ||
- | |//Length//| 2 |Dužina poruke protokola iznad| | + | |//Length//| 2 |Dužina poruke preuzete od protokola na sloju iznad Record sloja SSLa.| |
- | |//Protocol Messages//| n |Poruka enkapsuliranog protokola| | + | |//Protocol Messages//| n |Poruka | |
;#; | ;#; | ||
- | //Tabela 6// | + | //Tabela B.6.2.1 Polja SSL Record Layer poruke// |
;#; | ;#; | ||
\\ | \\ | ||
- | **//ChangeCipherSpec// protokol** | + | **//ChangeCipherSpec// protokol:** je jednostavan protokol koji ima samo jednu poruku, //ChangeCipherSpec//, koja je već pomenuta i objašnjena. |
- | + | ||
- | Ovo je jednostavan protokol koji ima samo jednu pruku, ChangeCipherSpec, koja je već pomenuta i objašnjena. | + | |
- | + | ||
- | **//Alert// protokol** | + | |
- | Koriste ga sistemi kako bi signalizirali grešku ili upozorenje drugoj strani komunikacije. | + | **//Alert// protokol: ** se koristi da bi signalizirali grešku ili upozorenje drugoj strani uključenoj u komunikaciju. |
- | **//Handshake// protokol** | + | **//Handshake// protokol:** je zadužen za razmenu poruka tokom uspostavljanja i dogovaranja o parametrima SSL sesije. Pripadaju mu poruke //HelloRequest//, //ClientHello//, //ServerHello//, //Certificate//, //ServerKeyExchange//, //CertificateRequest//, //ServerHelloDone//, //CertificateVerify//, //ClientKeyExchange//, //Finished//, čije je značenje opisano na početku u poglavlju B.1 SSL poruke. |
- | Zadužen je razmenu poruka za dogovor parametra SSL sesije: | ||
- | * //HelloRequest// | ||
- | * //ClientHello// | ||
- | * //ServerHello// | ||
- | * //Certificate// | ||
- | * //ServerKeyExchange// | ||
- | * //CertificateRequest// | ||
- | * //ServerHelloDone// | ||
- | * //CertificateVerify// | ||
- | * //ClientKeyExchange// | ||
- | * //Finished// |