Let's Encrypt SSL su certbot Nginx serveryje
Paleiskite serveryje viena komanda (pirmiausia patikrinkite skripto turinį žemiau):
curl -sSL https://cp.lv/scripts/besplatnyj-ssl-lets-encrypt.sh | sudo bash…arba su wget:
wget -qO- https://cp.lv/scripts/besplatnyj-ssl-lets-encrypt.sh | sudo bashSkripto turinys 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 yra nekomercinė sertifikavimo įstaiga, kuri TLS sertifikatus išduoda be mokesčio: pats sertifikatas nieko nekainuoja, o išduodamas ir atnaujinamas automatiškai certbot įrankiu. Žemiau — kaip per kelias minutes įjungti HTTPS Nginx svetainei.
Ko reikia iš anksto
- Domenas, kurio A įrašas nukreiptas į jūsų serverio IP.
- Veikiantis Nginx server block su teisingu
server_name. - Atidaryti 80 ir 443 prievadai:
sudo ufw allow 'Nginx Full'
80 prievadas privalomas — juo Let’s Encrypt tikrina domeno valdymą (HTTP-01 challenge).
Jei server block dar nesukurtas, atidarykite konfigūraciją redaktoriuje (nano, vim arba mcedit):
sudo nano /etc/nginx/sites-available/example.com
Minimali HTTP konfigūracija domeno patikrai (vėliau certbot čia pridės HTTPS):
server {
listen 80;
server_name example.com www.example.com;
root /var/www/example.com;
index index.html;
}
Arba sukurkite visą konfigūraciją viena komanda — nukopijuokite ir įklijuokite į konsolę (kabutės 'EOF' svarbios, kad Nginx neliestų $ kintamųjų):
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 žingsnis. Certbot diegimas
Rekomenduojamas būdas — per snap, jame visada yra naujausia versija:
sudo snap install core && sudo snap refresh core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
Alternatyva per apt (jei snap nepasiekiamas):
sudo apt install certbot python3-certbot-nginx -y
2 žingsnis. Sertifikato išdavimas
Nginx papildinys pats suras reikiamą server block, išduos sertifikatą ir įrašys HTTPS nustatymus:
sudo certbot --nginx -d example.com -d www.example.com
Certbot paklaus el. pašto (pranešimams apie galiojimo pabaigą) ir sutikimo su sąlygomis. Ties klausimu apie peradresavimą pasirinkite variantą su nukreipimu HTTP → HTTPS. Sėkmingai išdavus, sertifikatas bus išsaugotas kataloge /etc/letsencrypt/live/example.com/.
3 žingsnis. Ką certbot prideda į konfigūraciją
Po išdavimo server block atsiras eilutės:
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;
Ir atskiras peradresavimo blokas iš 80 prievado į HTTPS. Patikrinkite ir perkraukite:
sudo nginx -t
sudo systemctl reload nginx
4 žingsnis. Automatinio atnaujinimo patikra
Let’s Encrypt sertifikatai galioja 90 dienų. Certbot įdiegia systemd laikmatį, kuris juos atnaujina automatiškai. Patikrinkite laikmatį ir paleiskite bandomąjį atnaujinimą:
systemctl list-timers | grep certbot
sudo certbot renew --dry-run
Jei --dry-run baigėsi be klaidų — realus atnaujinimas taip pat pavyks. Rankomis nieko daryti nereikia.
5 žingsnis. HTTPS patikra
Atidarykite https://example.com — adreso juostoje pasirodys spynelė. Grandinę ir galiojimo laiką galima patikrinti iš konsolės:
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -dates
Naudingos certbot komandos
| Užduotis | Komanda |
|---|---|
| Sertifikatų sąrašas | sudo certbot certificates |
| Atnaujinti dabar | sudo certbot renew |
| Atšaukti sertifikatą | sudo certbot revoke --cert-name example.com |
| Pridėti domeną | sudo certbot --nginx -d example.com -d shop.example.com |
Dažni klausimai
Ar Let’s Encrypt sertifikatas tikrai nieko nekainuoja? Taip, Let’s Encrypt sertifikavimo įstaiga išduoda ir atnaujina sertifikatus be mokesčio — toks jos modelis. Mokate tik už patį serverį, kuriame veikia svetainė.
Ką daryti, jei certbot rašo „challenge failed“?
Dažniausiai domeno A įrašas dar nenukreiptas į serverį arba uždarytas 80 prievadas. Patikrinkite DNS (dig example.com) ir ugniasienės taisykles.
Sertifikatas galioja 90 dienų — ar teks atnaujinti rankomis?
Ne. Certbot įdiegia automatinio atnaujinimo laikmatį. Patikrinkite jį komanda certbot renew --dry-run — to pakanka.
Ar galima išduoti pakaitos simbolio sertifikatą (*.example.com)? Taip, bet reikės DNS-01 challenge ir jūsų DNS tiekėjo papildinio, nes HTTP patikra subdomenams netinka.
HTTPS šiandien būtinas kiekvienai svetainei: jis veikia ir vartotojų pasitikėjimą, ir reitingavimą. Svetainę su sertifikatu galite paleisti planuose puslapyje VPS serverio nuoma, o parduotuvėms ir CMS tiks WordPress VPS.