neljapäev, 10. detsember 2015

Let's Encrypt tasuta SSL serdid

Kes on viimase aasta ainult kuskil kivi all elanud, pole arvatavasti veel kuulnud sellisest initsiatiivist nagu Let's Encrypt. Tegu pole millegi vähemaga kui revolutsiooniga SSL sertifikaatide väljastamises. Täpsemalt küll nn. DV ehk domain validatud sertifikaatide haldamises, sest OV ja EV serte väljastatakse ka edaspidi täpselt nii nagu täna (vähemalt esialgu). Domeenikinnitusega domeenide väljastamine on sertide müüjatele muutunud nii odavaks, et nende eest nagu polekski enam põhjust üldse raha küsida ja seda Let's Encrypt teebki – annab DV domeene kõikidele soovijatele tasuta. Samas ei ole tasuta sertifikaadid mingi uudis, näiteks StartSSL pakub neid juba aastaid. Revolutsioonilisus seisneb hoopis milleski muus kui hinnas, nimelt viisis kuidas neid serte üldse soetatakse.

Kui meenutada, kuidas näeb välja üks tavaline DV serdi hankimise protseduur, siis võiks see olla järgmine:

  1. Kõigepealt muidugi teeme läbi serdi ostmise protseduuri
  2. Siis genereerime uue salajase RSA võtme (või kasutame olemasolevat). Tavaliselt kasutatakse selleks openssl käsurida
  3. Järgmiseks koostame (suure tõenäosusega jälle openssl käsurealt) sertifikaadipäringu, kuhu läheb kirja meie füüsiline asukoht, administraatori e-posti aadress ja soovitud domeeninimi
  4. Nüüd kopeerime ja pasteerime sertifikaadipäringu sisu (see on base64 kodeeringus) sertifikaadimüüja kodulehele vastavasse tekstikasti ja kinnitame tellimuse
  5. Edasi tuleb oodata, kuni domeeni administraatori e-postkasti laekub kiri kinnituslingiga
  6. Avame kinnituslingi ja klikime nupul, et oleme serdi väljastamisega nõus
  7. Serdi müüja saadab nüüd samale aadressile sertifikaadi koos serdiahela teiste sertidega (tõenäoliselt zipiga pakitult)
  8. Pakime zip faili lahti ja laeme võtme ning uue serdi, vajadusel koos serdiahelaga serverisse

Nagu näha, siis serdi müüja poolelt käib kõik üsna automaatselt (sellest ka odav omahind sertide väljastamises), aga ostja poolel tuleb teha üsna palju käsitööd alates tellimisvormi täitmisest kuni e-posti kaudu saadud zip failiga žongleerimiseni.

Let's Encrypt muudab kõike seda. Edaspidi saab serte tellida ja uuendada puhtalt tarkvara abil ilma igasuguse inimesepoolse sekkumiseta, mis ongi tegelikuks revolutsiooniks. Let's Encrypt on nimelt esimeseks ACME ehk Automatic Certificate Management Environment protokolli implementeerijaks, mis kirjeldab ära sertifikaadi tellimise automatiseeritud protsessi. Tulevikus võtavad sama protokolli tõenäoliselt üle ka teised sertide müüjad, see ei ole sugugi mõeldud olema ainult Let's Encrypt keskne. Kusjuures protokoll näeb ette võimalust, et serdi eest saab ikkagi ka maksta.

ACME protokoll töötab lihtsustatult nii:

  1. Tarkvara genereerib ise PKI võtme ja CSR sertifikaadipäringu
  2. Sertifikaadipäring saadetakse allkirjastatult ACME API aadressile
  3. ACME server teeb päringu soovitud domeeni urlile domeen/.well-known/acme-challenge/{token}
  4. Klient vastab sellele päringule allkirjastatud {token} väärtusega
  5. Klient laeb ACME serverist genereeritud serdi

