Gå til innholdet

Cookie-innstillinger

Velg hvilke typer cookies du tillater. Du kan når som helst endre valget via Cookie-innstillinger nederst på hver side. Personvernerklæring

Nødvendige

Alltid på

Trengs for å logge inn, beholde handlekurven og huske valgene dine. Disse er alltid på.

Hvilke cookies?
  • weboke_sessie, weboke_klant, weboke_remember: økten din og at du forblir innlogget
  • weboke_basket: handlekurven din
  • wkBtwIncl: visning av priser med eller uten mva.
  • wok_cookies: cookievalget ditt, 12 måneder

Måler hvilken annonse som fører til et besøk eller en bestilling, slik at vi ikke betaler for annonser som ikke gir noe.

Hvilke cookies?
  • Google Ads via Google Tag Manager (_gcl_au, _gcl_aw), opptil 90 dager
  • OpenAI Ads, annonser i ChatGPT
  • wok_aff: hvilken partner som henviste deg til oss (partnerprogram), 60 dager

4,6

Land og språk

Hvert land har sin egen nettside, med priser og mva. for det landet.

Vis

https med Let's Encrypt

Modul 7: Domene, webserver og https · Lesetid: 12 minutter

Læringsmål: Etter denne leksjonen kan du bruke certbot til å bestille et gratis sertifikat fra Let's Encrypt for nginx, sende http videre til https, kontrollere den automatiske fornyelsen og løse de vanligste feilene ved en bestilling.

Nøkkelbegreper: sertifikat, sertifikatutsteder (CA), ACME, Let's Encrypt, domenevalidering, HTTP-01, DNS-01, TLS-ALPN-01, certbot, fornyelse, certbot renew --dry-run, gyldighetstid, ARI, rate limits, staging, CAA, videresending til https

Hvorfor https, og hva et sertifikat beviser

Uten https går alt mellom nettleser og server ukryptert over nettverket: passord, skjemaer, informasjonskapsler. Alle underveis (et offentlig wifi-nett, en hacket ruter) kan lese med eller endre noe. Nettlesere merker derfor http-nettsteder som "ikke sikker", og noen funksjoner virker bare over https. For et passordhvelv som Vaultwarden (leksjon 9.4) er https til og med påkrevd.

https bruker TLS, og til det trenger serveren din et sertifikat: et bevis, signert av en sertifikatutsteder (CA) som nettleserne stoler på, for at denne nøkkelen hører til dette navnet. Et vanlig sertifikat beviser bare at den som bestiller kontrollerer domenenavnet (domenevalidering). Det sier ingenting om hvem du er eller om du er til å stole på.

Let's Encrypt er en gratis CA som bare utsteder domenevaliderte sertifikater, helt automatisk via ACME-protokollen. Et program på serveren din (ACME-klienten) bestiller sertifikatet, beviser at det kontrollerer navnet, installerer det og fornyer det i tide. Denne leksjonen bruker certbot, klienten fra EFF. Caddy (leksjon 7.4) har en innebygd ACME-klient.

Hvordan beviser du at du kontrollerer navnet?

Let's Encrypt har tre typer utfordringer (challenges):

UtfordringHvordanPortWildcard (*.example.com)
HTTP-01legge en fil under http://<naam>/.well-known/acme-challenge/80nei
DNS-01legge inn en TXT-post _acme-challenge.<naam>ingenja
TLS-ALPN-01vise et spesielt sertifikat under TLS-håndtrykket443nei

For en vanlig VPS med et nettsted er HTTP-01 enklest. Da må:

  • navnet peke til serveren din med A (og AAAA) (leksjon 7.1);
  • port 80 være åpen for hele verden, også om nettstedet ellers bare bruker https. Let's Encrypt validerer bare via port 80 og fra flere steder på internett; du kan ikke legge inn de adressene i brannmuren;
  • serveren din svare likt over IPv4 og IPv6. Har navnet en AAAA-post, prøver Let's Encrypt IPv6 først. Bare hvis IPv6 ikke gir noen forbindelse i det hele tatt, faller den tilbake til IPv4.

DNS-01 trenger du for et wildcardsertifikat, eller hvis serveren ikke kan nås utenfra. Da må ACME-klienten kunne endre DNS-en din, som regel via en API-nøkkel fra DNS-leverandøren. Den nøkkelen kan endre hele DNS-en din: ta vare på den like nøye som et passord.

Installere certbot

Utviklerne av certbot anbefaler snap-pakken, fordi den alltid har nyeste versjon. På Debian og Ubuntu kan du også bare hente den fra pakkekilden:

