Ari Rantala -> Oppaat [Viimeksi muutettu 18.2.2018 ]
10 . HTTPS: SSL-suojatut http-yhteydet
SSL: Mikä? Miksi?
- Ongelma: HTTP-liikenne salaamatonta eli
selväkielistä
- Sopivat olosuhteet: liikennettä on helppo salakuunnella -> Siirrettyjen sivujen sisältö,
syötetyt tunnukset ja salasanat voivat joutua
väärän tahon
tietoon.
- Ratkaisu: HTTPS: "HTTP over Secure
Sockets Layer"
- SSL (Secure Socket Layer) [Netscape 1994]. Pohjana 1980-luvulla kehittetty ISO X.509-varmennestandardi
- Yleistyi paremman puutteessa valtavalla nopeudella
- Uusin versio SSLv3
- TLS (Transport Layer Security): Internet Engineering
Task Force:n (IETF) standardoima versio SSLv3:stä
HTTPS -> Pyyntö TCP-porttiin 443
-
Asiakas käyttää SSL-suojattua yhteyttä
käyttämällä URL:ssa protokollana https:ää
esim.
https://www.domain.invalid/
osoiteen http://www.domain.invalid/ sijaan. Tällöin
SSL:n
osaava asiakas (Web-selain) lähettää https-pyynnön
oletusarvoisesti palvelimen TCP-portiin 443.
SSL perustuu varmenteisiin
- SSL
sisältää salauksen lisäksi menetelmän, jonka
perusteella
selain voi varmistaa (luottamaltansa taholta), että keskustelee
juuri
sen palvelimen kanssa, jonka kanssa luuleekin keskustelevansa.
- SSL varmistaa tiedonsiirron luottamuksen, eheyden ja osapuolten todentamisen
varmenteiden eli sertifikaattien avulla.
- Luottamus: "tiedot, järjestelmät ja palvelut ovat vain niihin oikeutettujen
saatavissa eikä niitä luvatta paljasteta tai muutoin saateta sivullisten
tietoon." [http://www.ficora.fi/index/palvelut/palvelutaiheittain/tietoturva.html]
- Eheys: "etteivät tiedot, järjestelmät tai palvelut ole laitteisto- tai
ohjelmistovikojen, luonnontapahtumien tai oikeudettoman inhimillisen
toiminnan seurauksena muuttuneet tai tuhoutuneet." [http://www.ficora.fi/index/palvelut/palvelutaiheittain/tietoturva.html]
- Osapuolten todentaminen:
" (autentikointi) tarkoitetaan osapuolten (henkilö tai järjestelmä)
luotettavaa tunnistamista. Todentamisella viitataan yleensä kohteen
ominaisuuksiin, esimerkiksi siihen, mitä kohteella on hallussaan"
[http://www.ficora.fi/index/palvelut/palvelutaiheittain/tietoturva.html]
Salausmenettelyjä
Symmetrinen salaus
- Yhteinen sovittu salasana, jota käytetään
salaamiseen ja purkamiseen
- DES, Blowfish
Asymmetrinen salaus
- Eri avaimet: Salaus: Julkinen, Purku: yksityinen
- Viestin salaajakaan ei siis voi normaalisti purkaa
salaamaansa
viestiä (koska vastaanottajan yksityinen avain ei ole tiedossa).
- Täsmälleen yksi julkinen / yksi yksityinen avain
- Hitaita: Käytetään vain symmetrisen avaimen
siirtoon.
- Avaimenvaihtomenettelyllä symmetrinen salausavain
siirretään salaamalla se julkisella avaimella. Salausavaimen
salaus puretaan yksityisellä avaimella.
- Vaatii:
- Luottamus julkiseen avaimeen: Varmenneviranomainen
varmentaa
- Yksityinen avain vain oikean omistajan hallussa
- Ongelma: Luottamus julkiseen avaimeen (joku tarjoaa
välistä omaa, purkaa, tallentaa datan, salaa lopullisen
kohteen julkisella). Avaimen sormenjälki (fingerprint) on
tarkistussumma avaimesta, jota *luotettavalla* tavalla
kysymällä voidaan varmistua avaimen oikeellisuudesta.
- Käytetään myös nimitystä: Julkisten avainten salaus (PKI = Public Key
Infrastructure)
- RSA
SSL tarkemmin
- SSL: TCP-protokollan päällä ja HTTP:n alla
-> Myös URLit ja HTTP-otsakkeet suojattuja. (Huom:
SSL:ää voi käyttää muidenkin sovellustason
protokollien kanssa).
- asymmetrinen salaus avainten vaihdossa (esim. RSA)
- symmetrinen salaus yhteyden salauksessa (esim. DES)
- Tarkistussumma: tiivistefunktioiden laskennassa (esim.
MD5)
- Todennus: Alkuperän kiistämättömyys
- Liikenteen salaus ja eheys -> luottamuksellisuus
Varmenne eli sertifikaatti
Sähköinen aitoustodistus, jolla myöntäjä (CA)
takaa (ja allekirjoittaa) kohteen ilmoittamat tiedot oikeiksi.
Sisältää
- Julkinen salausavain
- tiedot palvelimesta, jolle sertifikaatti on myönnetty
(kenelle avain kuuluu)
- kolmannen osapuolen (esim. Thawte, Verisign, Entrust)
allekirjoituksen, jolla varmistetaan että palvelimen
pitäjä on se mikä väittää olevansa.
Hyödyt
- Ei salasanoja selväkielisinä verkkoon
- Yleensä vaivaton käyttäjälle
- Selaimissa tiedot selainvalmistajien luotettavina
pitämistä varmenneviranomaisista.
CA (Certificate Authority)
- Varmenneviranomainen: Molempien viestivien osapuolien
luotettavaksi hyväksymä.
- Varmenteen voi allekirjoittaa tietyissä
käyttötarkoituksissa myös itse. Ongelma: Kuka luottaa?
Varmennepyyntö (CSR = Certificate Signing Request)
- osoitetaan esim. CA-taholle allekirjoitusta varten.
Pyynnön
mukana toimitetaan palvelimen julkinen avain.
Lisätietoa
Loppuhuomautuksia
- Varmenne on palvelinkohtainen: Nimetylle palvelimelle ja
IP-osoitteelle
- Selaimiin tallennettu valmiit listat luotetuista
varmentajista mm. Thawte, Verisign, Entrust, ...
- Firefox: Preferences/Advanced/View Certificates/Authorities
- Jos varmenteen myöntäjän tiedot puuttuvat
selaimesta -> Virheilmoitus -> Hylkää, Hyväksyn
tilapäisesti, hyväksyn pysyvästi. Näihin
törmätään yleisesti itselle myönnettyjen
varmenteiden kanssa. Virheilmoitukset nykyään yhä
hankalampi ohittaa (mm. Firefox 3)
- HTTP-liikenne voidaan salata SSL:llä vaikka varmenteen
luotettavuutta ei pystyttäisikään todentamaan
- Tavallisesti varmentajat tarkistavat vain, että
nimetty palvelin toimii ilmoitetusta IP-osoitteessa
- Kalliimpaa EV-varmennetta (Extended Validation) varten
hakijan taustat selvitetään perusteellisemmin, mutta ne
eivät ole toistaiseksi (2008) yleistyneet.
- Sulkulistat
- Tavallisesti varmenteet
vanhenevat yhdessä tai kahdessa vuodessa
- OCSP-menettelyllä (Open Certificate Status Protocol)
selaimet voivat pitää automaattisesti kirjaa vanhentuneista
varmenteista (joita ei siis hyväksytä enää
umpeutumisen jälkeen)
- Firefox >3 ja IE >7 tukevat OCSP:tä oletusarvoisesti.
SSL: Lisätietoa
Toiminta
SSL rakentaa yhteyden asiakasohjelman (selaimen) C ja
palvelimen
S välille suurinpiirtein seuraavasti (C:n autentikoimiseksi
tehtävät vaiheet 4 ja 5 ovat vapaaehtoisia -
eivätkä kovin yleisiä):
- C --> S: "ClientHello": millaisia algoritmeja
C:llä on käytettävissä.
- S --> C: "ServerHello": minkä symmetrisen
salausalgoritmin, moodin, hash-funktion ja kompressioalgoritmin S on
valinnut - tai ilmoittaa kättelyn epäonnistumisesta.
- S --> C: S:n julkisen avaimen sertifikaatti
(kaikki sertifikaatit juurivarmentajan myöntämään
asti)
- [ S --> C: Pyytää C:n sertifikaattia.
]
- [ C --> S: sertifikaatti - tai "no certificate",
johon S reagoi lopettamalla, jos niin haluaa. ]
- C --> S: Alustava symmetrinen avain k RSA:lla
salattuna.
- C --> S ja S --> C: Ilmoitukset
valmiudesta
ottaa käyttöön symmetrinen salaus k:sta lasketulla
istuntoavaimella (avaimen laskennassa on mukana
myös "Hello"-viesteissä esiintyneitä satunnaislukuja)
- C --> S ja S --> C: Kättelyn
lopetussanoma, jossa on tiiviste kaikesta edelläolevasta (paitsi
vaiheesta 7, joka ei oikeastaan kuulu kättelyyn, mutta
mahdollistaa
silti lopetussanoman salaamisen, jolloin kukaan muu ei pääse
laskemaan uutta tiivistettä peukaloimistaan aiemmista
viesteistä).
Tämän jälkeen alkaa varsinaisen sovelluksen viestien
vaihto.
Yhteenveto
- Haluan lähettää salatun viestin
- tarvitaan yhteinen salausavain
- Salausavain välitetään
avaintenvaihtoprotokollalla
- tiedettävä vastapuolen julkinen avain
- Vastapuoli lähettää julkisen avaimensa
yhteyden alussa varmenteessa
- tiedettävä kuuluuko julkinen avain vastapuolelle
- Varmenteessa on digitaalinen allekirjoitus
- luotettava allekirjoituksen tekijän todistukseen
avaimen alkuperästä
- Tarkistetaan digitaalinen allekirjoitus allekirjoittajan
julkisella avaimella
Wireshark - verkkoliikenteen analysaattori
Edellä mainitun kättelymekanismin voi todentaa esim.
wireshark-ohjelmalla.
Asentaminen:
sudo apt install wireshark libpcap0.8
==> Asennusohjelma esittämään kysymykseen vastaa Yes:
Should non-superusers be able to capture packets?
Jos haluat asennuksen jälkeen tehdä edellisen konfiguroinnin uudelleen, niin komenna:
sudo dpkg-reconfigure wireshark-common
--> Asennusohjelma lisäsi wireshark-ryhmän, lisätään nyt testi- käyttäjä ao. ryhmään ja tarkistetaan tulos:
sudo usermod -a -G wireshark testi grep "wireshark" /etc/group wireshark:x:133:testi
Ei ole ihan varmaa, tuleeko seuraavia asetuksia välttämättä tehdä, mutta niistä ei liene haittaakaan:
sudo setcap 'CAP_NET_RAW+eip CAP_NET_ADMIN+eip' /usr/bin/dumpcap
Lisäksi virheilmoituksen "Running wireshark “Lua: Error during loading”" saa pois editoimalla seuraavaa tiedostoa:
sudo nano /usr/share/wireshark/init.lua
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- ---- -- -- -- -- -- -- -- ... -- Alkuperäinen asetus kommentoituna: -- disable_lua = false disable_lua = true ... -- Alkuperäinen asetus kommentoituna: --run_user_scripts_when_superuser = false run_user_scripts_when_superuser = true ... -- Alkuperäinen asetus kommentoituna: --if running_superuser then if not running_superuser then ... -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- ---- -- -- -- -- -- -- --
Jotta kaikki annetut asetukset tulevat testi-käyttäjälle voimaan, on käyttäjän kirjauduttava uudelleen:
gnome-session-quit --logout --no-prompt
wireshark-ohjelman käynnistys:
Applications/Internet/Wireshark
tai komentamalla
wireshark
tai komentamalla sudo wireshark
tai komentamalla gksudo wireshark (ensin asennettava sudo apt install gksu)
Verkkoliikenteen kuuntelun voit aloittaa esim. valitsemalla ensin enp0s3-liitännän
(virtuaalikoneen ensimmäinen ulkoinen verkkorajapinta) ja valitsemalla sitten
HTTPS käyttöönotto UbuntussaUbuntu Linuxin mukana seuraava Apache tukee
SSL:ää, mutta se ei ole oletusarvoisesti kytketty
käynnistymään. Ubuntussa Apachen saa tarjoamaan
https:ää seuraavasti:
1. Otetaan Apachen ssl-moduuli käyttöön
sudo a2enmod ssl sudo a2enmod headers
2. LIsätään virtuaalipalvelinmäärtitykset uudelle https:ää tarjoavalle virtuaalipalvelimelle
sudo a2ensite default-ssl
3. Otetaan määritykset käyttöön uudelleenkäynnistämällä Apache
sudo systemctl restart apache2.service
4. Tarkistetaan, että TCP-portti 443 on kuunnellussa tilassa
netstat -an | grep :443 tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 5. Testataan kirjoittamalla web--selaimeen osoite https://localhost/
ja hyväksymällä selaimen vaatimus itseallekirjoitetun sertifikaatin hyväksymisestä.
HTTPS: Käytön vaatiminen
Tarvittaessa tietyn hakemiston dokumenteille voidaan vaatia
SSL-suojattua yhteyttä Apachen direktiivillä
SSLRequireSSL
Tämä voidaan sijoittaa esim haluttuun Directory-lohkoon tai
.htaccess-tiedostoon. (Huom: AllowOverride AuthConfig vaaditaan). HTTPS:n saa vaadittua myös koko palvelimen osalta ohjeen https://www.digitalocean.com/community/tutorials/how-to-create-a-self-signed-ssl-certificate-for-apache-in-ubuntu-16-04 ohjeen "(Recommended) Modify the Unencrypted Virtual Host File to Redirect to HTTPS" mukaan.
Itse allekirjoitetun sertifikaatin tekeminen ja käyttöönotto
Käytössä oleva sertifikaatti ja yksityinen avain
Ubuntun Apachen HTTPS käyttää oletusarvoisesti järjestelmän
käyttöönoton yhteydessä luotua sertifikaattia (julkisine avaimineen) ja
yksityistä avainta. Nämä on määritelty tiedostossa /etc/apache2/sites-enabled/default-ssl.conf
SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
Uuden sertifikaatin ja yksityisen avaimen luominen ja käyttöönotto
1. Luodaan sertifikaatti ja yksityinen avain.
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/apache.key -out /etc/ssl/certs/apache.crt
Country Name (2 letter code) [AU]:FI State or Province Name (full name) [Some-State]:Keski-Suomi Locality Name (eg, city) []:JYVASKYLA Organization Name (eg, company) [Internet Widgits Pty Ltd]:TestiFirma Oyj Organizational Unit Name (eg, section) []:IT-osasto Common Name (e.g. server FQDN or YOUR name) []:localhost Email Address []:testi@localhost
2. Otetaan uusi sertifikaatti ja yksityinen avain käyttöön editoimalla tiedostoon /etc/apache2/sites-enabled/default-ssl.conf seuraavat muutokset
SSLCertificateFile /etc/ssl/certs/apache.crt SSLCertificateKeyFile /etc/ssl/private/apache.key
4. Uudelleenkäynnistetään web-palvelin
sudo systemctl restart apache2.service
5. Tarkista, että uusi sertifikaatti on käytössä lataamalla jokin sivun palvelimeltasi https://localhost ja katsomalla käytössä oleva sertifikaatti esim. Firefox-selaimessa:
Hiiren kakkospainike/View Page Info/Security/View Certificate
Kun luottamus pettää: Ongelmia SSL-varmenteissa
Tämä osio on tiivistelmä artikkelista [ Kun luottamus pettää; Hämäläinen Pertti, Tietokone-lehti 9/2011. Sivut 67-68]
- Varmentajien tietoturvaa ja toiminnan laatua ei valvo kukaan!
- 2011 lukuisia tietomurtoja varmentajiin => Koko järjestelmän turvallisuus kyseenalainen
- Väärennetyn varmenteen käyttö vaatii valepalvelimen toteuttamista:
- "Helppo": Yrityksen lähiverkossa
- "Helppo": julkisessa WLANissa
- Vaikea/Tuhoisampi: Internetoperaattorin nimipalvelimen kaappaus
- Valepalvelimen havaitsemiseen paljon ehdotuksia => Mikään ei ole lyönyt läpi (2011)
Tietomurtoja palvelinvarmentajiin 2011
- Hollantilainen Diginotar:
Murtautuja oli luonut ainakin 531 varmenetta julkisille
web-palvelimille ja pystyttänyt niiden turvin väärennettyjä
web-palvelimia, joiden avulla oli salakuunnellut ssl-suojattua
liikennettä. Kohteena mm. Google; ainakin noin 300 000 käyttäjää
pääosin Iranista oli kirjautunut Googlen palveluihin
valepalvelimen kautta. Diginotarin liiketoiminta päättyi.
- Comodo: Yhdeksän se nimissä väärenettyä varmennetta.
- Muutamia muitakin.
Liikaa varmentajia
- EFF-järjestön mukaan 651 varmentajaorganisaatioita 52 eri maasta.
- => paljon varmentajia => Monenlaista tietoturvan tasoa.
Ehdotuksia valevarmentajien paljastamiseksi
- Certificate Patrol Firefoxiin: raportoi aina uudesta sertistä; jos serti vaihtunut ja vanha ei ollut vielä umpeutunut aihetta epäluuloon jne.
- vaatii käyttäjältä paljon työtä aiheettomien huomatusten arvioimisessa
- Perspectives: palvelimen sertiä verrataan notaaripalvelinten samannimiseltä palvelimilta saamiin varmenteisiin
- notaaripalvelimia useita ympäri intenetiä: ne katsovat eri perspektiivistä tarkasteltavien palvelinten sertiä. jos tilanne ei näytä joka perspektiivistä samanlaiselta, on aihetta epäluuloon
- Kokeiluvaiheessa
- Convergence:
perspectives + notaarit kierrättävät käyttäjien kyselyt toisilleen
=> mikään notaari ei pysty yhdistämään kyselyn tehnyttä käyttäjää
hänen käyttämiinsä palveluihin.
Käyttäjänäkökulma: Mitä teen?
- Luotan varmentajien vakuutuksiin tietoturvan parantamisessa
- Varmistan, että käyttämäni järjestelmät ovat ajan tasalla (käyttöjärjestelmä, selaimet)
Linkit
https://www.digitalocean.com/community/tutorials/how-to-create-a-self-signed-ssl-certificate-for-apache-in-ubuntu-16-04
|