Articol Gazduire

SSL pentru site mic - ghid Let's Encrypt + plătit

Lacăt stilizat în navy cu scântei portocalii în jur, reprezentând certificat SSL și conexiune securizată HTTPS

SSL nu mai este opțional. Browser-ul îți marchează site-ul ca „Not secure" dacă nu ai HTTPS, Google penalizează ranking-ul, iar formularele de contact pe HTTP afișează warning direct în câmpul de input. Pentru un site mic de firmă sau magazin, lipsa SSL costă mai mult în conversii pierdute decât orice certificat plătit.

Vestea bună: certificatele DV (Domain Validation) sunt gratuite via Let's Encrypt din 2016, sunt acceptate de toate browserele moderne și se instalează în 5 minute pe orice hosting decent. Vestea proastă: există încă vendori care vând certificate la 150-500 EUR/an pentru site-uri unde varianta gratuită ar funcționa perfect.

În acest ghid arăt când Let's Encrypt este suficient (răspuns scurt: aproape întotdeauna), când merită un certificat plătit, setup pe cPanel, Plesk, VPS cu certbot și Cloudflare Universal SSL, plus capcanele post-migrare. Dacă ești la început cu infrastructura, citește mai întâi Cloudflare gratuit pentru site mic - setup pas cu pas și DNS pentru începători - tipuri de record.

De ce contează SSL/TLS pentru un site mic

În termeni simpli: SSL/TLS criptează traficul între browser și serverul tău, ca nimeni de pe rețea (operator WiFi public, ISP, atacator MITM) să nu citească sau modifice datele.

  • Browser warnings: Chrome și Firefox afișează „Not secure" pentru orice HTTP. Pe formulare cu password sau card, warning direct în input field. Vizitatorul pleacă în 2 secunde.
  • SEO ranking signal: Google confirmă din 2014 că HTTPS este factor de ranking. Search Console raportează probleme HTTPS ca issue care afectează indexare.
  • GDPR compliance: GDPR cere „măsuri tehnice adecvate" pentru protecția datelor în tranzit. SSL este minimum absolut. Lipsa lui = risc de amendă în caz de incident.
  • Payment trust: Orice procesator de plăți (Stripe, PayU, Netopia, EuPlatesc) refuză integrarea fără HTTPS. PCI-DSS o cere explicit.
  • Modern features blocked: Service Workers, HTTP/2, HTTP/3, geolocation, camera/microphone API funcționează doar pe HTTPS.

Pe scurt: nu este decizie tehnică, este standard minim de business. Întrebarea nu este „dacă", ci „ce tip".

Tipuri de certificate SSL - DV vs OV vs EV

Există trei niveluri de validare, diferite ca preț și proces. Pentru 95% IMM, DV gratuit este răspunsul.

DV - Domain Validation

CA verifică doar că tu controlezi domeniul, prin DNS record sau fișier HTTP. Issuance automată în secunde-minute. Browser arată padlock-ul standard, fără informații despre companie.

Use case: site prezentare firmă, blog, magazin online standard, SaaS B2C, portfolio, landing page.