anna@web1:~$ sudo apt install certbot python3-certbot-nginx

Versjonen fra distribusjonen er eldre, men får sikkerhetsoppdateringer via apt (leksjon 4.1 og 4.2), og det passer med resten av dette kurset. Velg én av de to, ikke begge: to installasjoner går i beina på hverandre når de skal fornye.

Bestille et sertifikat

Med nettstedet fra leksjon 7.2 allerede i drift på port 80:

anna@web1:~$ sudo certbot --nginx -d example.com -d www.example.com
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Enter email address or hit Enter to skip.
 (Enter 'c' to cancel):
...
Requesting a certificate for example.com and www.example.com

Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/example.com/fullchain.pem
Key is saved at:         /etc/letsencrypt/live/example.com/privkey.pem
This certificate expires on 2027-02-07.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.

Deploying certificate
Successfully deployed certificate for example.com to /etc/nginx/sites-enabled/example.com
Successfully deployed certificate for www.example.com to /etc/nginx/sites-enabled/example.com
Congratulations! You have successfully enabled HTTPS on https://example.com and https://www.example.com

(Dato og detaljer er et eksempel.) Plugin-en --nginx gjør tre ting: den setter midlertidig opp utfordringen, henter sertifikatet og endrer server-blokken din med en listen 443 ssl-blokk og en videresending fra http til https. Vil du heller gjøre det selv, bruker du certbot certonly --nginx og legger linjene inn i konfigurasjonen selv.

Noen ting du bør passe på:

  • Bestill alle navnene som hører til nettstedet på én gang (-d per navn). Hvert navn må peke til serveren, ellers mislykkes hele bestillingen.
  • Den private nøkkelen (privkey.pem) ligger i /etc/letsencrypt/live/ og kan bare leses av root. Ikke kopier den til andre steder, og legg den aldri i en sikkerhetskopi som andre kan lese.
  • E-postadressen er valgfri. Siden juni 2025 sender Let's Encrypt ikke lenger e-post når et sertifikat snart går ut. Du må altså selv overvåke at fornyelsen lykkes (leksjon 8.3).

Sende http videre til https

