Praktikum 4 - OpenSSL ja sertifikaadid
- Selle praktikumi teemaks on erinevate signeeritud (CA-signed) sertifikaatide loomine, seadistamine ja kasutamine.
- Praktikumi töö toimub
Linuxi virtuaalmasinas
. - Enne praktikumi juurde asumist on soovitatav vaadata 2022. aasta loenguvideo vastava teema kohta. https://panopto.ut.ee/Panopto/Pages/Viewer.aspx?id=fdbf8c88-1f59-4cf1-9bce-ae4f00cdb445
E-õppe tudengitele on pakkuda ka 2021 sarnast praktikumi tutvustav sissejuhatav video.
0. Sissejuhatus
Enne praktilise osani jõudmist anname lühiülevaate sellest, mis on sertifikaadid ning miks neid vaja on.
Ajalooliselt kulges suur osa veebiliiklusest krüpteerimata kujul (HTTP, FTP jne vahendusel) ning oli seetõttu pealtkuulatav. Mõnikord pole krüpteerimist vajagi, sest näiteks uudisteportaalid või Vikipeedia jagavad avalikku infot, mida ehk ei ole vaja varjata. Samas ei taga HTTP kasutamine sisu terviklikkust, mistõttu te ei saa olla kindlad kas see info, mis teie ekraanile jõudis on autentne või on keegi vahepeal pakettide sisu muutnud. Uudisteportaalis olev sisu pole salajane, aga samas saaks aktiivne ründaja, kes kontrollib pakettide liikumise mingit punkti, muuta soovi korral artiklite sisu (nt internetiteenusepakkuja).
Suuremad probleemid tekivad siis, kui turvalisus ja privaatsus muutub oluliseks - näiteks kreeditkaardi või e-tervise infosüsteemi kasutamisel. Transpordikihi turbeprotokolli TLS (Transport Layer Security, varasemalt turvasoklite kihti (Secure Sockets Layer, SSL)) kasutatakse sõnumite krüpteerimiseks suhtluskanali otspunktide vahel.
TLS pakub:
- andmete konfidentsiaalsust
- serveri autentimist sertifikaadi abil
- andmete terviklust ja andmete autentimist
- (kliendi autentimist kliendisertifikaadi abil)
- (Perfect Forward Secrecy ehk PFS)
TLS kasutab andmeside konfidentsiaalsuse tagamiseks hübriidsüsteemi, mis kasutab nii sümmeetrilist kui ka asümmeetrilist krüpteerimist. Sümmeetrilist krüpteerimist läheb vaja selleks, et pakettides olevaid andmeid kaitsta. Samas ei saa ainult sümmeetrilist krüpterimise kasutades lahendada võtmejagamise probleemi. Asümmeetrilist ehk avaliku võtme krüptograafiat lähebki vaja selleks, et näiteks veebiserver ja brauser saaksid omavahel kokku leppida AES võtme. Ainult avaliku võtme krüptograafiast ei piisaks, sest see on liiga aeglane kogu andmevahetuse krüpteerimiseks. Oluline on, et TLS krüpteerib võrguühenduste segmente transpordikihis suhtluskanali otspunktides (näiteks veebiserveri ja brauseri vahel) ja pakette edastavatel osapooltel pole reaalselt võimalik liiklus dekrüpteerina näha.
Avaliku võtme krüptograafia lahendab küll võtme jagamise probleemi, aga kohe tekib uus probleem. Kuidas on võimalik kindlaks teha, kellele vastav avalik võti kuulub? Selle probleemi lahendamiseks kasutatakse sertifikaate ja sertifitseerimiskeskuseid ehk avaliku võtme infrastruktuuri (PKI). Sertifikaat seob ära avaliku võtme ja võtme omaniku. Avalik võti võib kuuluda näiteks veebilehele (HTTPS kasutamise korral), aga ka eraisikule (näiteks ID-kaardi / Mobiil-ID). Niisugust sertifikaati on võimalik ise genereerida, aga see ei kaota usalduse probleemi, sest kolmandad isikud ei saa kindlaks teha, kas sertifikaadis olev info vastab tõele või on võltsitud. Selle probleemi lahendamiseks kasutatakse kolmandaid usaldatud osapooli ehk sertifitseerimiskeskuseid (CA - certificate authority), kes allkirjastavad sertifikaate ning kinnitavad, et vastav avalik võti kuulub sertifikaadis kirjeldatud isikule / asutusele. CA-d on enamasti vaikimisi operatsioonisüsteemi või veebilehitsejatega kaasas ning nende nimekirja uuendatakse regulaarselt koos tarkvara muude uuendustega. Selleks, et avaliku võtme infrastruktuur toimiks, peab teie operatsioonisüsteem või brauser usaldama tipmisi sertifitseerimiskeskuseid (CA). Uurige enda veebilehitseja seadistust, kui teid huvitab, missuguseid sertifitseerimiskeskusi vaikimisi brauser usaldab.
Kõik, mis on krüpteeritud avaliku võtmega, on dekrüpteeritav ainult vastava salajase võtmega ja vastupidi. Salajase võtmega krüpteerimist nimetatakse ka signeerimiseks ehk digi-allkirjastamiseks. Kui server saadab veebilehitsejale enda sertifikaadi, mis on krüpteeritud serveri enda salajase võtmega, siis seda sertifikaati nimetatakse enda signeeritud (self-signed) sertifikaadiks. Kuna allkirja kontrollimiseks tuleb kasutada vastavat avalikku võtit, siis pannakse see sertifikaadiga kaasa. Kui pöördute serveri poole, millel on sertifikaat, kuid mis ei ole allkirjastatud usaldusväärse CA poolt, siis on võrguliiklus küll krüpteeritud, kuid te võite suhelda osapoolega, kes ei ole see, kes väidab end olevat.
Siiski on ka enda signeeritud sertifikaadid kasutatavad olukorras, kus soovite krüpteerida andmesidet enda poolt ülesseatud veebiserveriga. Teie enda poolt allkirjastatud sertifikaadi kasutamisel kuvab brauser hoiatuse ning te peate sertifikaadi brauseris käsitsi kinnitama. Enda signeeritud sertifikaadi kasutamine usaldusväärse CA poolt väljaantud sertifikaadi asemel on tänapäeval pigem haruldane. Varasemalt kasutati seda võimalust, sest CA-de teenused on üldjuhul tasulised ning ei olnud tasuta alternatiivi. Nüüdseks saab https://letsencrypt.org/ kaudu hankida tasuta sertifikaadi, mida usaldavad enamik veebilehitsejaid.
1. Praktikumi ettevalmistus
Käesolevas praktikumis seadistame Linux Mint virtuaalmasinas Apache veebiserveri kasutama ja kuvama turvalist HTTPS veebilehte. Looge endale isiklik openssl töökeskkond: (eeldame edaspidi, et see asub /home/kasutaja/openssl
)
$ sudo hostnamectl set-hostname <perenimi>.sec
$ sudo nano /etc/hosts
Muutke rida, mis algab 127.0.1.1 nii:
127.0.1.1 <perenimi>.sec mail.<perenimi>.sec www.<perenimi>.sec test.<perenimi>.sec <perenimi>
$ cd /home/kasutaja
$ mkdir openssl
$ cd openssl
$ wget https://kodu.ut.ee/~alop/openssl.cnf
$ mkdir certs crl newcerts private
$ echo $(date +%s) > serial
$ touch index.txt
Kus <perenimi>
asenda enda perenimega ilma <
ja >
märkideta. Nende käskude tulemusena loodi mitu tühja kausta, mida edaspidiselt kasutatakse sertifikaatide loomisel erinevate failide hoidmiseks. echo $(date +%s) > serial
käsuga luuakse unikaalne serial, mis juhendi teisel korral läbitehes (neil kellel tekivad vead) tekitab meile suurema serial-numbri kui esimesel korra.
Järgnevalt peame seadistama sertifikaadi loomise parameetrid openssl.cnf
failis.
- Muutke
openssl.cnf
faili kaustas/home/kasutaja/openssl
: - Leidke üles
[alternate_names]
sektsioon ja seal all asendage<perenimi>
oma perekonna nimega (Vajadusel lihtsustage oma nimekuju, kasutades ainult ladina tähti):
DNS.0 = *.<perenimini>.sec
DNS.1 = <perenimi>.sec
DNS.2 = www.<perenimi>.sec
DNS.3 = mail.<perenimi>.sec
- Salvestage muudatused
2. Enda signeeritud (Self-signed) sertifikaat
Nüüd teete enda signeeritud sertifikaadi, mida ükski teine osapool ei kontrolli ega allkirjasta.
Kontrollige, et hetkel aktiivne töökataloog oleks /home/kasutaja/openssl
ning aktiivne kasutaja on "kasutaja"!
Sertifikaadi tegemisel kasutate võtmesõna x509, mis on Rahvusvahelise Telekommunikatsiooni Liidu (ITU-T) poolt loodud standard ning käsitleb avaliku võtme infrastruktuuris kasutatavaid digisertifikaate.
$ openssl req -config /home/kasutaja/openssl/openssl.cnf -new -x509 -out sscert.pem
Pärast käsu sisestamist küsitakse teilt parooli, millega hakatakse kaitsma salajast võtit. Parool peab olema vähemalt nelja sümboli pikkune ning teil tuleb see parool meelde jätta.
Pärast parooli sisestamist tuleb teil kanda info sertifikaadile (enamike küsimuste korral võite ENTER
klahviga kinnitada vaikevalikud, mille olime eelnevalt openssl.cnf
failis seadistanud).
Oluline on Common Name
väärtuseks sisestada korrektne arvuti nimi (<perenimi>.sec). <perenimi>.sec tähistab järgnevates käskudes teie arvuti nime (hostname), mis peab olema igal pool olema sama ja võiks olla teie perekonnanimi ning lõppu lisage .sec
. Igal arvutil peaks olema unikaalne nimi, nt teie perekonnanimi, kontrollige arvuti nime failidest /etc/hostname ja /etc/hosts):
Common Name (eg, YOUR name) [] = <perenimi>.sec
Uurige loodud sertifikaati:
$ openssl x509 -text < sscert.pem | less
3. Apache veebiserver ja SSL
Järgnevalt paigaldame ja seadistame levinud Apache veebiserverit kasutama meie varasemlt loodud sertifikaati.
Apache konfiguratsioonifailid asuvad kaustas /etc/apache2
ning võimaldavad seadistada paljusid funktsionaalsusi (lisamoodulid, virtuaalserverid).
Kaust sites-available
sisaldab veebilehtede konfiguratsioonifaile. Selleks, et neid tegelikult lubada, tuleb teha link kausta sites-enabled
. Konfiguratsioonifaile võib ka otse kopeerida, kuid korduste vältimiseks tuleb teha link. Lingi saab teha ln
käsuga, kuid sõltuvuste kontrolliks on parem kasutada spetsiaalseid Apache ümberseadistamise käske (informatiivne, ärge neid praegu sisestage):
# a2ensite site-name (aktiveerib virtualhosti) # a2dissite site-name (deaktiveerib virtualhosti) # a2enmod mod-name (aktiveerib mooduli) # a2dismod mod-name (deaktiveerib mooduli)
Installeerige Apache veebiserver ja konfigureerige see SSL-i kasutama (<perenimi>.sec
on taas teie arvuti nimi):
$ sudo apt update #(soovitav kasutada alati enne installeerimist) $ sudo apt install apache2 $ sudo a2enmod ssl $ sudo a2enmod cgi - lisage /etc/apache2/apache2.conf faili lõppu (enne "IncludeOptional sites-enabled/" rida) järgnev rida: ServerName <perenimi>.sec $ sudo service apache2 restart $ sudo service apache2 status
Apache uuestikäivitamise ajal ei tohi ühtegi viga tulla. Kui siiski tuleb siis parandage, kuni enam ei ilmu. Apache staatust soovitame kontrollida pärast igat Apache restarti. See aitab veenduda, et teenus käivitus ilma probleemideta.
NB! Apache veateateid saab täpsemalt uurida logi failist asukohas: /var/log/apache2/error.log
!
Looge uus ssl
nimeline kaust Apache
kausta sisse ning kopeerige sinna oma sertifikaat ja salajane võti:
$ sudo mkdir /etc/apache2/ssl $ cd /home/kasutaja/openssl $ sudo cp sscert.pem /etc/apache2/ssl/server.crt $ sudo cp privkey.pem /etc/apache2/ssl/server.key
Muutke Apache SSL virtuaalhosti konfiguratsioonifaili /etc/apache2/sites-available/default-ssl.conf
. Lisage järgmine rida (näiteks kohe pärast ServerAdmin webmaster@localhost
rida):
ServerName <perenimi>.sec:443
kus <perenimi>.sec on teie arvuti nimi ja seadistage sertifikaadi ja võtme asukohad korrektseks:
SSLCertificateFile /etc/apache2/ssl/server.crt SSLCertificateKeyFile /etc/apache2/ssl/server.key
Nüüd lülitage Apache virtuaalhosti SSL tugi sisse:
$ sudo a2ensite default-ssl $ sudo service apache2 restart
Apache peaks nüüd käivitamisel küsima salajase võtme parooli. Kindlasti kontrollige, et Apache läks korrektselt tööle (vihje: kontrollige teenuse staatust).
NB! Kuna Apache küsib parooli, siis arvuti taaskäivitamisel Apache enam automaatselt tööle ei lähe. Arvuti uuesti käivitamisel jääb protsessitabelisse ps -A
ripakile parooliküsimine. (/bin/bash /usr/share/apache2/ask-for-passphrase <perenimi>.sec:443 RSA
) Seetõttu tuleb hiljem arvuti taaskäivitamisel Apache protsess kill käsuga seisata ja Apache teenus uuesti käivitada käsitsi: sudo service apache2 start
Testige jooksva süsteemi sertifikaadi olemasolu allpool oleva 'openssl s_client
' käsu abil: (parandage kuni vigu ei esine ja saate teha GET /
päringu)
$ openssl s_client -host <perenimi>.sec -port 443 -showcerts
Käivitage Firefox
veebibrauser ja avage oma masinas veebiserveri lehekülg: https://<perenimi>.sec/
. Veebibrauser peaks sertifikaadi üle kurtma. Vali Advanced
-> Accept the Risk and Continue
Pärast veebibrauseri taaskäivitust ei tohiks sertifikaadi üle enam kaebusi tekkida, kuid veebilehtiseja kuvab endiselt hoiatust veebilehe turvalisuse osas.
Uurige Firefox veebibrauseris aktiivseid seritifikate (Rakenduse menüü
-> Settings
-> Privacy & Security
-> Certificates
-> View Certificates
-> Servers
) - leidke sealt enda loodud sertifikaat. Nüüd kustutage see sertifikaat.
Nüüd kustutage ka varasemalt loodud sertifikaat ja võti: (kontrolli, et oled "kasutaja")
$ cd /home/kasutaja/openssl $ rm privkey.pem sscert.pem $ sudo rm /etc/apache2/ssl/*
4. Sertifitseerimisorgan - Certification Authority (CA)
Sertifitseerimisorgan on usaldatav kolmas osapool, kelle ülesanne on verifitseerida asutuste ja süsteemide sertifikaate. Sertifitseerimisorgan kontrollib üle sertifikaadi taotleja (asutuse või isiku) identiteedi ning allkirjastab väljastatava sertifikaadi kinnitamaks, et see sertifikaat on sertifitseerimisorgani poolt üle kontrollitud ja usaldatud.
Nüüd tehke sertifikaadi loomine uuesti läbi, aga seekord loote lisaks ka sertifitseerimisautoriteedi sertifikaadi ning kasutate seda veebilehe sertifikaadi allkirjastamiseks.
Tekitage sertifitseerimisorgani (Certification Authority, CA) sertifikaat. Common Name
väärtuseks määrake Sertifitseerimiskeskus
(parooliks pange caparool
)
$ openssl req -new -x509 -days 3650 -keyout /home/kasutaja/openssl/private/cakey.pem -out /home/kasutaja/openssl/cacert.pem -config /home/kasutaja/openssl/openssl.cnf
Nüüd lisage loodud sertitseerimiskeskuse sertifikaat Firefox usaldatud sertifitseerimiskeskuste nimekirja. Selleks tuleb minna "Rakenduse menüü
-> Settings
-> Privacy & Security
-> Certificates
-> View Certificates
-> Authorities
-> Import..."
ja valida importimiseks cacert.pem
ning märkida, et usaldatakse selle sertitseerimiskeskuse poolt välja antud sertifikaate
(tehke linnuke kõigi (2) valiku juurde).
Kui see on tehtud, siis teie veebibrauser usaldab kõik antud sertifitseerimiskeskuse poolt väljastatud sertifikaate ning enam ei teki hoiatust. Kui keegi tahab tulevikus enda veebilehe / kodulehe jaoks usaldusväärset sertifikaati saada, siis peaks selle allkirjastama usaldusväärne sertifitseerimiskeskus. Enamasti küsivad suured sertifitseerimiskeskused sertifikaadi allkirjastamise eest raha, aga teatud tingimustel on võimalik saada ka tasuta allkirja. Seda võimalust pakub näiteks Let's Encrypt.
Järgmise sammuna tekitage enda veebilehele uus sertifikaadipäring. Selle loomisel peaks parooliks seadistama serveriparool
ning Common Name
väärtuseks panema kindlasti: <perenimi>.sec
(ehk hostname)
$ openssl req -new -keyout newkey.pem -out newreq.pem -days 1095 -config /home/kasutaja/openssl/openssl.cnf
(ignoreerige (s.t. jäta tühjaks) "extra" attributes - challenge password ... )
Kasutades CA võtit väljastage sertifikaat (minge selle jaoks openssl kausta, sest siis on kõik vajalikud failid samas kaustas):
$ openssl ca -config /home/kasutaja/openssl/openssl.cnf -policy policy_anything -out newcert.pem -infiles newreq.pem
Eelmise käsu käivitamisel küsitakse teilt cacert.pem
faili parooli, milleks eelnevalt seadistasime caparool
Kopeerige uued sertifikaadid Apache kausta:
$ sudo cp newcert.pem /etc/apache2/ssl/server.crt $ sudo cp newkey.pem /etc/apache2/ssl/server.key $ sudo cp cacert.pem /etc/apache2/ssl/cacert.crt
Seadistage failis /etc/apache2/sites-enabled/default-ssl.conf
SSLCACertificateFile
järgmine direktiiv ja eemaldage selle rea eest ka kommentaari märgistus #
SSLCACertificateFile /etc/apache2/ssl/cacert.crt
Tehke Apache teenusele taaskäivitus:
- Apache küsib nüüd käivitades serveri sertifikaadi parooli milleks eelnevalt seadistasime
serveriparool
$ sudo service apache2 restart
- Testige uuesti
s_client
abil,$ openssl s_client -host <perenimi>.sec -port 443 -showcerts
- Testige uuesti
veebibrauseriga
.- Nüüd ei tohiks veebilehitseja enam sertifikaadi üle kurta. Kui kurdab kontrollige eelnevaid tegevusi enne edasi minemist.)
5. Seadistame Apache sertifikaadi infot väljastama
Lisage / Muutke väärtused / Kommenteerige sisse (s.t. eemaldage kommentaar) failis /etc/apache2/sites-enabled/default-ssl.conf
järgmised read:
SSLVerifyClient optional SSLVerifyDepth 2 SSLOptions +StrictRequire <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars +ExportCertData </FilesMatch>
Tehke Apache teenusele veel üks taaskäivitus.
Tekitage (rooduna) CGI skript $ sudo nano /usr/lib/cgi-bin/env.cgi
järgmise sisuga:
#!/bin/bash cat <<EOF Content-type: text/html <html> <pre> `env` </pre> </html> EOF exit 0
Pange chmod
abil sellele skriptile ka execute bitt kõigile kasutajatele
$ sudo chmod +x /usr/lib/cgi-bin/env.cgi
Testige, et see töötab veebibrauseri kaudu (https://<perenimi>.sec/cgi-bin/env.cgi). Leht peaks väljastama info brauseri kasutaja töökeskkonna kohta.
6. Kliendisertifikaat
Selles ülesandes vaatame, kuidas lisaks veebiserverile on võimalik ka kasutajale sertifikaat luua ning seda kasutaja autentimisel kasutada. Igapäevaselt puutute te kliendisertifikaadil põhineva autentimisega kokku, kui te kasutate autentimiseks ID-kaarti või Mobiil-ID-d. Kliendisertifikaadi kasutamist illustreeritakse järgneval joonisel:
Järgmiseks ülesandeks ongi kliendisertifikaadi genereerimine. Kontrollige, et asute töökataloogis /home/kasutaja/openssl
ning seejärel kontrollige, et olete õige "kasutaja" õigustes. Kopeerige ridasid ühekaupa!
Kliendi Common Name
on nüüd füüsilise isiku nimi ehk teie enda Eesnimi Perenimi.
Klient tekitab sertifikaadi taotluse ja Common Name
väljale peab kirjutama enda täisnime
(ilma täpitähtedeta) ja Email Address:
võiks olla eesnimi.perenimi@ut.ee
. Parooliks võiksite määrata kliendiparool
.
$ openssl req -new -keyout klientkey.pem -out klient.pem -days 360 -config /home/kasutaja/openssl/openssl.cnf
Klient "saadab" taotluse CA-le (fail klientkey.pem) ning selle põhjal genereerib CA kliendile sertifikaadi, allkirjastab selle ja "saadab" tagasi kliendile (klientcert.pem). Järgnev käsk küsib jälle CA sertifikaadi parooli milleks eelnevalt seadistasime caparool
$ openssl ca -config /home/kasutaja/openssl/openssl.cnf -policy policy_anything -out klientcert.pem -infiles klient.pem
Klient konverteerib sertifikaadi veebibrauseri jaoks sobivasse PKCS#12 formaati. Järgnevalt küsitakse teie käest ekspordi parooli (nüüd võiksite parooliks seadistada samuti kliendiparool
), hiljem brauserisse kliendisertifikaati importides kirjutage parooliväljale seega eelnevalt seadistatud kliendiparool
:
$ openssl pkcs12 -export -in klientcert.pem -inkey klientkey.pem -certfile cacert.pem -name "KliendiSert" -out kliendisertifikaat.p12
Importige sertifikaat (kliendisertifikaat.p12
) brauserisse (Rakenduse menüü
-> Settings
-> Privacy & Security
-> Certificates
-> View certificates
-> Your Certificates
-> Import...
)
Pange brauser kinni ja siis uuesti käima. Avage veebibrauseris uuesti https://<perenimi>.sec/cgi-bin/env.cgi
lehekülg. CGI väljundisse peaks ilmuma info kliendiserdilt.
Korrake CA sertifikaadi
ja kliendisertifikaadi
lisamise tegevust Google Chrome veebilehitsejas (CA sertifikaat tuleb importida esimesena). Chrome saab linux'is paigaldada käsuga sudo apt install chromium-browser
. Kui Chrome ei näita (rohelist, korrektset) https-i, siis tasub ka Chrome sertifikaatide nimekirjas anda org-University of Tartu
usaldus (sertifikaatide nimekiri
-> Authorities
-> org-University of Tartu
-> kolme punkti koolon paremal
-> edit
-> lisada usaldus ja kasutus
-> taaskäivitage Chrome
).
- Ülesanne 1: Praktikumi ülesande lahenduseks esitage täissuuruses ekraanivaade virtuaalmasina
https://www.<perenimi>.sec/cgi-bin/env.cgi
leheküljestFireFox
veebilehitsejas jahttps://mail.<perenimi>.sec/cgi-bin/env.cgi
Google Chromium
browseris. Lahenduselpeab kindlasti näha ja esile tõstetud
(märgistatud) olemaSSL_CLIENT_S_DN=
rida, mis peab sisaldama teie kliendisertifikaadis leiduvaid kliendi kohta käivaid andmeid (teie ees- ja perekonna nime).
Korrektne lahendus peaks sarnanema järgneval pildil kujutatule:
Veebilehe sertifikaadi kontrollimine
Järgnevalt tutvume https://www.valimised.ee veebisertifikaadiga ning kontrollime vastava lehekülje autentsust. Selleks minge veebilehele https://www.valimised.ee/et/e-haaletamine/e-haaletamise-juhised/valijarakendused-ja-usaldusvaarsuse-kontrollimine ja laadige sealt alla fail: kontrollnumbrid-RK_2023.asice
. Avage digiallkirjastatud konteiner ning seal sees olev dokument.
Leidke failist järgine osa:
Veebiserver: https://www.valimised.ee Sertifikaadi SHA256 sõrmejälg: B6 76 48 6E 52 8A E2 1C D3 8F BC F9 2C 88 3C F8 EC C3 88 C8 83 02 31 43 19 5B BD EB 4F B8 2F B7
Nüüd minge enda veebilehitsejas leheküljele https://www.valimised.ee ja avage seal sertifikaadi info. Kontrollige, kas valimsied.ee kasutatv sertifikaat ühtib digiallkirjastatud dokumendis olevate andmetega?
7. Seansikaaperdus
Käesoleva nädala praktikumi ülesandeks on läbi viia Cookie hijacking
- eesti keeles "küpsise vargus" (http://www.vallaste.ee) või "brauserikoogi näppamine" (https://akit.cyber.ee)
Küpsis
- Internetis tähendab see sõna väikest andmeplokki (tekstifaili), mille veebiserver saadab teie veebibrauserile ja mis salvestatakse teie arvuti kõvakettale. Edaspidi iga kord, kui brauser pöördub uuesti sama veebisaidi poole, saadab ta sinna ka küpsise. Sõltuvalt küpsise tüübist ja brauseri seadetest võib brauser küpsise vastu võtta või sellest keelduda. Kasutaja saab ka ära määrata, kui kaua küpsis kõvakettal säilitatakse. Informatsioon, mida küpsised sisaldavad, võib olla näiteks sisselogimise või registreerimise info, ostukorv veebi-kaupluses, kasutajavalikute menüü vms. Kui veebiserver saab brauserilt küpsist sisaldava infonõude, siis kasutab server küpsisesse salvestatud andmeid ja saadab nende alusel just teile sobivat informatsiooni. Küpsiseid hoitakse töö ajal tavaliselt ajutistes (TEMP) failides ja kui te brauseri välja lülitate, siis küpsised kas kustutatakse või salvestatakse kõvakettale (kui nende "aegumistähtaeg" pole veel kätte jõudnud). Küpsised ei loe informatsiooni teie kõvakettalt ega saada teie elulugu "pädevatele organitele". Küll aga võib küpsiseid saatva veebilehe omanik kasutada neid andmekaevandamiseks ja müüa kogutud andmeid kolmandatele osapooltele. Küpsised kuuluvad nn hallvara hulka, mis ei ole otseselt ohtlik, aga võib siiski ebamugavusi tekitada. Näiteks võib teie postkasti hakata saabuma ohtrasti soovimatut reklaami. Sellepärast analüüsivad viirusetõrjeprogrammid lisaks viirustele ja ussidele ka küpsiseid ja pakuvad kasutajale võimalust ise otsustada, millised küpsised alles jätta ja millised kustutada. Küpsised on oma nime saanud Ameerikas populaarsete õnneküpsiste (fortune cookie) järgi. Küpsiste valmistamise ajal pannakse mõne küpsise sisse paberitükike, millele on rikkust, õnne vms ennustavad kirjaread. http://www.vallaste.ee/
Eesmärk: Läbi viia edukas seansikaaperdusrünne https://courses.cs.ut.ee ja https://ois2.ut.ee lehtede vastu.
Ülesanne: Logi sisse enda põhiarvutis Mozilla Firefox
veebilehitsejas (võite kasutada ka muud brauserit peale Google Chrome'i) lehele https://courses.cs.ut.ee ja https://ois2.ut.ee ning tutvu enda küpsiste infoga. Selleks vajuta veebilehitsejas klaviatuuri nuppu F12
mis avab teile täiendavate tööriistade menüü (nn. Web Developer Tools). Avanenud aknas vali Storage
-> Cookies
ja otsi üles rida COURSESSID
sealt kopeeri sinu courses sessiooni võti (nn küpsise info).
Järgnevalt mine Linux Mint virtuaalmasinas Chromium
veebilehitsejas lehele https://courses.cs.ut.ee ( NB! ära logi veel sisse) ja vajuta uuesti F12
-> (>>
menüü) -> Application
-> Cookies
ning otsi üles kirje COURSESSID
, mille väärtus kopeeri enda masina Firefox
veebilehitsejast. Tee lehele värskendus - F5
ja veendu, et nüüd oled kenasti virtuaalmasinas ilma parooli sisestamata https://courses.cs.ut.ee lehele sisse loginud. Kui ei ole sisse loginud ainult COURSESSID
väärtuse kopeerimisega kontrollige, et ka parameeter SERVERID
oleks sama web1
või web2
jne (coursesel on mitu serverit ja oluline on, et sa autendiksid sama vastu).
Tulemus: Tehke ekraanipilt õnnestunud küpsise kopeerimisest FireFox veebilehitsejast Andmeturve Virtuaalmasina Chrome (Chromium) veebilehitsejasse https://courses.cs.ut.ee veebilehel.
Näidislahenduse pilt (ootame vastuseid sarnases formaadis):
Korda tegevust https://ois2.ut.ee lehel. Vihje: ÕIS2
kasutab cookie asemel Local Storage
-> jwt
nimelist kirjet sessiooni tuvastamiseks. Linux Mint Chromiumis tuleb kirje teil ise luua õige väärtusega. 2023 kevad Linux Mint Chromium
versioonis esineb viga, mille tulemusena vahepeal lehe külastamisel ei lubata sellele uusi Local Storage
ja Cookie
väärtusi lisada. Selle lahenduseks aitab enamasti Chromium sulgemine ja uuesti avamine.
- Ülesanne 2:
https://courses.cs.ut.ee
jahttps://ois2.ut.ee
veebilehtede ekraanipildid eduka seansikaaperdamisest vastavalt juhendile (näidislahendusele). Identifitseerimise võti peab olema pildil nähtav ja kattuma põhimasinas ja virtuaalmasinas (võti võib turvakaalutlustel olla osaliselt varjatud).
Esitada Praktikum4:
Praktikumi ülesannete lahendamine annab neli punkti ja esitamiseks on umbes kaks nädalat alates praktikumi toimumisajast ( kuni 16. märts tähtajani).
- Ülesanne 1: Praktikumi ülesande lahenduseks esitage täissuuruses ekraanivaade virtuaalmasina
https://www.<perenimi>.sec/cgi-bin/env.cgi
leheküljestFirefox
veebilehitsejas ja https://mail.<perenimi>.sec/cgi-bin/env.cgiChromium
brauseris. Ekraanivaatelpeab kindlasti olema näha ja esile tõstetud
(märgistatud olema)SSL_CLIENT_S_DN
rida, mis peab sisaldama teie kliendisertifikaadis leiduvaid kliendi kohta käivaid andmeid (teie ees- ja perekonna nime). - 3p (Apache + selfsigned sertificate 1p, CA sertficate 1p, kliendisertifikaat 1p) - Ülesanne 2a:
https://courses.cs.ut.ee
veebilehtede ekraanipildid eduka seansikaaperdamisest vastavalt juhendile (näidislahendusele). Identifitseerimise võti peab olema pildil nähtav ja kattuma põhimasinas ja virtuaalmasinas (võti võib turvakaalutlustel olla osaliselt varjatud). - 0.5p - Ülesanne 2b:
https://ois2.ut.ee
veebilehtede ekraanipildid eduka seansikaaperdamisest vastavalt juhendis olevatele vihjetele. Identifitseerimise võti peab olema pildil nähtav ja kattuma põhimasinas ja virtuaalmasinas (võti võib turvakaalutlustel olla osaliselt varjatud). - 0.5p
Lisamaterjalid
- OpenSSL
- Self-signed sertifikaat
- Muud