TLS ja SSL: salausprotokollien määritelmä, käyttö ja tietoturva
TLS ja SSL -opas: ymmärrä salausprotokollien toiminta, käyttö verkkopalveluissa ja parhaat tietoturvakäytännöt suojatun viestinnän varmistamiseen.
TLS-protokolla (Transport Layer Security) ja sen edeltäjä SSL (Secure Sockets Layer) ovat salausprotokollia, jotka tarjoavat tietoturvaa ja tietojen eheyttä TCP/IP-verkoissa, kuten Internetissä, tapahtuvassa viestinnässä. Protokollien eri versiot ovat yleisiä sovelluksissa, kuten web-selailussa, sähköpostissa, Internet-faksissa, pikaviestinnässä ja Voice-over-IP:ssä (VoIP).
Mitä TLS/SSL tekee ja miten se toimii
TLS/SSL tarjoaa kolme keskeistä suojausominaisuutta: salauksen (confidentiality), todennuksen (authentication) ja eheyden (integrity). Protokolla yhdistää epäsymmetristä kryptografiaa (sertifikaatit ja avaintenvaihto), symmetristä salausta (datayhteyden nopea salaus) sekä MAC-/tag-pohjaista eheystarkistusta. Yleinen toimintamalli (handshake) sisältää ainakin seuraavat vaiheet:
- ClientHello: asiakas ehdottaa protokollaversiota ja salausalgoritmeja.
- ServerHello: palvelin valitsee yhteensopivan version ja algoritmit.
- Palvelimen sertifikaatti lähetetään (todentaa palvelimen identiteetin), ja tapahtuu avaintenvaihto (esim. ECDHE), jonka perusteella luodaan symmetrinen istunta-avain.
- Session-lukitus eli "Finished"-viestit vahvistavat, että kädenpuristus onnistui.
- Sen jälkeen liikenne salataan symmetrisellä avaimella.
Erot TLS:n ja SSL:n välillä
SSL (erityisesti versiot SSLv2 ja SSLv3) on vanha ja tunnetusti haavoittuva; ne on käytännössä poistettu käytöstä moderneissa järjestelmissä. TLS on SSL:n jälkeläinen, ja sen versiot (TLS 1.0, 1.1, 1.2, 1.3) ovat parantaneet turvallisuutta ja suorituskykyä. Nykyinen suositus on käyttää vähintään TLS 1.2-versiota, ja mahdollisuuksien mukaan TLS 1.3:aa, joka lyhentää kädenpuristusta, poistaa vanhoja heikkoja algoritmeja ja parantaa yksityisyyttä.
Sertifikaatit ja julkisen avaimen infrastruktuuri (PKI)
TLS perustuu yleisesti x.509-sertifikaatteihin, jotka kertovat palvelimen (tai asiakkaan) identiteetin ja sisältävät julkisen avaimen. Sertifikaatit myöntävät luotetut varmenneviranomaiset (CA). Sertifikaatteja on eri tyyppisiä: itse allekirjoitetut (self-signed), CA-allekirjoitetut ja välitodentavat.
- Huomioi sertifikaatin voimassaoloaika ja ympäristökohtaiset tiedot (Common Name, SAN-kentät).
- Automaattiset järjestelmät kuten Let's Encrypt helpottavat ilmaisia ja automaattisia uusintaprosesseja.
- Sertifikaattien peruutus hoidetaan CRL:llä tai OCSP:llä; OCSP-stapling parantaa suorituskykyä ja yksityisyyttä.
Salausalgoritmit ja avaintenvaihto
Tärkeimpiä valintoja ovat avaintenvaihdon menetelmä (RSA, DHE, ECDHE), symmetrinen algoritmi (AES-GCM, ChaCha20-Poly1305) ja hajautusalgo (SHA-1, SHA-256). Nykykäytännössä suositellaan:
- ECDHE (ephemeral elliptic-curve Diffie–Hellman) avaintenvaihtoon, koska se tarjoaa perfect forward secrecy (PFS).
- AES-GCM tai ChaCha20-Poly1305 AEAD-algoritmeiksi tiedon salaamiseen ja eheyden varmistamiseen.
- Vältä vanhoja ja haavoittuvia algoritmeja kuten RC4, DES, 3DES ja SHA-1 sekä "export"-luokan ciphertut.
Tunnettuja haavoittuvuuksia ja historian ongelmia
- POODLE: hyökkäys SSLv3:een — johtanut SSLv3:n käytöstä poistamiseen.
- BEAST, CRIME ja BREACH: eri hyödyntöjä protokollan tai HTTP-kompression vuodoille.
- Heartbleed: OpenSSL:n muistivuoto joka paljasti palvelimien muistin sisältöä.
- DROWN, Logjam, FREAK ja muut heikotnes hyökkäykset, jotka hyödyntävät vanhoja protokollaversioita tai heikkoja ciphertut.
Parhaat käytännöt palvelimelle ja sovelluskehittäjälle
- Ota käyttöön ja pakota TLS 1.2 tai mieluummin TLS 1.3; poista käytöstä SSLv2, SSLv3 ja vanhat TLS 1.0/1.1-versiot.
- Priorisoi ECDHE-avaintenvaihto ja AEAD-cipherit (AES-GCM, ChaCha20-Poly1305).
- Käytä riittävän pitkiä avaimia: esimerkiksi vähintään 2048-bittinen RSA tai ECDSA:n tapauksessa sopiva käyrä (P-256/ P-384).
- Ota käyttöön HSTS (HTTP Strict Transport Security) suojaamaan aloituspysäyksiä HTTP→HTTPS siirtymissä.
- Ota käyttöön OCSP stapling, sertifikaattien automaattinen uusinta ja valvo uusimpia OpenSSL/LibreSSL/BoringSSL -päivityksiä.
- Vältä sertifikaattien kovakoodattua "pinnausta" ilman huolellista hallintaa; se voi aiheuttaa pysyviä palvelukatkoja virheellisten uusintojen yhteydessä.
Tarkistus- ja testityökalut
Palvelimen TLS-kokoonpanon testaamiseen ja luokitteluun käytetään mm.:
- Qualys SSL Labs — tarjoaa yksityiskohtaisen raportin ja arvosanan.
- openssl s_client — komentorivityökalu yhteyden muodostamiseen ja sertifikaattitietojen tarkasteluun.
- sslyze, testssl.sh ja Nmapin ssl-skriptit — automaattiseen skannaukseen ja haavoittuvuuksien etsintään.
TLS:n käyttökohteet ja rajoitukset
TLS suojaa tiedonsiirron sisällön, mutta ei välttämättä piilota kaikkea metatietoa. Esimerkiksi TCP-osoitteet sekä aiemmat TLS-versiot (ja SNI–Server Name Indication) voivat altistaa tiedon siitä, mihin palvelimeen yhteys muodostetaan. TLS 1.3 ja kehittyvät laajennukset pyrkivät parantamaan yksityisyyttä (esim. ECH - Encrypted Client Hello).
Yhteenveto käytännön neuvoina
- Hyväksy vain TLS 1.2/1.3, poista legacy-protokollat.
- Käytä ECDHE-pohjaista avaintenvaihtoa ja AEAD-salausta (AES-GCM tai ChaCha20-Poly1305).
- Huolehdi sertifikaattien hallinnasta, OCSP-staplingista ja automaattisesta uusinnasta.
- Seuraa ohjelmistopäivityksiä ja testaa kokoonpano säännöllisesti (esim. SSL Labs).
TLS/SSL on keskeinen osa turvallista verkkoviestintää. Oikein konfiguroituna se estää tiedon sieppauksen, manipuloinnin ja auttaa varmentamaan palvelinten identiteettiä — mutta sen turvallisuus riippuu sekä protokollaversion että valittujen algoritmien ja järjestelmäkäytäntöjen ajantasaisuudesta.
Kuvaus
TLS-protokollan avulla sovellukset voivat kommunikoida verkon yli tavalla, joka on suunniteltu estämään salakuuntelu, peukalointi ja viestien väärentäminen. TLS tarjoaa päätepisteen todennuksen ja viestinnän luottamuksellisuuden Internetissä salauksen avulla. Useimmiten vain palvelin todennetaan (eli sen henkilöllisyys varmistetaan), kun taas asiakas jää tunnistamatta. Tämä tarkoittaa, että loppukäyttäjä (joko henkilö tai sovellus, kuten verkkoselain) voi olla varma siitä, kenen kanssa se kommunikoi. Seuraava turvallisuustaso tunnetaan nimellä vastavuoroinen todennus. Vastavuoroinen todennus edellyttää julkisen avaimen infrastruktuurin (PKI) käyttöönottoa asiakkaille, ellei käytetä TLS-PSK- tai SRP-protokollaa (Secure Remote Password), jotka tarjoavat vahvan vastavuoroisen todennuksen ilman PKI:n käyttöönottoa.
Käyttö
SSL ja TLS ovat olleet laajalti käytössä useissa avoimen lähdekoodin ohjelmistoprojekteissa. Ohjelmoijat voivat käyttää SSL/TLS-toimintoihin OpenSSL-, NSS- tai GnuTLS-kirjastoja. Microsoft Windows sisältää SSL:n ja TLS:n käytön osana Secure Channel -pakettiaan. Delphi-ohjelmoijat voivat käyttää kirjastoa nimeltä Indy.
Standardit
Nykyinen hyväksytty versio on 1.2, joka on määritelty asiakirjassa:
- RFC 5246: TLS-protokollan versio 1.2": "The Transport Layer Security (TLS) Protocol Version 1.2".
Nykyinen standardi korvaa nämä aiemmat versiot:
- RFC 2246: "TLS-protokollan versio 1.0".
- RFC 4346: TLS-protokollan versio 1.1": "The Transport Layer Security (TLS) Protocol Version 1.1".
Muut RFC:t laajensivat TLS:ää myöhemmin, mukaan lukien:
- RFC 2595: "TLS:n käyttö IMAP:n, POP3:n ja ACAP:n kanssa". Määrittelee IMAP-, POP3- ja ACAP-palveluiden laajennuksen, jonka avulla palvelin ja asiakas voivat käyttää kuljetuskerroksen tietoturvaa tarjotakseen yksityistä, todennettua viestintää Internetissä.
- RFC 2712: "Kerberos-salaussarjojen lisääminen TLS:ään (Transport Layer Security)". Tässä muistiossa määritellyt 40-bittiset salakirjoitussuiteetit mainitaan vain sen dokumentoimiseksi, että kyseiset salakirjoitussuiteettikoodit on jo annettu.
- RFC 2817: "Upgrading to TLS Within HTTP/1.1", selittää, miten HTTP/1.1:n päivitysmekanismia voidaan käyttää TLS:n (Transport Layer Security) käynnistämiseen olemassa olevan TCP-yhteyden kautta. Näin suojaton ja suojattu HTTP-liikenne voivat käyttää samaa tunnettua porttia (tässä tapauksessa http: 80 eikä https: 443).
- RFC 2818: "HTTP Over TLS", erottaa suojatun liikenteen turvattomasta liikenteestä käyttämällä eri "palvelinporttia".
- RFC 3207: "SMTP Service Extension for Secure SMTP over Transport Layer Security". Määrittelee SMTP-palvelun laajennuksen, jonka avulla SMTP-palvelin ja -asiakas voivat käyttää kuljetuskerroksen tietoturvaa yksityisen, todennetun viestinnän tarjoamiseksi Internetissä.
- RFC 3268: "AES Ciphersuites for TLS". Lisää Advanced Encryption Standard (AES) -salausohjelmat aiemmin käytössä olleisiin symmetrisiin salausohjelmiin.
- RFC 3546: "Transport Layer Security (TLS) Extensions" (TLS-laajennukset), lisää mekanismin, jolla protokollan laajennuksista voidaan neuvotella istunnon alustuksen aikana, ja määrittelee joitakin laajennuksia. Vanhentunut RFC 4366:n myötä.
- RFC 3749: "Transport Layer Security Protocol Compression Methods", määrittelee pakkausmenetelmien ja DEFLATE-pakkausmenetelmän puitteet.
- RFC 3943: "Lempel-Ziv-Stac (LZS)".
- RFC 4132: "Camellia-salakirjoitussarjojen lisääminen TLS:ään (Transport Layer Security)".
- RFC 4162: "SEED-salaussarjojen lisääminen TLS:ään (Transport Layer Security)".
- RFC 4217: "Securing FTP with TLS".
- RFC 4279: "Pre-Shared Key Ciphersuites for Transport Layer Security (TLS)", lisää TLS-protokollaan kolme uutta salakirjoitussarjaa, jotka tukevat ennalta jaettuihin avaimiin perustuvaa todennusta.
- RFC 4347: "Datagram Transport Layer Security" määrittelee TLS-muunnoksen, joka toimii datagrammiprotokollien (kuten UDP) yli.
- RFC 4366: "Transport Layer Security (TLS) Extensions" (TLS-laajennukset) kuvaa sekä joukon erityisiä laajennuksia että yleisen laajennusmekanismin.
- RFC 4492: "Elliptic Curve Cryptography (ECC) Cipher Suites for Transport Layer Security (TLS)".
- RFC 4507: "Transport Layer Security (TLS) Session Resumption without Server-Side State".
- RFC 4680: "TLS Handshake Message for Supplemental Data".
- RFC 4681: "TLS User Mapping Extension".
- RFC 4785: "Pre-Shared Key (PSK) Ciphersuites with NULL Encryption for Transport Layer Security (TLS)".
Aiheeseen liittyvät sivut
- Varmentaja
- Julkisen avaimen varmenne
- Laajennettu validointitodistus
- SSL-kiihdytys
- Datagram Transport Layer Security
- Multipleksoitu kuljetuskerroksen suojaus
- X.509
- Virtuaalinen yksityinen verkko
- SEED
- Palvelimen valvottu salaus
Ohjelmisto
- OpenSSL: ilmainen (ja erittäin suosittu) toteutus (BSD-lisenssi ja joitakin banter-laajennuksia).
- GnuTLS: ilmainen LGPL-lisensoitu toteutus.
- JSSE: Java-toteutus, joka sisältyy Java Runtime Environment -ympäristöön.
- Network Security Services (NSS): FIPS 140 validoitu avoimen lähdekoodin kirjasto
Etsiä