Kuigi protsess on taustal mõnevõrra keerulisem, siis tarkvara jaoks on see protseduur nagu iga teine ning seetõttu on see muu hulgas ka kergelt automatiseeritav. Kui kasutada ametlikku letsencrypt klienti, siis taustal toimuvat üldse ei näegi, kõik tundub üsna maagiline – sisestad käsureal soovi, et tahad endale uusi serte ja järgmisel hetkel on kehtivad serdid juba ettemäärtud kaustas olemas.

Tõenäoliselt ei jää letsencrypt klient siiski ainsaks võimaluseks serte tellida, kuna esiteks ei ole referentsklient päris automaatne (seda annab shelli võimaluste ja yes käsu abil muidugi parandada), see nõuab miskipärast ka üsna palju ressursse (eelkõige operatiivmälu) ja lisaks on see veel veidi piiratud võimalustega. Protokoll on avalik ja seega ei ole kellelgi takistuseks töötamaks välja just omale sobivat tarkvara.

Küsimused ja vastused

1. Kas sertide genereerimiseks peab kasutama letsencrypt utikat?
Ei pea. Protokoll on avalik, letsencrypt utikas on lihtsalt selle protokolli üks implementatsioon

2. Kas Let's Encrypt lubab tellida suvalisel kasutajal suvelisele domeenile serte?
Ei luba. Serdi genereerimiseks peab tellija tõestama valdust valitud domeeninime üle. Kui tellija ei suuda tõestada, et ta kontrollib valitud domeeni, siis sertifikaati ei genereerita. See on tavaline DV sertide genereerimise praktika.

3. Kas serte peab tellima samast masinast, mille domeenile tahad serti tellida?
Ei pea. Domeeni omandust saab tõestada kas HTTP või DNS abil. DNS kaudu ei puutu konkreetne masin üldse asjasse. HTTP abil valideerides peab Let's Encrypt server saama ligipääsu domeen/.well-known/acme-challenge/* URL'ile, kuid selle saab näiteks proxy reeglite kaudu suunata veebiserverist välja, ühtsesse sertide genereerimise masinasse.

4. Kas Let's Encrypt saadab teised serdimüüjad ajaloo prügikasti?
Kindlasti mitte. Kuigi pakutav tasuta sert võib sundida ka teisi kas hinda veelgi langetama või siis täiesti tasuta muutma, on Let's Encrypt siiski omade piirangutega ja rohkem mõeldud olema teed rajavaks referentsiks, mitte turu domineerijaks. Näiteks kehtivad Let's Encrypt sertide genereerimisel rate limit pirangud, samuti genereeritakse ainult DV serte. Kommertspakkujad saaksid sama protkolli kaudu pakkuda tunduvalt paindlikumat teenust, näiteks kõigepealt tuvastada tellija organisatsioon ja edaspidi lubada tuvastatud kasutajal tellida ka OV/EV serte. Kusjuures hind ei pruugi olla üldse seotud sertide arvuga, kommertspakkuja saaks serte müüa näiteks ka subscriptioniga kus serte võib genereerida X hulgal niikaua kui tellijal on müüja juures kehtiv kuutasuline subscription. Siiani ei ole midagi väga innovatiivset saanud selles vallas teha, kuna niiöelda API põhine kiire ja suures koguses sertide genereerimine oli ühtse standardi puudumise tõttu võimalik siiski ainult väga suurtele klientidele.

5. Kas nüüd loobuvad odavate sertide tellijad oma vanadest sertidest Let's Encrypt sertide kasuks
Ei usu. Let's Encrypt idee ei seisne mitte niiväga tasuta serdides (kuigi muidugi ka selles), vaid nende sertide tarkvaralises genereerimises. Lihtsalt eelmise pakkuja asendamiseks see ei sobi, kuna sellisel viisil genereeritud serdid on palju lühema kehtivusajaga (3 kuud vs. standardne 1 aasta) ja seega tuleks serdi uuendamise toimingut läbi viia tunduvalt tihemini. Eelkõige võiks "klientideks" olla ikka need, kes suudavad selle voo automatiseerida. Näiteks veebihostingu pakkujad jmt. Tavatarbijale võib olla isegi lihtsam käia kord aastas kommertspakkuja juures ja maksta oma $8, kui käia iga paari kuu tagant serveris letsencrypt utikat käivitamas.