Etter certbot ser konfigurasjonen din omtrent slik ut (ryddet; certbot legger selv til kommentarer # managed by Certbot og noen ganger if-linjer):

server {
    listen 80;
    listen [::]:80;
    server_name example.com www.example.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name example.com www.example.com;
    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;
    root /var/www/example.com;
    ...
}

Den første blokken sender alt over http videre til samme navn og samme sti over https, med en permanent videresending (301). Utfordringsfilen for fornyelse virker fortsatt: Let's Encrypt følger den videresendingen. Den andre blokken er selve nettstedet. Vil du også sende www videre til navnet uten prefiks (eller omvendt), gjør du det i en egen blokk, slik at besøkende ser ett fast navn.

Fornyelse: automatisk, og kontrollert

Et sertifikat fra Let's Encrypt er nå gyldig i 90 dager. Det blir kortere: Let's Encrypt har varslet at standardprofilen fra 10. februar 2027 utsteder sertifikater på 64 dager og fra 16. februar 2028 på 45 dager. Manuell fornyelse er derfor ikke et alternativ; det må skje automatisk.

Ved installasjonen legger certbot inn en systemd-timer (eller en cron-linje) som to ganger om dagen sjekker om et sertifikat må fornyes. Kontroller at den finnes, og test fornyelsen med en prøvebestilling:

anna@web1:~$ systemctl list-timers 'certbot*'
NEXT                        LEFT    LAST PASSED UNIT          ACTIVATES
Mon 2026-11-09 22:41:00 CET 9h left -    -      certbot.timer certbot.service
anna@web1:~$ sudo certbot renew --dry-run
...
Congratulations, all simulated renewals succeeded:
  /etc/letsencrypt/live/example.com/fullchain.pem (success)

Etter fornyelsen må nginx også laste inn det nye sertifikatet. Med nginx-plugin-en ordner certbot det selv; bruker du certonly, legger du inn en deploy hook som laster nginx på nytt, for eksempel et kjørbart skript i /etc/letsencrypt/renewal-hooks/deploy/ med systemctl reload nginx.

Gode ACME-klienter bruker ARI (ACME Renewal Information): Da sier Let's Encrypt selv når et sertifikat skal fornyes, for eksempel tidligere hvis noe er galt med en serie sertifikater. Hold derfor klienten oppdatert.

Når en bestilling mislykkes

Melding (forkortet)ÅrsakLøsning
Timeout during connect (likely firewall problem)port 80 er stengt, eller navnet peker til en annen adressebrannmur (leksjon 5.2), A/AAAA (leksjon 7.1)
Invalid response from http://.../.well-known/acme-challenge/...: 404en annen server eller en annen server-blokk svarer, ofte via IPv6listen [::]:80, sjekk AAAA-posten
CAA record for example.com prevents issuanceen CAA-post tillater bare en annen utstederendre CAA (leksjon 7.1)
too many certificates already issueden rate limitvent; test med staging

Let's Encrypt har rate limits for å hindre misbruk. De viktigste: maks 50 nye sertifikater per registrert domene per 7 dager, maks 5 sertifikater for nøyaktig samme sett med navn per 7 dager, og maks 5 mislykkede valideringer per navn per time. Prøver du deg frem og bestiller om og om igjen, når du fort grensen. Test derfor med staging-miljøet, som har mye rausere grenser, men gir sertifikater som nettlesere ikke stoler på:

anna@web1:~$ sudo certbot certonly --nginx --staging -d test.example.com

Virker det der, bestiller du det ekte sertifikatet.

På AlmaLinux og Rocky Linux

Der kommer certbot fra EPEL (dnf install certbot python3-certbot-nginx) eller som snap. Plugin-en og kommandoene er de samme. Husk firewalld (--add-service=http --add-service=https) og SELinux hvis sertifikatene ligger på et uvanlig sted.

I praksis

Med en webhotellpakke ordner kontrollpanelet sertifikatet for deg (hos WebOké og hos andre leverandører med DirectAdmin, cPanel eller Plesk). På en VPS gjør du det selv, med certbot, Caddy eller ACME-klienten som følger med programvaren din. Det gjelder hos alle leverandører.

Sammendrag

  • Et sertifikat fra Let's Encrypt beviser at du kontrollerer navnet; certbot bestiller, installerer og fornyer det via ACME.
  • HTTP-01 krever at port 80 er åpen, for alle, og samme svar over IPv4 og IPv6; DNS-01 er for wildcards.
  • certbot --nginx -d ... -d ... ordner sertifikatet og videresendingen til https; bestill alle navnene til et nettsted på én gang.
  • Sertifikater er nå gyldige i 90 dager og blir kortere; kontroller timeren og certbot renew --dry-run, og overvåk utløpsdatoen selv.
  • Test med --staging for å unngå rate limits; vær oppmerksom på CAA.

Quiz

1. Nettstedet ditt skal bare kunne nås via https. Kan du da stenge port 80 i brannmuren hvis du bruker HTTP-01?



2. Du vil ha et sertifikat for *.example.com. Hvilken utfordring trenger du?



3. Bestillingen feiler med 404 på utfordringsfilen, mens curl http://example.com/ viser nettstedet ditt over IPv4. Hva er den mest sannsynlige årsaken?



4. Hvorfor er automatisk fornyelse viktigere enn noen gang?



5. Du eksperimenterer og har allerede bestilt samme sertifikat fire ganger i dag. Hva gjør du før neste forsøk?



Oppgave

Oppgave Z7.3: https med et gyldig sertifikat. Bestill et sertifikat for nettstedet ditt (med certbot eller Caddy), send http videre til https og test fornyelsen med certbot renew --dry-run (med Caddy: se i loggene om sertifikatet er hentet). Fyll inn navnet på nettstedet ditt. Programmet åpner en TLS-forbindelse til port 443 og kontrollerer om sertifikatet er gyldig, er signert av en utsteder som er til å stole på og dekker navnet ditt, og henter deretter http://<naam>/ for å se om du sender videre til https. I tillegg fyller du inn når sertifikatet ditt går ut og hvordan fornyelsen er ordnet hos deg.

Oppgave Z7.3: https med et gyldig sertifikat

Bare for påmeldte kursdeltakere. Vi åpner https://<naam>/ og http://<naam>/ slik en nettleser gjør, fra webserveren vår.




Det du fyller inn, og det vi finner, lagrer vi ikke. Nettleseren din husker svarene dine og om du har bestått oppgaven. Er du logget inn, lagrer vi kun at du har (nesten) bestått oppgaven i Mine kurs; der kan du også slette det.

Les mer

Et øyeblikk …

Sett opp domenene dine

Ordne for hvert domene navnetjenerne, koblingen til hostingen din og hvem som blir innehaver.

Laster inn domenene dine…