Cost: 0 EUR (Let's Encrypt, ZeroSSL, Buypass) până la 30-80 EUR/an (Sectigo PositiveSSL, RapidSSL la reseller). Diferența vizuală între gratuit și plătit DV este zero.

OV - Organization Validation

CA verifică suplimentar că organizația există legal: cere documente, apel telefonic, verificare adresă. Issuance în 1-5 zile. Browser arată padlock plus info companie când utilizatorul dă click pe lock.

Use case: B2B serios, instituții publice, platforme cu volume mari de tranzacții B2B. Cost: 80-250 EUR/an (Sectigo, DigiCert, GlobalSign).

EV - Extended Validation

Validare extinsă cu audit legal complet. Înainte de 2019, browser-ul afișa bara verde cu numele companiei. Din 2019, Chrome și Firefox au eliminat indicatorul vizual - utilizatorul normal nu vede diferența vs DV.

Use case: bănci, instituții financiare reglementate, contracte enterprise care cer EV explicit. Cost: 200-600 EUR/an.

Aici este partea importantă: din 2019 încoace, plata pentru EV are sens doar dacă există cerință contractuală sau de compliance care îl menționează explicit. Pentru site obișnuit, EV este o relicvă tehnologică, nu un signal de încredere care funcționează.

Tabel comparativ DV vs OV vs EV

Caracteristică DV gratuit DV plătit OV EV
Validare Automată, DNS/HTTP Automată, DNS/HTTP Manuală, documente firmă Extinsă, audit legal
Timp issuance 30 sec - 5 min 30 sec - 1 oră 1-5 zile 5-15 zile
Indicator browser Padlock standard Padlock standard Padlock + info firmă în detalii Padlock standard (era bara verde, eliminată 2019)
Cost anual 0 EUR 30-80 EUR 80-250 EUR 200-600 EUR
Wildcard inclus Da (Let's Encrypt) De obicei extra Extra 150-400 EUR Nu există EV wildcard
Use case Site mic-mediu, blog, eCommerce Cumpărător corporate care cere factură SLA B2B, instituții Reglementări specifice bancă/finanțe
Reînnoire 90 zile automat 1-2 ani manual 1-2 ani manual 1 an manual cu reverificare

Trade-off: certificate plătite vin cu „warranty" de la CA (10.000-1.500.000 USD) și suport telefonic. În practică, nicio firmă mică nu a recuperat vreodată bani din warranty SSL - este marketing.

Free vs paid - cum decizi

Reguli simple pentru IMM din România:

  • Site simplu de firmă, blog, portfolio, landing page → Let's Encrypt DV gratuit, instalat automat din panel hosting. Final.
  • Magazin online standard (WooCommerce, PrestaShop, Shopify pe domeniu custom) → Let's Encrypt DV gratuit. Procesatorii de plăți nu cer mai mult.
  • Aplicație SaaS B2C → Let's Encrypt DV + wildcard pentru subdomenii client. Gratuit.
  • B2B unde clientul corporate cere explicit „certificat profesional cu factură" → DV plătit Sectigo sau RapidSSL la 30-80 EUR/an.
  • Bancă, instituție financiară reglementată, eHealth → OV sau EV conform reglementatorului. Aici nu mai e alegerea ta tehnică, ci compliance.

Battle-tested: Let's Encrypt servește peste 400 milioane de domenii, inclusiv Fortune 500. Argumentul „gratuit înseamnă neserios" este invers - infrastructura este mai bine auditată decât multe CA-uri plătite mici.

Setup path A - cPanel AutoSSL

Cea mai simplă cale pe shared hosting RO. Hostico, Hosterion, cyberfolks, Romarg, THC, SiteBunker au AutoSSL activat by default sau cu un toggle.

Setup minim:

  1. Login cPanel → secțiunea SecuritySSL/TLS Status.
  2. Bifezi domeniul principal + toate subdomeniile relevante (www, mail, blog).
  3. Apeși Run AutoSSL. cPanel cere automat certificate Let's Encrypt sau Sectigo (depinde de provider), le instalează și le reînnoiește la 90 zile.
  4. Verifici în browser: https://domeniu.ro → padlock verde → done.

Dacă AutoSSL nu apare în panel, deschizi ticket la provider. Toate hosting-urile decente RO îl au gratuit pe orice plan.

Pro tip dev: AutoSSL renewal rulează automat noaptea. Dacă vezi certificat expirat după 90 zile, înseamnă că AutoSSL a eșuat (de obicei DNS greșit pentru un subdomeniu). Deschide log-ul AutoSSL din cPanel ca să vezi exact ce domeniu blochează renewal.

Setup path B - Plesk SSL It

Plesk are extensie nativă SSL It! care face același lucru ca AutoSSL pe cPanel.

Pași:

  1. Plesk → Domains → click pe domeniu → SSL/TLS Certificates.
  2. Click Install sub Let's Encrypt.
  3. Bifezi „Include www. subdomain" și „Secure webmail".
  4. Click Get it free. Plesk emite certificatul și îl asignează automat la website și mail.
  5. Activează Keep the website secure pentru redirect HTTPS automat în panel.

Plesk renewal merge automat din coada lui internă, fără cron extern.

Setup path C - certbot pe VPS

Pentru VPS self-managed (Hetzner, OVH, Contabo, DigitalOcean), certbot este standardul. Funcționează cu Nginx, Apache, standalone.

Install certbot pe Ubuntu/Debian

sudo apt update
sudo apt install -y certbot python3-certbot-nginx

Pentru Apache, înlocuiește python3-certbot-nginx cu python3-certbot-apache.

Issue cu validare HTTP-01 (cel mai comun)

sudo certbot --nginx -d domeniu.ro -d www.domeniu.ro

Certbot detectează virtual host-ul Nginx, generează cert-ul, modifică config-ul să asculte pe 443 cu noul certificat și restart server. Te întreabă o singură dată email pentru notificări de expirare.

Wildcard cu validare DNS-01

Pentru *.domeniu.ro, HTTP-01 nu merge - trebuie token TXT în DNS.

sudo certbot certonly --manual --preferred-challenges dns \
  -d "*.domeniu.ro" -d domeniu.ro

Certbot afișează un token de tipul _acme-challenge.domeniu.ro TXT "xyz123". Adaugi record în DNS, aștepți propagare 2-5 minute (dig TXT _acme-challenge.domeniu.ro verifică), continui în certbot.

Dependency: pentru wildcard automat la renewal, instalezi plugin pentru DNS provider:

sudo apt install python3-certbot-dns-cloudflare

Apoi pui credențialele API în /etc/letsencrypt/cloudflare.ini și certbot face renewal complet automat.

Reînnoire automată

Certbot install setează by default un systemd timer (certbot.timer) sau cron entry care verifică renewal de 2 ori pe zi. Reînnoirea se face efectiv doar dacă certificatul are <30 zile până la expirare.

Verifică:

sudo systemctl list-timers | grep certbot
sudo certbot renew --dry-run

Dry-run testează tot procesul fără să emită cert nou - obligatoriu să rulezi după install, ca să prinzi probleme de config înainte să expire production.

Pro tip dev: adaugă hook post-renewal pentru reload serviciu:

sudo certbot renew --deploy-hook "systemctl reload nginx"

Fără hook, certificatul nou stă pe disk dar Nginx servește vechiul până la următorul reload manual.

Setup path D - Cloudflare Universal SSL

Cloudflare oferă SSL gratuit „la edge" - certificat pe proxy-ul Cloudflare, fără să atingi serverul tău. Setup în 15 minute, cu o capcană majoră.

Cele trei moduri SSL:

  • Flexible: vizitator → HTTPS → Cloudflare → HTTP → origin. Cloudflare criptează partea publică, dar traficul Cloudflare-origin merge plain HTTP.
  • Full: HTTPS pe ambele segmente, dar Cloudflare nu validează certificatul origin (poate fi self-signed).
  • Full (strict): ca Full, dar Cloudflare validează că certificatul origin este real (Let's Encrypt sau CA recunoscut).

⚠️ MITM risk pe Flexible mode. Flexible este OK pentru blog static fără login. Pentru site cu login, plăți, cookies de sesiune sau admin panel, este vulnerabilitate. Atacator cu acces la rețeaua Cloudflare-origin (ISP, datacenter, BGP hijacking) poate citi și modifica trafic plain HTTP. În plus, dacă plugin-ul detectează HTTP în loc de HTTPS, intri în redirect loop infinit (ERR_TOO_MANY_REDIRECTS). Folosește Flexible doar temporar cât configurezi cert real pe origin.

Recomandare: Full (strict) cu Let's Encrypt pe origin + Cloudflare Universal SSL la edge. Dublă criptare, fără MITM risk, plus TLS 1.3 + HTTP/3 gratuit.

Setup minim Full strict:

  1. Instalezi Let's Encrypt pe origin (path A, B sau C de mai sus).
  2. Cloudflare Dashboard → SSL/TLS → Overview → setează Full (strict).
  3. SSL/TLS → Edge Certificates → Always Use HTTPS → ON.
  4. SSL/TLS → Edge Certificates → Minimum TLS Version → 1.2 (sau 1.3 dacă nu ai vizitatori pe browsere vechi).
  5. Verifici cu curl -I https://domeniu.ro → vezi cf-cache-status și certificat valid.

Redirect HTTP la HTTPS

După instalare SSL, vechile URL-uri HTTP trebuie redirectate. Setup minim cu .htaccess (Apache, LiteSpeed):

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Pentru Nginx, în config server block:

server {
    listen 80;
    server_name domeniu.ro www.domeniu.ro;
    return 301 https://$host$request_uri;
}

Cu Cloudflare, redirect-ul îl face Cloudflare prin Always Use HTTPS - nu mai e nevoie să atingi .htaccess sau Nginx pe origin pentru asta.

HSTS - când să îl activezi și când să eviți

HSTS (HTTP Strict Transport Security) este un header care spune browser-ului „acest domeniu este HTTPS-only pentru următoarele N secunde, nu accepta HTTP chiar dacă utilizatorul scrie http:// explicit".

Header de bază:

Strict-Transport-Security: max-age=31536000; includeSubDomains

💡 Cu HSTS preload, drumul de întoarcere nu există. Dacă incluzi domeniul în HSTS Preload List (hstspreload.org), Chrome și Firefox hardcoded refuză orice HTTP timp de luni-ani, chiar dacă tu dai jos HSTS de pe server. Nu activa preload până nu rulezi HSTS standard 3-6 luni fără probleme. Pentru site mic experimental sau staging, lasă HSTS dezactivat - îți păstrezi opțiunea de a face fallback la HTTP dacă ceva se rupe major.

Recomandare practică pentru IMM: activează HSTS standard cu max-age=31536000 (1 an) după ce confirmi că HTTPS funcționează stabil 30 zile. Lasă preload pentru proiecte mature, cu echipă tehnică care înțelege consecințele.

Probleme comune după migrarea la HTTPS

Mixed content

Cea mai frecventă problemă. Pagina se încarcă pe HTTPS, dar conține referințe hardcoded la http:// (imagini, scripts, iframes). Browser blochează resursele sau marchează padlock-ul ca „Not fully secure".

Detectare: DevTools → Console → reload pagina. Erorile mixed content sunt marcate explicit cu URL.

Fix WordPress: plugin Better Search Replace care înlocuiește http://domeniu.ro cu https://domeniu.ro în toată baza de date. Backup înainte. Rulezi o singură dată după migrare.

Redirect loop cu Cloudflare Flexible

Simptom: ERR_TOO_MANY_REDIRECTS. Cauza: Cloudflare pe Flexible trimite HTTP la origin, dar .htaccess redirect HTTP la HTTPS. Loop infinit.

Fix: ori treci Cloudflare la Full strict, ori elimini redirect-ul de pe origin și folosești doar Always Use HTTPS din Cloudflare.

Sesiuni de login pierdute

Cookies setate pe HTTP nu sunt valide pe HTTPS cu flag Secure. Utilizatorii logați înainte de migrare sunt deconectați. Pe WordPress, plugin Really Simple SSL gestionează automat tranziția cookies.

Provideri RO populari și opțiunile lor SSL

Pe scurt, pentru shared hosting românesc, situația arată așa:

  • Hostico, Hosterion, cyberfolks, Romarg, THC, SiteBunker - Let's Encrypt gratuit cu AutoSSL, plus opțional Sectigo OV/EV la 80-300 RON/an dacă vrei factură separată cu CA brand.
  • SiteGround - Let's Encrypt + opțional Wildcard plătit la 60 EUR/an.
  • Cloudways, Hetzner, OVH - Let's Encrypt prin panel propriu sau certbot manual pe VPS, fără cost.

Vezi cum aleg hosting pentru site mic.

Întrebări frecvente

Ce este Let's Encrypt și de ce este gratuit?

Let's Encrypt este un CA non-profit fondat de Mozilla, Google, Facebook, Cisco și Electronic Frontier Foundation în 2014. Misiunea explicită: HTTPS gratuit pentru întregul web. Finanțare prin sponsorizări corporate, nu prin vânzare certificate. Certificatele sunt acceptate de toate browserele (root CA în Mozilla, Microsoft, Apple, Google stores). Validitate 90 zile cu renewal automat.

Pot folosi un singur certificat pentru mai multe domenii?

Da, prin Subject Alternative Names (SAN). Let's Encrypt suportă până la 100 SAN per certificat. Util pentru domeniu.ro + www.domeniu.ro + blog.domeniu.ro într-un singur cert. Pentru sub-domenii nelimitate, alegi wildcard (*.domeniu.ro).

Mi-a expirat certificatul, ce fac?

Verifici cron-ul/timer-ul de renewal cu sudo certbot renew --dry-run (pe VPS) sau loguri AutoSSL (pe cPanel). 90% din cazuri, renewal-ul a eșuat din motive DNS sau firewall. Rulezi renewal manual, fixezi cauza, setezi monitorizare externă (UptimeRobot Pro alertează la expirare).

Trebuie certificat SSL pentru mail.domeniu.ro?

Da, dacă folosești webmail accesat prin browser sau client desktop cu STARTTLS. cPanel AutoSSL îl include by default dacă bifezi subdomeniul.

Cât costă să migrez de la SSL plătit la Let's Encrypt?

Zero, doar timpul tău. Instalezi Let's Encrypt în paralel, schimbi certificatul activ în config server, verifici că totul merge. Sub 30 minute pentru un site simplu.

Concluzie

Pe scurt: pentru 95% din site-urile mici și mijlocii, Let's Encrypt DV gratuit este alegerea corectă. Browser-ul afișează același padlock ca la certificat plătit, procesatorii îl acceptă, Google îl rankuiește identic. Plătești pentru OV/EV doar dacă ai cerință explicită de compliance sau client corporate care impune contractual.

Setup minim: shared cu cPanel AutoSSL activat sau VPS cu certbot și renewal automat prin systemd timer. Pentru performanță și protecție DDoS, adaugi Cloudflare Universal SSL la edge în Full strict - nu Flexible.

Pro tip dev: monitorizează expirarea extern (UptimeRobot Pro, BetterStack) - nu te baza pe email-uri de la CA care ajung în spam. Un certificat expirat la 4 dimineața te costă mai mult în comenzi pierdute decât 5 ani de monitoring plătit.

Surse

  • https://letsencrypt.org/docs/
  • https://certbot.eff.org/instructions
  • https://developers.cloudflare.com/ssl/origin-configuration/ssl-modes/
  • https://hstspreload.org
  • https://docs.cpanel.net/cpanel/security/ssl-tls-status/
  • https://www.plesk.com/extensions/letsencrypt/