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ä):

  1. C --> S:   "ClientHello": millaisia algoritmeja C:llä on käytettävissä.
  2. S --> C:   "ServerHello": minkä symmetrisen salausalgoritmin, moodin, hash-funktion ja kompressioalgoritmin S on valinnut - tai ilmoittaa kättelyn epäonnistumisesta.
  3. S --> C:   S:n julkisen avaimen sertifikaatti (kaikki sertifikaatit juurivarmentajan myöntämään asti)
  4. [ S --> C:   Pyytää C:n sertifikaattia. ]
  5. [ C --> S:   sertifikaatti - tai "no certificate", johon S reagoi lopettamalla, jos niin haluaa. ]
  6. C --> S:   Alustava symmetrinen avain k RSA:lla salattuna.
  7. 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)
  8. 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
  • Capture/Start

-


HTTPS käyttöönotto Ubuntussa

Ubuntu 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

  1. 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
  2. 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
  3. 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.
    • Kokeiluvaiheessa

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