Let’s Encrypt nemokamas SSL: instaliavimas ir atnaujinimas

Kodėl Let’s Encrypt pakeitė žaidimo taisykles

Prisimenu laikus, kai SSL sertifikatas buvo tarsi prabangos prekė – mokėjai 50-100 eurų per metus ir dar turėjai išsikapstytis per sudėtingą instaliavimo procesą. 2015 metais atsiradęs Let’s Encrypt viską apvertė aukštyn kojomis. Staiga kiekvienas, kas turėjo serverį ir bent minimalias technines žinias, galėjo gauti visavertį SSL sertifikatą visiškai nemokamai.

Šiandien HTTPS yra ne prabanga, o būtinybė. Google Chrome ir kiti naršyklės agresyviai žymi HTTP svetaines kaip nesaugias, SEO reitingai kenčia be HTTPS, o vartotojai vis labiau supranta, kad tas žalias spynelės simbolis adreso juostoje reiškia kažką svarbaus. Let’s Encrypt ne tik demokratizavo SSL sertifikatus, bet ir padarė internetą saugesnį milijonams svetainių.

Organizacija veikia kaip Certificate Authority (CA), kuri automatizavo visą sertifikatų išdavimo procesą. Jų misija paprasta – šifruotas internetas visiems, be išimčių. Ir žinot kas geriausia? Viskas veikia puikiai, nors yra nemokama.

Kaip veikia automatinis sertifikatų valdymas

Let’s Encrypt sertifikatai galioja 90 dienų. Girdžiu jūsų mintis – „Kas per nesąmonė, komerciniai galioja metus ar net ilgiau!” Bet čia slypi genialumas. Trumpesnis galiojimo laikas verčia naudoti automatizaciją, o tai reiškia, kad sertifikato atnaujinimas tampa sklandžiu, beveik nematomu procesu.

Viskas sukasi aplink ACME (Automatic Certificate Management Environment) protokolą. Jūsų serveris bendrauja su Let’s Encrypt serveriais, įrodo, kad tikrai valdote domeną, ir gauna sertifikatą. Šis procesas vyksta automatiškai, naudojant tokius įrankius kaip Certbot, acme.sh ar kitus ACME klientus.

Domeno valdymo patvirtinimas vyksta keliais būdais. Populiariausias – HTTP-01 challenge, kai Let’s Encrypt serveriai patikrina, ar jūsų serveris gali patalpinti specifinį failą nurodytoje vietoje. Yra ir DNS-01 metodas, naudingas wildcard sertifikatams gauti, nors jis šiek tiek sudėtingesnis.

Certbot instaliavimas skirtingose sistemose

Certbot yra oficialus Let’s Encrypt rekomenduojamas įrankis, ir dauguma administratorių pradeda būtent nuo jo. Instaliavimas priklauso nuo jūsų operacinės sistemos, bet procesas paprastai nesudėtingas.

Ubuntu ir Debian sistemose viskas prasideda nuo snapd įdiegimo, jei jo dar neturite:

sudo apt update
sudo apt install snapd
sudo snap install core
sudo snap refresh core

Pats Certbot diegiamas per snap paketą:

sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot

CentOS ar RHEL sistemose procesas panašus, tik naudojate yum ar dnf paketų tvarkykles. Svarbu įsitikinti, kad EPEL repozitorija yra įjungta.

Kai kurie administratoriai tebesinaudoja senesniais diegimo metodais per pip ar sisteminius paketus, bet snap metodas dabar yra rekomenduojamas, nes užtikrina naujausią versiją ir mažiau priklausomybių konfliktų.

Pirmasis sertifikato gavimas – praktiniai žingsniai

Turint įdiegtą Certbot, sertifikato gavimas tampa stebėtinai paprastas. Jei naudojate Apache ar Nginx, Certbot gali automatiškai sukonfigūruoti viską už jus.

Nginx vartotojams komanda atrodo taip:

sudo certbot --nginx -d jusudomenas.lt -d www.jusudomenas.lt

Apache atveju tiesiog pakeičiate –nginx į –apache. Certbot paklaus keleto klausimų – el. pašto adreso (svarbu atnaujinimams ir saugumo pranešimams), ar sutinkate su sąlygomis, ar norite gauti naujienlaiškį.

Pats įdomiausia dalis – Certbot automatiškai modifikuos jūsų serverio konfigūraciją. Jis sukurs naują virtualhost įrašą su SSL nustatymais, nustatys tinkamus sertifikatų kelius, net sukonfigūruos automatinį peradresavimą iš HTTP į HTTPS, jei to pageidausite.

