Visi raksti
HTTPS padlock with Let's Encrypt, Nginx, and Apache logos
  • 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.

3 min lasīšana

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 80 un ufw 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:

  1. Verificēs domēna īpašumtiesības, izmantojot HTTP izaicinājumu uz porta 80
  2. Lejupielādēs un instalēs sertifikātu
  3. Modificēs jūsu Nginx konfigurāciju, lai iespējotu HTTPS uz porta 443
  4. 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:

  1. Verificēs domēna īpašumtiesības
  2. Lejupielādēs sertifikātu
  3. Izveidos jaunu SSL virtuālā resursdatora konfigurāciju /etc/apache2/sites-available/yourdomain.com-le-ssl.conf
  4. 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-age laiku. Rūpīgi testējiet pirms iespējošanas un neiestatiet preload, 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ā izmantojiet certbot 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-age loga 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.