Yleistä TLS-protokollasta

TLS (Transport Layer Security) on salausprotokolla, jota käytetään tiedon suojattuun siirtoon julkisessa verkossa eli Internetissä. TLS-protokolla perustuu varmenteisiin (certificate), joita voidaan käyttää sekä tiedon salaamiseen että vastapuolen tunnistamiseen. Ennen TLS 1.0 -versiota protokolla tunnettiin nimellä Secure Sockets Layer (SSL), johon edelleenkin monesti viitataan.

TLS-protokollan yleinen käyttötapaus on www-sivujen suojaaminen HTTPS-protokollaa käyttämällä. HTTPS-protokolla on yhdistelmä TLS- ja HTTP-protokollista. Lähtökohtaisesti TLS tulisikin olla aina käytössä Internetiin avoimena olevissa palveluissa.

Käytettäessä pilvipalveluiden tarjoamia edustapalveluita, kuten CDN:ää (content delivery network) tai kuormantasaimia (load balancer), TLS:n konfiguraatioon ei välttämättä ole täyttä kontrollia. Tällöin on käytettävä parhaiten vaatimuksia vastaavaa pilvipalveluntarjoajan TLS-konfiguraatiota. Arkkitehtuurista riippuen saattaa olla myös mahdollista käyttää kuormantasaukseen TCP/UDP-tason kuormantasainta, kuten esimerkiksi AWS:n Network Load Balanceria, ja purkaa TLS-salaus vasta sovelluksen omassa edustapalvelimessa, kuten esimerkiksi Kubernetes-klusterin Ingress-resurssissa. Tämä tietenkin siirtää osan protokollapinosta tuotetiimin vastuulle, joka ei välttämättä muista syistä ole toivottava tilanne.

Riskit, jotka syntyvät vaatimusten vastaisesta TLS-konfiguraatiosta verrattuna TLS-salauksen purkuun lähellä työkuormia, ovat erilaisia. Vaatimusten vastainen TLS-konfiguraatio liittyy lähinnä aktiivisten välityshyökkäysten ja laajamittaisen tiedustelun riskeihin. TLS-salauksen purku esimerkiksi Kubernetes-klusterin sisällä taas tuo monimutkaisuutta ja lisää hyökkäyspintaa ja voi altistaa palvelun tätä kautta tietomurrolle.

Jos TLS-toteutusta aiotaan hallita itse, lähitulevaisuuden kannalta on tarpeellista ottaa huomioon sekä HTTP/3 että TLS 1.3, jotka tulevat yhtenäistämään TLS-vaatimuksia ja toisaalta tuomaan tarpeita myös uusille protokollatoteutuksille (QUIC) ja UDP:n tukemiselle siirtoprotokollana.

CDN:n osalta riskit ovat TLS:n osalta yleensä pienemmät, koska staattinen sisältö ei yleensä ole luottamuksellista. CDN:n sisällön suhteen suurempi huolenaihe on sisällön eheys. Eheyttä voidaan varmistaa esimerkiksi ajettavan JavaScript-koodin osalta subresource integrityllä. (12.3.3 Subresource Integrity)


SSL- ja TLS-versiot (uusimmasta vanhimpaan)
  • TLS 1.3
  • TLS 1.2
  • TLS 1.1 (tätä versiota saa tukea vain silloin, jos vastapuoli ei tue TLS 1.2 -versiota)
  • TLS 1.0 (tätä versiota ei saa tukea)
  • SSL 3.0 (tätä versiota ei saa tukea)
  • SSL 2.0 (tätä versiota ei saa tukea)
  • SSL 1.0 (tätä versiota ei saa tukea)