Jei nenaudojate populiarių web serverių arba norite daugiau kontrolės, galite naudoti standalone režimą:

sudo certbot certonly --standalone -d jusudomenas.lt

Šis metodas laikinai paleidžia savo web serverį 80 porte, todėl jūsų pagrindinis serveris turi būti sustabdytas instaliavimo metu. Ne pats patogiausias variantas produkcinėms sistemoms.

Webroot metodas yra protingesnis sprendimas – jis tiesiog patalpina validacijos failus jūsų esamo web serverio kataloge:

sudo certbot certonly --webroot -w /var/www/html -d jusudomenas.lt

Wildcard sertifikatai ir DNS validacija

Kartais reikia apsaugoti ne tik pagrindinį domeną, bet ir visus galimus subdomenus – *.jusudomenas.lt. Čia į žaidimą įsijungia wildcard sertifikatai, kurie reikalauja DNS validacijos.

Procesas šiek tiek skiriasi, nes turite įrodyti domeno valdymą per DNS įrašus:

sudo certbot certonly --manual --preferred-challenges dns -d *.jusudomenas.lt -d jusudomenas.lt

Certbot paprašys sukurti TXT įrašą jūsų DNS zonoje su specifiniu turiniu. Turite prisijungti prie savo DNS valdymo sąsajos (Cloudflare, Route53, ar kur ten valdote DNS), sukurti reikalingą įrašą ir palaukti, kol jis pasklinda.

Patikrinti DNS įrašo paskleidimą galite su dig komanda:

dig _acme-challenge.jusudomenas.lt TXT

Kai įrašas matomas, grįžkite prie Certbot ir tęskite procesą. Sertifikatas bus išduotas ir įrašytas standartinėje vietoje.

Dažnas klausimas – ar reikia atskirų sertifikatų kiekvienam subdomenui? Ne būtinai. Vienas sertifikatas gali apimti kelis domenus (SAN – Subject Alternative Name), bet wildcard sertifikatas paprastai patogesnis, jei subdomenų yra daug ar jie dinamiškai kuriami.

Automatinis atnaujinimas ir cron darbai

Čia Let’s Encrypt tikrai spindi. Certbot automatiškai sukonfigūruoja atnaujinimo mechanizmą per systemd timer arba cron. Galite patikrinti, ar viskas veikia:

sudo certbot renew --dry-run

Ši komanda simuliuoja atnaujinimo procesą be realaus sertifikato keitimo. Jei matote sėkmės pranešimą, viskas tvarkoje.

Systemd sistemose Certbot sukuria timer’į, kurį galite patikrinti:

systemctl list-timers | grep certbot

Senesnėse sistemose arba jei naudojate cron, atnaujinimo užduotis paprastai atrodo taip:

0 3 * * * certbot renew --quiet --post-hook "systemctl reload nginx"

Šis įrašas /etc/crontab arba crontab -e faile paleidžia atnaujinimą kasdien 3 val. nakties. –quiet parametras slopina išvestį, o –post-hook užtikrina, kad web serveris perkraus konfigūraciją po sėkmingo atnaujinimo.

Svarbu suprasti, kad `certbot renew` patikrina visus jūsų sistemoje esančius sertifikatus ir atnaujina tik tuos, kuriems liko mažiau nei 30 dienų iki galiojimo pabaigos. Tai reiškia, kad galite saugiai paleisti šią komandą kasdien – ji nieko nepadarys, jei nereikia.

Problemos ir jų sprendimai

Net su tokiu patogiu įrankiu kaip Certbot, kartais kyla problemų. Paminėsiu dažniausias ir kaip jas išspręsti.

80 portas užimtas arba nepasiekiamas – tai klasika. Let’s Encrypt validacija reikalauja prieigos prie 80 porto. Jei naudojate standalone metodą, sustabdykite web serverį laikinai. Geriau – perjunkite į webroot ar plugin metodą.

DNS problemos – jei jūsų domenas neturi teisingų A arba AAAA įrašų, rodančių į serverį, validacija nepavyks. Patikrinkite DNS su `dig` arba `nslookup`. Atminkite, kad DNS pakeitimams gali prireikti laiko pasklisti.

Firewall blokuoja – įsitikinkite, kad 80 ir 443 portai yra atviri. UFW vartotojams:

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

Rate limiting – Let’s Encrypt turi apribojimus, kiek sertifikatų galite išduoti per savaitę tam pačiam domenui. Jei testuojate, naudokite staging aplinką:

sudo certbot --staging --nginx -d testas.jusudomenas.lt

Staging sertifikatai nebus patikimi naršyklėse, bet galėsite testuoti procesą be apribojimų.

