Let's Encrypti SSL certbotiga Nginxile — juhend

Käivita serveris ühe käsuga (kontrolli enne skripti sisu allpool):

curl -sSL https://cp.lv/scripts/besplatnyj-ssl-lets-encrypt.sh | sudo bash

…või wgetiga:

wget -qO- https://cp.lv/scripts/besplatnyj-ssl-lets-encrypt.sh | sudo bash

Skripti sisu besplatnyj-ssl-lets-encrypt.sh:

#!/usr/bin/env bash
# Issue a Let's Encrypt certificate for Nginx
set -e
export DEBIAN_FRONTEND=noninteractive

DOMAIN=example.com
[email protected]

# 1. Open ports 80 and 443
sudo ufw allow 'Nginx Full' || true

# 2. Install certbot with the Nginx plugin
sudo apt-get update
sudo apt-get install -y certbot python3-certbot-nginx

# 3. Issue the certificate and set up the HTTPS redirect (non-interactive)
sudo certbot --nginx -d ${DOMAIN} -d www.${DOMAIN} \
  --non-interactive --agree-tos -m ${EMAIL} --redirect

# 4. Check the Nginx config and automatic renewal
sudo nginx -t && sudo systemctl reload nginx
sudo certbot renew --dry-run

echo "Done: HTTPS is enabled for ${DOMAIN}, automatic renewal is configured."

Let’s Encrypt on mittetulunduslik sertifitseerimiskeskus, mis väljastab TLS-sertifikaate tasuta: sertifikaat ise ei maksa midagi ning utiliit certbot väljastab ja uuendab seda automaatselt. Allpool on kirjas, kuidas lülitada Nginxi saidil HTTPS sisse mõne minutiga.

Mida on eelnevalt vaja

  • Domeen, mille A-kirje osutab sinu serveri IP-le.
  • Töötav Nginxi server block korrektse server_name-ga.
  • Avatud pordid 80 ja 443:
sudo ufw allow 'Nginx Full'

Port 80 on kohustuslik — selle kaudu kontrollib Let’s Encrypt domeeni omandit (HTTP-01 challenge).

Kui server block pole veel loodud, ava konfiguratsioonifail redaktoris (nano, vim või mcedit):

sudo nano /etc/nginx/sites-available/example.com

Minimaalne HTTP-konfiguratsioon domeeni kontrolliks (hiljem lisab certbot siia HTTPS-i):

server {
    listen 80;
    server_name example.com www.example.com;
    root /var/www/example.com;
    index index.html;
}

Või loo konfiguratsioon tervikuna ühe käsuga — kopeeri ja kleebi konsooli (jutumärgid 'EOF' on olulised, et Nginx $-muutujaid ei puutuks):

sudo tee /etc/nginx/sites-available/example.com > /dev/null << 'EOF'
server {
    listen 80;
    server_name example.com www.example.com;
    root /var/www/example.com;
    index index.html;
}
EOF
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx

Samm 1. Certboti paigaldamine

Soovitatav viis on snap kaudu — seal on alati värske versioon:

sudo snap install core && sudo snap refresh core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot

Alternatiiv apt kaudu (kui snap pole saadaval):

sudo apt install certbot python3-certbot-nginx -y

Samm 2. Sertifikaadi väljastamine

Nginxi plugin leiab ise õige server block’i, väljastab sertifikaadi ja kirjutab HTTPS-i seaded sisse:

sudo certbot --nginx -d example.com -d www.example.com

Certbot küsib e-posti aadressi (aegumise teadete jaoks) ja nõustumist tingimustega. Ümbersuunamise küsimuse juures vali variant HTTP → HTTPS suunamisega. Pärast edukat väljastamist salvestatakse sertifikaat kausta /etc/letsencrypt/live/example.com/.

Samm 3. Mida certbot konfiguratsiooni lisab

Pärast väljastamist ilmuvad server block’i read:

listen 443 ssl;
ssl_certificate     /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

Ja eraldi ümbersuunamise plokk pordilt 80 HTTPS-ile. Kontrolli ja lae konfiguratsioon uuesti:

sudo nginx -t
sudo systemctl reload nginx

Samm 4. Automaatse uuendamise kontroll

Let’s Encrypti sertifikaadid kehtivad 90 päeva. Certbot paigaldab systemd-taimeri, mis uuendab neid automaatselt. Kontrolli taimerit ja tee testuuendus:

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

Kui --dry-run lõppes vigadeta, õnnestub ka päris uuendamine. Käsitsi pole vaja midagi teha.

Samm 5. HTTPS-i kontroll

Ava https://example.com — aadressiribale ilmub lukk. Sertifikaadiahelat ja kehtivusaega saab kontrollida konsoolist:

echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -dates

Kasulikud certboti käsud

Ülesanne Käsk
Sertifikaatide loend sudo certbot certificates
Uuenda kohe sudo certbot renew
Tühista sertifikaat sudo certbot revoke --cert-name example.com
Lisa domeen sudo certbot --nginx -d example.com -d shop.example.com

Korduma kippuvad küsimused

Kas Let’s Encrypti sertifikaat on tõesti tasuta? Jah, sertifitseerimiskeskus Let’s Encrypt väljastab ja uuendab sertifikaate tasuta — selline on selle mudel. Maksta tuleb ainult serveri eest, kus sait töötab.

Mida teha, kui certbot kirjutab «challenge failed»? Kõige sagedamini ei osuta domeeni A-kirje veel serverile või on port 80 kinni. Kontrolli DNS-i (dig example.com) ja tulemüüri reegleid.

Sertifikaat kehtib 90 päeva — kas pean seda käsitsi uuendama? Ei. Certbot paigaldab automaatse uuendamise taimeri. Kontrolli seda käsuga certbot renew --dry-run — sellest piisab.

Kas wildcard-sertifikaati (*.example.com) saab väljastada? Jah, kuid selleks on vaja DNS-01 challenge’it ja sinu DNS-teenusepakkuja pluginat, sest HTTP-kontroll alamdomeenide jaoks ei sobi.

HTTPS on täna igale saidile kohustuslik: see mõjutab nii kasutajate usaldust kui ka kohta otsingutulemustes. Sertifikaadiga saidi saab käivitada pakettidel lehel VPS-i rent, poodidele ja CMS-ile sobib WordPressi VPS.

Kristaps Bērziņš