
- HTTPS
- SSL
- Let's Encrypt
- Certbot
- Nginx
- Apache
- Security
HTTPS iestatīšana ar Let's Encrypt uz Nginx un Apache
Pilnīga rokasgrāmata bezmaksas TLS sertifikātu iegūšanai un automātiskai atjaunošanai no Let's Encrypt, izmantojot Certbot uz Ubuntu — gan Nginx, gan Apache — ar HTTP uz HTTPS novirzēm, HSTS un problēmu novēršanu.
Let’s Encrypt nodrošina bezmaksas, automātiski atjaunotas TLS sertifikātus. Certbot ir oficiālais klients, kas instalē sertifikātu un konfigurē tīmekļa serveri ar vienu komandu. Šī rokasgrāmata aptver gan Nginx, gan Apache uz Ubuntu 22.04 / 24.04.
Priekšnosacījumi
Pirms sākat:
- Domēna nosaukums, kas norāda uz jūsu servera publisko IP (DNS A ierakstam jābūt izplatītam)
- Nginx vai Apache instalēts un darbojas
- Porti 80 un 443 atvērti ugunsmūrī (
ufw allow 80unufw allow 443) - Pamata virtuālais resursdators / servera bloks jau konfigurēts jūsu domēnam
Nginx: Certbot instalēšana un sertifikāta iegūšana
1. Certbot instalēšana
sudo apt update
sudo apt install certbot python3-certbot-nginx
2. Sertifikāta iegūšana un instalēšana
Aizstājiet yourdomain.com ar savu faktisko domēnu:
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com
Certbot:
- Verificēs domēna īpašumtiesības, izmantojot HTTP izaicinājumu uz porta 80
- Lejupielādēs un instalēs sertifikātu
- Modificēs jūsu Nginx konfigurāciju, lai iespējotu HTTPS uz porta 443
- Pievienot novirzīšanu no HTTP uz HTTPS
Procesa laikā tiek jautāta e-pasta adrese (izmantota derīguma termiņa paziņojumiem) un vai novirzīt HTTP trafiku.
3. Ko Certbot pievieno Nginx konfigurācijai
Pēc Certbot palaišanas jūsu servera bloks saturēs papildinājumus, kas līdzīgi:
server {
listen 443 ssl;
server_name yourdomain.com www.yourdomain.com;
ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
# ... jūsu esošie location bloki
}
server {
listen 80;
server_name yourdomain.com www.yourdomain.com;
return 301 https://$host$request_uri;
}
4. Konfigurācijas pārbaude
sudo nginx -t
sudo systemctl reload nginx
Apmeklējiet https://yourdomain.com pārlūkprogrammā. Jums jāredz derīga slēdzenes ikona.
Apache: Certbot instalēšana un sertifikāta iegūšana
1. Certbot instalēšana
sudo apt update
sudo apt install certbot python3-certbot-apache
2. Nepieciešamo Apache moduļu iespējošana
sudo a2enmod ssl
sudo a2enmod rewrite
sudo systemctl restart apache2
3. Sertifikāta iegūšana un instalēšana
sudo certbot --apache -d yourdomain.com -d www.yourdomain.com
Certbot:
- Verificēs domēna īpašumtiesības
- Lejupielādēs sertifikātu
- Izveidos jaunu SSL virtuālā resursdatora konfigurāciju
/etc/apache2/sites-available/yourdomain.com-le-ssl.conf - Pievienot HTTP uz HTTPS novirzīšanu sākotnējam virtuālajam resursdatoram
4. Ko Certbot izveido Apache
Ģenerētais SSL virtuālais resursdators izskatās šādi:
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName yourdomain.com
ServerAlias www.yourdomain.com
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/yourdomain.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/yourdomain.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
# ... jūsu esošās direktīvas
</VirtualHost>
</IfModule>
Un tas modificē HTTP virtuālo resursdatoru, pievienojot:
RewriteEngine on
RewriteCond %{SERVER_NAME} =yourdomain.com [OR]
RewriteCond %{SERVER_NAME} =www.yourdomain.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
5. Pārbaude
sudo apachectl configtest
sudo systemctl reload apache2
Automātiskā sertifikātu atjaunošana
Let’s Encrypt sertifikāti beidzas pēc 90 dienām. Certbot instalē systemd taimeri, kas automātiski atjauno sertifikātus, kad tie ir 30 dienas pirms derīguma termiņa.
Taimera statusa pārbaude
sudo systemctl status certbot.timer
Jums jāredz active (waiting). Taimeris darbojas divreiz dienā.
Atjaunošanas procesa testēšana
Palaidiet sausu skrējienu, lai pārliecinātos, ka atjaunošana izdotos, faktiski neko nemodificējot:
sudo certbot renew --dry-run
Veiksmīgs sausais skrējiens izvada: Congratulations, all simulated renewals succeeded.
Manuāla atjaunošana
Ja jums nekavējoties jāatjauno:
sudo certbot renew
Certbot atjauno tikai sertifikātus, kas ir 30 dienu robežās. Piespiedu atjaunošana neatkarīgi no tā:
sudo certbot renew --force-renewal
HSTS pievienošana (ieteicama)
HTTP Strict Transport Security (HSTS) liek pārlūkprogrammām vienmēr izmantot HTTPS jūsu domēnam, pat ja lietotājs ievada http://. Pievienojiet to savam SSL servera blokam pēc tam, kad esat pārliecināts, ka HTTPS darbojas pareizi.
Nginx:
server {
listen 443 ssl;
# ... citas direktīvas
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
}
Apache (SSL <VirtualHost *:443> bloka iekšpusē):
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
Vispirms iespējojiet headers moduli Apache:
sudo a2enmod headers
sudo systemctl reload apache2
Brīdinājums: Kad HSTS ir aktīvs, pārlūkprogrammas atteiks HTTP savienojumus uz
max-agelaiku. Rūpīgi testējiet pirms iespējošanas un neiestatietpreload, ja nevēlaties iesniegt HSTS iepriekšielādes sarakstā.
Vairāki domēni uz viena servera
Varat izgatavot sertifikātus vairākiem domēniem. Katram domēnam nepieciešama sava Certbot komanda vai varat tos kombinēt:
# Katrs domēns atsevišķi (atsevišķi sertifikāti)
sudo certbot --nginx -d site-one.com -d www.site-one.com
sudo certbot --nginx -d site-two.com -d www.site-two.com
# Apvienots vienā sertifikātā (līdz 100 SAN vienā sertifikātā)
sudo certbot --nginx -d site-one.com -d www.site-one.com -d site-two.com -d www.site-two.com
Atsevišķus sertifikātus ir vieglāk pārvaldīt neatkarīgi. Kombinētie sertifikāti samazina izsekojamo failu skaitu.
Aizstājzīmju sertifikāti
Aizstājzīmju sertifikāti aptver *.yourdomain.com (visus apakšdomēnus). Tie prasa DNS bāzētu verifikāciju, nevis HTTP, tāpēc jāpabeidz DNS izaicinājums manuāli vai jāizmanto DNS nodrošinātāja spraudnis.
sudo certbot certonly \
--manual \
--preferred-challenges dns \
-d yourdomain.com \
-d "*.yourdomain.com"
Certbot lūgs jums pievienot _acme-challenge TXT ierakstu DNS. Pēc pievienošanas nospiediet Enter, lai turpinātu. Aizstājzīmju atjaunošanai arī nepieciešama DNS piekļuve, tāpēc automatizācija ir grūtāka bez atbalstīta DNS nodrošinātāja spraudņa.
Sertifikātu failu atrašanās vietas
Pēc izsniegšanas sertifikāti atrodas:
/etc/letsencrypt/live/yourdomain.com/
fullchain.pem — sertifikāts + starpposma ķēde (izmantot tīmekļa serveros)
privkey.pem — privātā atslēga
cert.pem — tikai sertifikāts (reti vajadzīgs tieši)
chain.pem — tikai starpposma ķēde
Tās ir simboliskās saites uz faktiskajiem versētajiem failiem /etc/letsencrypt/archive/.
Problēmu novēršana
Error: Could not bind to TCP port 80
Cits process jau klausās portā 80 (parasti jūsu tīmekļa serveris). Certbot autonomais režīms prasa brīvu portu 80. Izmantojot --nginx vai --apache spraudni, Certbot automātiski aizņemas tīmekļa servera portu — konflikta nav.
Connection timed out during challenge
Portu 80 bloķē ugunsmūris. Atveriet to:
sudo ufw allow 80
sudo ufw allow 443
sudo ufw reload
DNS problem: NXDOMAIN
Jūsu domēna A ieraksts vēl nav izplatīts vai norāda uz nepareizu IP. Pārbaudiet ar:
dig +short yourdomain.com
Certificate not trusted pārlūkprogrammā
Iespējams, testējat izstrādes vidē, vai sertifikāts tika izsniegts citam domēnam. Pārbaudiet ar:
sudo certbot certificates
Ātruma ierobežojumi
Let’s Encrypt piemēro ātruma ierobežojumus (5 dublikātu sertifikāti nedēļā katram domēnam). Ja tos sasniegsit, izmantojiet izstrādes vidi testēšanai:
sudo certbot --nginx --staging -d yourdomain.com
Izstrādes sertifikātus pārlūkprogrammas neuzskata par uzticamiem, bet tie nepatērē ražošanas ātruma ierobežojumus.
Svarīgas piezīmes
- Sertifikāti ir derīgi 90 dienas un tiek automātiski atjaunoti pie 60 atlikušajām dienām.
- Vienmēr palaidiet
--dry-run, lai pārliecinātos, ka atjaunošana darbojas, pirms paļaujaties uz taimeri. - Nekad manuāli nedzēsiet failus
/etc/letsencrypt/— tā vietā izmantojietcertbot delete. - Ja būtiski maināt servera konfigurāciju, palaidiet Certbot atkārtoti, lai pārliecinātos, ka tas joprojām var atrast un modificēt pareizos blokus.
- HSTS
max-ageloga ietvaros nav atceļams — iespējojiet to tikai pēc tam, kad HTTPS iestatīšana ir stabila.
Bieži uzdotie jautājumi
Vai Let’s Encrypt ir piemērots ražošanai?
Jā. Let’s Encrypt sertifikātus uzskata par uzticamiem visas lielākās pārlūkprogrammas, un tos izmanto miljoniem ražošanas vietņu. 90 dienu derīgums un automātiskā atjaunošana ir apzināts dizaina lēmums — īss mūžs samazina atslēgas kompromitācijas radītos bojājumus.
Vai varu izmantot Let’s Encrypt ar apakšdomēnu?
Jā. Iekļaujiet apakšdomēnu -d karogā: sudo certbot --nginx -d sub.yourdomain.com. Tas saņems savu sertifikātu (vai var tikt apvienots ar apeksa domēnu vienā sertifikātā).
Kas notiek, ja automātiskā atjaunošana neizdodas?
Let’s Encrypt sūta derīguma termiņa paziņojumu e-pastus uz adresi, ko reģistrējāt ar Certbot. Certbot arī reģistrē atjaunošanas mēģinājumus /var/log/letsencrypt/letsencrypt.log. Lielākā daļa kļūmju ir nepareizi konfigurēta tīmekļa servera dēļ, kas bloķē HTTP izaicinājumu — izlabojiet konfigurāciju un palaidiet certbot renew manuāli.
Vai man jāatver porti pastāvīgi?
Jā — ports 443 HTTPS trafikai. Ports 80 nepieciešams HTTP izaicinājumam izsniegšanas un atjaunošanas laikā un HTTP uz HTTPS novirzīšanai. Abiem jābūt atvērtiem.
Vai varu izmantot Let’s Encrypt ar nestandarta portu?
HTTP izaicinājums prasa portu 80. Ja serveris atrodas aiz ugunsmūra vai slodzes balansiera, kas pārtrauc nestandarta portā, iespējams, jāizmanto DNS izaicinājums vai jākonfigurē porta pārsūtīšana, lai ports 80 publiskajā IP sasniegtu Certbot.