Sertifikatas neįsigalioja automatiškai – paprastai tai reiškia, kad web serveris neperkrauna konfigūracijos po atnaujinimo. Įsitikinkite, kad turite teisingą –post-hook arba –deploy-hook komandą.

Alternatyvos Certbot ir kada jų reikia

Nors Certbot yra populiariausias, jis ne vienintelis ACME klientas. Kai kuriose situacijose kitos alternatyvos gali būti tinkamesnės.

acme.sh – tai shell script’ais parašytas klientas, kuris neturi priklausomybių ir yra itin lengvas. Idealus minimalistams ar embedded sistemoms:

curl https://get.acme.sh | sh
acme.sh --issue -d jusudomenas.lt -w /var/www/html

acme.sh ypač geras, jei reikia integracijos su įvairiomis DNS API – jis palaiko daugiau nei 100 DNS providerių automatiniam DNS-01 challenge.

Caddy web serveris – jei tik kuriate naują projektą, apsvarstykite Caddy. Šis web serveris turi integruotą automatinį HTTPS su Let’s Encrypt. Konfigūracija gali būti tokia paprasta:

jusudomenas.lt {
reverse_proxy localhost:8080
}

Viskas. Caddy automatiškai gaus ir atnaujins sertifikatą. Jokių papildomų komandų.

Traefik – jei naudojate Docker ar Kubernetes, Traefik yra reverse proxy su automatiniu Let’s Encrypt palaikymu. Sertifikatai valdomi per labels Docker container’iuose.

acme-dns – specializuotas sprendimas DNS-01 challenge automatizavimui, ypač naudingas, kai jūsų DNS provideris neturi API arba nenorite duoti pilnos prieigos prie DNS zonos.

Saugumo niuansai ir geriausia praktika

Turėti SSL sertifikatą – tai tik pradžia. Svarbu jį teisingai sukonfigūruoti.

TLS protokolų versijos – išjunkite senus, nesaugius protokolus. Nginx konfigūracijoje:

ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';

HSTS (HTTP Strict Transport Security) – nurodykite naršyklėms visada naudoti HTTPS:

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

OCSP Stapling – pagerina SSL handshake greitį ir privatumą:

ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/letsencrypt/live/jusudomenas.lt/chain.pem;

Patikrinkite savo SSL konfigūraciją su SSL Labs testu (ssllabs.com/ssltest). Siekite A ar A+ įvertinimo.

Sertifikatų failų teisės – Let’s Encrypt sertifikatai saugomi /etc/letsencrypt/live/ kataloge. Įsitikinkite, kad tik root ir web serverio vartotojas gali juos skaityti. Niekada nekopijuokite privačių raktų į nesaugias vietas.

Backup – nors sertifikatus galima lengvai pergeneruoti, geriausia praktika – įtraukti /etc/letsencrypt/ katalogą į reguliarius backup’us, ypač jei naudojate daug domenų.

Kai viskas veikia sklandžiai

Let’s Encrypt pakeitė tai, kaip žiūrime į SSL sertifikatus. Tai, kas kadaise buvo sudėtinga ir brangu, dabar yra paprasta ir prieinama visiems. Įdiegę automatinį atnaujinimą, galite beveik pamiršti apie sertifikatus – jie tiesiog veiks.

Svarbiausias patarimas – neskubėkite. Pirmą kartą instaliuojant, naudokite staging aplinką, kol viskas veikia taip, kaip tikitės. Patikrinkite automatinį atnaujinimą su –dry-run. Įsitikinkite, kad web serveris teisingai perkrauna konfigūraciją.

Jei valdote kelis serverius, apsvarstykite centralizuotą sertifikatų valdymą. Galite generuoti sertifikatus vienoje vietoje ir platinti juos kitiems serveriams, arba naudoti load balancer’į su centralizuotu SSL termination.

Nebijokite eksperimentuoti su skirtingais ACME klientais – tai, kas veikia vienam projektui, gali būti per sudėtinga ar per paprasta kitam. Certbot puikus pradžiai, bet acme.sh ar integruoti sprendimai kaip Caddy gali sutaupyti daug laiko ilgalaikėje perspektyvoje.

Ir atminkite – šifruotas srautas yra tik viena saugumo dalis. SSL sertifikatas neapsaugo nuo SQL injection, XSS ar kitų pažeidžiamumų jūsų aplikacijoje. Bet jis užtikrina, kad duomenys tarp vartotojo ir serverio keliauja saugiai, o šiandieninėje interneto erdvėje tai yra absoliuti būtinybė, ne pasirinkimas.

Daugiau

Python new metodas: objektų kūrimo kontrolė