Let's Encrypt SSL sertifikāts Nginx serverim ar certbot
Palaist serverī ar vienu komandu (vispirms pārbaudiet skripta saturu zemāk):
curl -sSL https://cp.lv/scripts/besplatnyj-ssl-lets-encrypt.sh | sudo bash…vai ar wget:
wget -qO- https://cp.lv/scripts/besplatnyj-ssl-lets-encrypt.sh | sudo bashSkripta saturs besplatnyj-ssl-lets-encrypt.sh:
#!/usr/bin/env bash
# Let's Encrypt sertifikāta izdošana Nginx serverim
set -e
export DEBIAN_FRONTEND=noninteractive
DOMAIN=example.com
[email protected]
# 1. Atvērt portus 80 un 443
sudo ufw allow 'Nginx Full' || true
# 2. Uzstādīt certbot ar Nginx spraudni
sudo apt-get update
sudo apt-get install -y certbot python3-certbot-nginx
# 3. Izdot sertifikātu un iestatīt HTTPS novirzi (neinteraktīvi)
sudo certbot --nginx -d ${DOMAIN} -d www.${DOMAIN} \
--non-interactive --agree-tos -m ${EMAIL} --redirect
# 4. Pārbaudīt Nginx konfigurāciju un automātisko atjaunošanu
sudo nginx -t && sudo systemctl reload nginx
sudo certbot renew --dry-run
echo "Gatavs: HTTPS domēnam ${DOMAIN} ieslēgts, automātiskā atjaunošana iestatīta."
Let’s Encrypt ir bezpeļņas sertifikācijas centrs, kas izsniedz TLS sertifikātus bez maksas: pats sertifikāts neko nemaksā, bet certbot to izdod un atjauno automātiski. Zemāk — kā ieslēgt HTTPS Nginx vietnei dažu minūšu laikā.
Kas nepieciešams iepriekš
- Domēns, kura A ieraksts norāda uz jūsu servera IP.
- Strādājošs Nginx server block ar korektu
server_name. - Atvērti porti 80 un 443:
sudo ufw allow 'Nginx Full'
Ports 80 ir obligāts — pa to Let’s Encrypt pārbauda domēna piederību (HTTP-01 challenge).
Ja server block vēl nav izveidots, atveriet konfigurāciju redaktorā (nano, vim vai mcedit):
sudo nano /etc/nginx/sites-available/example.com
Minimāla HTTP konfigurācija domēna pārbaudei (vēlāk certbot te pierakstīs HTTPS):
server {
listen 80;
server_name example.com www.example.com;
root /var/www/example.com;
index index.html;
}
Vai arī izveidojiet konfigurāciju uzreiz ar vienu komandu — nokopējiet un ielīmējiet konsolē (pēdiņas 'EOF' ir svarīgas, lai Nginx neaiztiktu $ mainīgos):
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
1. solis. Certbot uzstādīšana
Ieteicamais veids ir caur snap — tur vienmēr ir svaigākā versija:
sudo snap install core && sudo snap refresh core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
Alternatīva caur apt (ja snap nav pieejams):
sudo apt install certbot python3-certbot-nginx -y
2. solis. Sertifikāta izdošana
Nginx spraudnis pats atradīs vajadzīgo server block, izdos sertifikātu un ierakstīs HTTPS iestatījumus:
sudo certbot --nginx -d example.com -d www.example.com
Certbot pajautās e-pastu (paziņojumiem par termiņa beigām) un piekrišanu noteikumiem. Uz jautājumu par novirzi izvēlieties variantu ar pāradresāciju HTTP → HTTPS. Pēc veiksmīgas izdošanas sertifikāts saglabāsies mapē /etc/letsencrypt/live/example.com/.
3. solis. Ko certbot pievieno konfigurācijā
Pēc izdošanas server block parādīsies rindas:
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;
Un atsevišķs novirzes bloks no 80. porta uz HTTPS. Pārbaudiet un pārlādējiet:
sudo nginx -t
sudo systemctl reload nginx
4. solis. Automātiskās atjaunošanas pārbaude
Let’s Encrypt sertifikāti darbojas 90 dienas. Certbot uzstāda systemd taimeri, kas tos atjauno automātiski. Pārbaudiet taimeri un izpildiet testa atjaunošanu:
systemctl list-timers | grep certbot
sudo certbot renew --dry-run
Ja --dry-run beidzās bez kļūdām, arī īstā atjaunošana izdosies. Nekas ar rokām nav jādara.
5. solis. HTTPS pārbaude
Atveriet https://example.com — adreses joslā parādīsies slēdzene. Ķēdi un termiņu var pārbaudīt no konsoles:
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -dates
Noderīgas certbot komandas
| Uzdevums | Komanda |
|---|---|
| Sertifikātu saraksts | sudo certbot certificates |
| Atjaunot tūlīt | sudo certbot renew |
| Atsaukt sertifikātu | sudo certbot revoke --cert-name example.com |
| Pievienot domēnu | sudo certbot --nginx -d example.com -d shop.example.com |
Biežākie jautājumi
Vai Let’s Encrypt sertifikāts tiešām neko nemaksā? Jā, sertifikācijas centrs Let’s Encrypt izsniedz un atjauno sertifikātus bez maksas — tāds ir tā darbības modelis. Maksa ir tikai par pašu serveri, uz kura strādā vietne.
Ko darīt, ja certbot raksta «challenge failed»?
Visbiežāk domēna A ieraksts vēl nenorāda uz serveri vai ir slēgts ports 80. Pārbaudiet DNS (dig example.com) un ugunsmūra noteikumus.
Sertifikāts uz 90 dienām — vai būs jāatjauno ar rokām?
Nē. Certbot uzstāda automātiskās atjaunošanas taimeri. Pārbaudiet to ar komandu certbot renew --dry-run — ar to pietiek.
Vai var izdot wildcard sertifikātu (*.example.com)? Jā, taču vajadzēs DNS-01 challenge un spraudni jūsu DNS pakalpojumu sniedzējam, jo HTTP pārbaude apakšdomēniem neder.
HTTPS mūsdienās ir obligāts jebkurai vietnei: tas ietekmē gan lietotāju uzticēšanos, gan ranžēšanu. Izvietot vietni ar sertifikātu var uz tarifiem lapā VPS serveru noma, bet veikaliem un CMS — WordPress VPS.