{"id":53,"date":"2026-06-11T16:38:51","date_gmt":"2026-06-11T16:38:51","guid":{"rendered":"https:\/\/shattered.io\/dk\/2026\/06\/11\/ssl-tls-certifikat-certbot-2026\/"},"modified":"2026-06-11T16:38:51","modified_gmt":"2026-06-11T16:38:51","slug":"ssl-tls-certifikat-certbot-2026","status":"publish","type":"post","link":"https:\/\/shattered.io\/dk\/2026\/06\/11\/ssl-tls-certifikat-certbot-2026\/","title":{"rendered":"Gratis SSL\/TLS-certifikat: 12 trin med Certbot [2026]"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Et <strong>SSL certifikat<\/strong> er ikke l\u00e6ngere noget, du s\u00e6tter op \u00e9n gang og glemmer. I 2026 er <strong>TLS<\/strong> blevet en automatiseret, kortlivet og uafladelig del af enhver server. Let&#8217;s Encrypt udsteder nu certifikater med blot 90 dages standardgyldighed, og siden 15. januar 2026 kan du v\u00e6lge kortlivede certifikater p\u00e5 kun 160 timer (lidt over seks dage). Samtidig har CA\/Browser Forum besluttet at sk\u00e6re den maksimale levetid for et <strong>SSL certifikat<\/strong> helt ned til 47 dage frem mod 2029. Manuel h\u00e5ndtering er d\u00f8d. Automatisering er det eneste, der virker.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Denne vejledning tager dig gennem 12 konkrete trin, hvor du udsteder, installerer, h\u00e6rder og automatisk fornyer et gratis <strong>TLS<\/strong>-certifikat med Let&#8217;s Encrypt og Certbot 5.6.0 p\u00e5 Nginx. Du f\u00e5r fungerende kode, output-eksempler, otte fejlfindingspunkter og et komplet projekt med Docker. N\u00e5r du er f\u00e6rdig, har din server et gr\u00f8nt h\u00e6ngel\u00e5s-ikon, en A-karakter p\u00e5 SSL Labs og en fornyelse, der k\u00f8rer helt af sig selv. S\u00e6t cirka 30 minutter af.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"derfor-skal-du-automatisere-dit-tls-certifikat-i-2026\">Derfor skal du automatisere dit TLS-certifikat i 2026<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Reglerne for et <strong>SSL certifikat<\/strong> \u00e6ndrer sig hurtigere end nogensinde. Den 11. april 2025 godkendte CA\/Browser Forum afstemningen SC-081v3, som trinvist barberer den maksimale levetid for et offentligt betroet <strong>TLS<\/strong>-certifikat ned. Indtil videre har de fleste certifikater haft op til 398 dages levetid. Det stopper nu. Fra 15. marts 2026 falder loftet til 200 dage, fra 15. marts 2027 til 100 dage, og fra 15. marts 2029 til blot 47 dage. Samtidig forkortes perioden, hvor en dom\u00e6nevalidering kan genbruges, tilsvarende.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For Let&#8217;s Encrypt er det ikke noget problem, for de har altid presset p\u00e5 for korte levetider og automatisering. Et standardcertifikat fra Let&#8217;s Encrypt varer 90 dage, og Certbot fornyer det automatisk, n\u00e5r der er 30 dage tilbage. I 2026 gik Let&#8217;s Encrypt endnu videre med kortlivede certifikater p\u00e5 160 timer, generelt tilg\u00e6ngelige fra 15. januar 2026. De er designet til milj\u00f8er, hvor revokering er upraktisk, fordi et kompromitteret certifikat alligevel udl\u00f8ber inden for en uge.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Konsekvensen er klar. Hvis du fornyer dit <strong>SSL certifikat<\/strong> i h\u00e5nden, vil du f\u00f8r eller siden glemme det, og din side g\u00e5r ned med en advarsel, der skr\u00e6mmer hver eneste bes\u00f8gende v\u00e6k. Den eneste holdbare strategi er fuld automatisering med ACME-protokollen, som er standardiseret i RFC 8555. Resten af denne vejledning bygger netop s\u00e5dan en ops\u00e6tning, hvor dit certifikat fornyer sig selv, uanset om gr\u00e6nsen er 90 dage eller 47.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Dato<\/th><th>Maksimal certifikatlevetid<\/th><th>Genbrug af dom\u00e6nevalidering<\/th><\/tr><\/thead><tbody><tr><td>I dag (2026)<\/td><td>200 dage (Let&#8217;s Encrypt: 90 dage)<\/td><td>200 dage<\/td><\/tr><tr><td>15. marts 2026<\/td><td>200 dage<\/td><td>200 dage<\/td><\/tr><tr><td>15. marts 2027<\/td><td>100 dage<\/td><td>100 dage<\/td><\/tr><tr><td>15. marts 2029<\/td><td>47 dage<\/td><td>10 dage<\/td><\/tr><\/tbody><\/table><figcaption>Kilde: CA\/Browser Forum afstemning SC-081v3, godkendt 11. april 2025.<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"forudsaetninger-versioner-og-adgang\">Foruds\u00e6tninger: versioner og adgang<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">F\u00f8r du udsteder dit f\u00f8rste <strong>TLS<\/strong>-certifikat, skal nogle ting v\u00e6re p\u00e5 plads. Vejledningen er testet p\u00e5 Ubuntu 24.04 LTS, men kommandoerne virker stort set ens p\u00e5 Debian 12 og nyere. Det vigtigste krav er, at port 80 er \u00e5ben udadtil, for Let&#8217;s Encrypt skal kunne n\u00e5 din server for at validere, at du faktisk kontrollerer dom\u00e6net.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Komponent<\/th><th>Anbefalet version<\/th><th>Kontrolkommando<\/th><\/tr><\/thead><tbody><tr><td>Operativsystem<\/td><td>Ubuntu 24.04 LTS \/ Debian 12<\/td><td>lsb_release -a<\/td><\/tr><tr><td>Nginx<\/td><td>1.24 eller nyere<\/td><td>nginx -v<\/td><\/tr><tr><td>Certbot<\/td><td>5.6.0 (maj 2026)<\/td><td>certbot &#8211;version<\/td><\/tr><tr><td>snapd<\/td><td>2.61 eller nyere<\/td><td>snap version<\/td><\/tr><tr><td>OpenSSL<\/td><td>3.0 eller nyere<\/td><td>openssl version<\/td><\/tr><\/tbody><\/table><figcaption>Versioner verificeret mod Certbot 5.6.0, udgivet p\u00e5 PyPI 11. maj 2026.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Du skal desuden have: et registreret dom\u00e6ne, du kontrollerer (eksemplet bruger <code>eksempel.dk<\/code>), root- eller sudo-adgang til serveren, en offentlig IP-adresse, og en e-mailadresse til udl\u00f8bsvarsler. Hvis du vil udstede et wildcard-certifikat senere i trin 9, skal du ogs\u00e5 have API-adgang til din DNS-udbyder. Har du styr p\u00e5 grundbegreberne bag h\u00e6ngel\u00e5sen, kan du genopfriske dem i vores artikel om <a href=\"\/https-tls-explained\/\">HTTPS og TLS forklaret<\/a>, inden du g\u00e5r videre.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"saadan-fungerer-acme-lets-encrypt-og-certbot\">S\u00e5dan fungerer ACME, Let&#8217;s Encrypt og Certbot<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Hele systemet hviler p\u00e5 ACME, Automatic Certificate Management Environment, standardiseret i RFC 8555. ACME lader en klient (Certbot) bevise over for en certifikatmyndighed (Let&#8217;s Encrypt), at du kontrollerer et dom\u00e6ne, uden at et menneske skal l\u00e6se en e-mail og klikke p\u00e5 et link. Beviset leveres gennem en <em>challenge<\/em>, og der findes tre typer. Valget af challenge afg\u00f8r, om du kan udstede et almindeligt eller et wildcard <strong>SSL certifikat<\/strong>.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Challenge-type<\/th><th>S\u00e5dan valideres<\/th><th>Wildcard?<\/th><th>Bedst til<\/th><\/tr><\/thead><tbody><tr><td>HTTP-01<\/td><td>Certbot l\u00e6gger en fil under \/.well-known\/acme-challenge\/ p\u00e5 port 80<\/td><td>Nej<\/td><td>Almindelige enkeltdom\u00e6ner<\/td><\/tr><tr><td>DNS-01<\/td><td>Certbot opretter en TXT-post i din DNS-zone<\/td><td>Ja<\/td><td>Wildcard og servere uden port 80<\/td><\/tr><tr><td>TLS-ALPN-01<\/td><td>Validering sker over port 443 med en s\u00e6rlig ALPN-udvidelse<\/td><td>Nej<\/td><td>Reverse proxies og load balancers<\/td><\/tr><\/tbody><\/table><figcaption>De tre ACME-challenges defineret i RFC 8555.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">For de fleste websteder er HTTP-01 det rette valg, og det bruger vi i trin 5. Det kr\u00e6ver kun, at port 80 er \u00e5ben. Vil du have et wildcard-certifikat, der d\u00e6kker <code>*.eksempel.dk<\/code>, er du tvunget til at bruge DNS-01, fordi Let&#8217;s Encrypt n\u00e6gter at udstede wildcards via HTTP-01. Husk her en vigtig detalje fra Let&#8217;s Encrypt selv: et wildcard for <code>*.eksempel.dk<\/code> d\u00e6kker <strong>ikke<\/strong> det n\u00f8gne <code>eksempel.dk<\/code>, og det d\u00e6kker kun \u00e9t niveau, s\u00e5 <code>hej.farvel.eksempel.dk<\/code> falder udenfor.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"trin-1-peg-dit-domaene-mod-serveren-med-dns\">Trin 1: Peg dit dom\u00e6ne mod serveren med DNS<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Et <strong>SSL certifikat<\/strong> kan kun udstedes, hvis dom\u00e6net faktisk peger p\u00e5 din server. Opret en A-post (og en AAAA-post, hvis du bruger IPv6) hos din DNS-udbyder, der peger <code>eksempel.dk<\/code> og <code>www.eksempel.dk<\/code> mod serverens offentlige IP. DNS kan tage op til 24 timer om at sprede sig, men typisk sker det inden for f\u00e5 minutter. Verific\u00e9r resultatet, f\u00f8r du g\u00e5r videre, ellers fejler HTTP-01-valideringen senere.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Kontroll\u00e9r at dom\u00e6net peger p\u00e5 den rigtige IP\ndig +short A eksempel.dk\ndig +short A www.eksempel.dk\n\n# Forventet output (din servers offentlige IP):\n# 203.0.113.42\n# 203.0.113.42<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Hvis <code>dig<\/code> returnerer en tom linje eller en forkert IP, s\u00e5 ret DNS-posten og vent, til den er opdateret. Du kan tjekke spredningen globalt med <code>dig @8.8.8.8 eksempel.dk<\/code>, som sp\u00f8rger Googles offentlige resolver direkte. F\u00f8rst n\u00e5r begge navne peger korrekt, forts\u00e6tter du.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"trin-2-installer-og-konfigurer-nginx\">Trin 2: Installer og konfigurer Nginx<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Certbot skal kunne l\u00e6se din Nginx-konfiguration for automatisk at inds\u00e6tte <strong>TLS<\/strong>-direktiverne. Install\u00e9r Nginx, og opret et minimalt server-blok for dit dom\u00e6ne p\u00e5 port 80. Dette blok bruges b\u00e5de til selve siden og til at servere ACME-challenge-filen.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Install\u00e9r Nginx\nsudo apt update\nsudo apt install -y nginx\n\n# Opret server-blok\nsudo nano \/etc\/nginx\/sites-available\/eksempel.dk<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Inds\u00e6t f\u00f8lgende konfiguration. L\u00e6g m\u00e6rke til <code>root<\/code>-stien, for det er her, Certbot l\u00e6gger sin challenge-fil under HTTP-01.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>server {\n    listen 80;\n    listen [::]:80;\n    server_name eksempel.dk www.eksempel.dk;\n\n    root \/var\/www\/eksempel.dk;\n    index index.html;\n\n    location \/ {\n        try_files $uri $uri\/ =404;\n    }\n}<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code># Aktiv\u00e9r sitet og genindl\u00e6s\nsudo mkdir -p \/var\/www\/eksempel.dk\necho \"Hej fra eksempel.dk\" | sudo tee \/var\/www\/eksempel.dk\/index.html\nsudo ln -s \/etc\/nginx\/sites-available\/eksempel.dk \/etc\/nginx\/sites-enabled\/\nsudo nginx -t\nsudo systemctl reload nginx<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Kommandoen <code>nginx -t<\/code> tester konfigurationen, f\u00f8r du genindl\u00e6ser. F\u00e5r du <code>syntax is ok<\/code> og <code>test is successful<\/code>, er du klar. Bes\u00f8g <code>http:\/\/eksempel.dk<\/code> i en browser og bekr\u00e6ft, at du ser hilsenen, f\u00f8r du forts\u00e6tter til certifikatet.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"trin-3-aabn-port-80-og-443-i-firewallen\">Trin 3: \u00c5bn port 80 og 443 i firewallen<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Den hyppigste \u00e5rsag til at en HTTP-01-validering fejler er en lukket port 80. Let&#8217;s Encrypt-serverne skal kunne n\u00e5 din server udefra. \u00c5bn b\u00e5de port 80 (HTTP, til validering) og port 443 (HTTPS, til det f\u00e6rdige <strong>TLS<\/strong>-certifikat) i din firewall.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Med UFW (Ubuntu standard)\nsudo ufw allow 80\/tcp\nsudo ufw allow 443\/tcp\nsudo ufw reload\nsudo ufw status\n\n# Forventet output:\n# 80\/tcp                     ALLOW       Anywhere\n# 443\/tcp                    ALLOW       Anywhere<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Husk ogs\u00e5 eventuelle firewalls i skyen. Bruger du AWS, Azure, Hetzner eller DigitalOcean, har du sandsynligvis en sikkerhedsgruppe eller cloud-firewall, der skal \u00e5bnes separat. En lokal UFW-regel hj\u00e6lper ikke, hvis udbyderens firewall stadig blokerer port 80 udefra.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"trin-4-installer-certbot-via-snap\">Trin 4: Installer Certbot via snap<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Den officielt anbefalede installationsmetode til Certbot er snap. Apt-pakken halter ofte flere versioner bagud, og da reglerne for et <strong>SSL certifikat<\/strong> \u00e6ndrer sig hurtigt i 2026, vil du have den nyeste klient. Snap-pakken opdaterer sig selv og giver dig Certbot 5.6.0.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Fjern en eventuel gammel apt-version\nsudo apt remove -y certbot\n\n# Install\u00e9r snapd og Certbot\nsudo apt install -y snapd\nsudo snap install core\nsudo snap refresh core\nsudo snap install --classic certbot\n\n# G\u00f8r certbot-kommandoen tilg\u00e6ngelig\nsudo ln -s \/snap\/bin\/certbot \/usr\/bin\/certbot\n\n# Bekr\u00e6ft versionen\ncertbot --version\n# Forventet: certbot 5.6.0<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">F\u00e5r du en \u00e6ldre version, s\u00e5 k\u00f8r <code>sudo snap refresh certbot<\/code>. Foretr\u00e6kker du containere, findes Certbot ogs\u00e5 som OCI-image og kan installeres med pip, men snap er det mest gnidningsfrie valg p\u00e5 en almindelig server. Den fulde liste over metoder findes i <a href=\"https:\/\/eff-certbot.readthedocs.io\/en\/stable\/install.html\" rel=\"nofollow noopener\" target=\"_blank\">Certbots officielle installationsdokumentation<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"trin-5-udsted-dit-foerste-certifikat-med-http-01\">Trin 5: Udsted dit f\u00f8rste certifikat med HTTP-01<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Nu kommer det centrale \u00f8jeblik. Certbots Nginx-plugin udsteder dit <strong>TLS<\/strong>-certifikat, redigerer din Nginx-konfiguration automatisk og ops\u00e6tter en omdirigering fra HTTP til HTTPS. K\u00f8r kommandoen med begge dom\u00e6nenavne.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo certbot --nginx \\\n  -d eksempel.dk -d www.eksempel.dk \\\n  --email admin@eksempel.dk \\\n  --agree-tos \\\n  --no-eff-email \\\n  --redirect<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Certbot gennemf\u00f8rer HTTP-01-challenge, henter certifikatet og skriver det til disk. Et vellykket forl\u00f8b ser s\u00e5dan ud:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Successfully received certificate.\nCertificate is saved at: \/etc\/letsencrypt\/live\/eksempel.dk\/fullchain.pem\nKey is saved at:         \/etc\/letsencrypt\/live\/eksempel.dk\/privkey.pem\nThis certificate expires on 2026-09-09.\nThese files will be updated when the certificate renews.\nDeploying certificate\nSuccessfully deployed certificate for eksempel.dk to \/etc\/nginx\/sites-enabled\/eksempel.dk\nCongratulations! You have successfully enabled HTTPS on https:\/\/eksempel.dk and https:\/\/www.eksempel.dk<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Bem\u00e6rk udl\u00f8bsdatoen 90 dage frem. Bes\u00f8g nu <code>https:\/\/eksempel.dk<\/code>, og du ser h\u00e6ngel\u00e5sen. Certbot har samtidig tilf\u00f8jet en 301-omdirigering, s\u00e5 al HTTP-trafik automatisk sendes videre til HTTPS. Dit gratis <strong>SSL certifikat<\/strong> er live.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"trin-6-verificer-tls-konfigurationen-med-openssl\">Trin 6: Verificer TLS-konfigurationen med OpenSSL<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Stol ikke blindt p\u00e5 h\u00e6ngel\u00e5sen. Verific\u00e9r certifikatk\u00e6den, udl\u00f8bsdatoen og den forhandlede protokol direkte fra kommandolinjen med OpenSSL. Det afsl\u00f8rer problemer, en browser skjuler, for eksempel en manglende mellemcertifikat-k\u00e6de.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Vis certifikatets udsteder, emne og gyldighed\necho | openssl s_client -connect eksempel.dk:443 -servername eksempel.dk 2>\/dev\/null \\\n  | openssl x509 -noout -issuer -subject -dates\n\n# Forventet output:\n# issuer=C=US, O=Let's Encrypt, CN=R13\n# subject=CN=eksempel.dk\n# notBefore=Jun 11 09:00:00 2026 GMT\n# notAfter=Sep  9 08:59:59 2026 GMT<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">For at bekr\u00e6fte, at TLS 1.3 (RFC 8446) faktisk bruges, kan du tvinge protokollen. Et vellykket h\u00e5ndtryk bekr\u00e6fter, at serveren forhandler den nyeste version af <strong>TLS<\/strong>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>echo | openssl s_client -connect eksempel.dk:443 -tls1_3 2>\/dev\/null \\\n  | grep -E \"Protocol|Cipher\"\n# Forventet:\n# Protocol  : TLSv1.3\n# Cipher    : TLS_AES_256_GCM_SHA384<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Vil du have en fuld karakter, s\u00e5 k\u00f8r dom\u00e6net gennem SSL Labs&#8217; testv\u00e6rkt\u00f8j. Efter trin 7 b\u00f8r du ramme karakteren A eller A+. Et <strong>SSL certifikat<\/strong> alene giver ikke topkarakter; det afh\u00e6nger af protokoller og cipher-konfiguration.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"trin-7-haerd-din-nginx-ssl-konfiguration\">Trin 7: H\u00e6rd din Nginx SSL-konfiguration<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Standardkonfigurationen fra Certbot er sikker, men du kan g\u00f8re den bedre. Sl\u00e5 gamle protokoller fra, aktiv\u00e9r kun st\u00e6rke ciphers og tilf\u00f8j HSTS, s\u00e5 browsere altid bruger HTTPS. F\u00f8lgende blok afspejler Mozillas &#8220;Intermediate&#8221;-profil og giver topkarakter p\u00e5 de fleste testv\u00e6rkt\u00f8jer.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Redig\u00e9r serverblokken, Certbot oprettede p\u00e5 port 443\nserver {\n    listen 443 ssl;\n    listen [::]:443 ssl;\n    http2 on;\n    server_name eksempel.dk www.eksempel.dk;\n\n    ssl_certificate     \/etc\/letsencrypt\/live\/eksempel.dk\/fullchain.pem;\n    ssl_certificate_key \/etc\/letsencrypt\/live\/eksempel.dk\/privkey.pem;\n\n    # Kun moderne protokoller\n    ssl_protocols TLSv1.2 TLSv1.3;\n    ssl_prefer_server_ciphers off;\n    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384;\n\n    # Session-cache for ydelse\n    ssl_session_timeout 1d;\n    ssl_session_cache shared:MozSSL:10m;\n    ssl_session_tickets off;\n\n    # HSTS, tving HTTPS i 2 aar\n    add_header Strict-Transport-Security \"max-age=63072000\" always;\n\n    root \/var\/www\/eksempel.dk;\n    index index.html;\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Test og genindl\u00e6s altid efter \u00e6ndringer med <code>sudo nginx -t &amp;&amp; sudo systemctl reload nginx<\/code>. En vigtig detalje for 2026: Let&#8217;s Encrypt er begyndt at udfase OCSP til fordel for CRL&#8217;er, s\u00e5 fjern <code>ssl_stapling on;<\/code> fra \u00e6ldre konfigurationer, da OCSP-stapling ikke l\u00e6ngere giver mening. Du kan generere en skr\u00e6ddersyet konfiguration til netop din software i <a href=\"https:\/\/ssl-config.mozilla.org\/\" rel=\"nofollow noopener\" target=\"_blank\">Mozillas SSL Configuration Generator<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"trin-8-aktiver-automatisk-fornyelse\">Trin 8: Aktiv\u00e9r automatisk fornyelse<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Dette er det vigtigste trin i hele vejledningen. Med 90-dages-certifikater i dag og 47-dages-certifikater p\u00e5 vej er manuel fornyelse umulig i praksis. Snap-installationen af Certbot opretter automatisk en systemd-timer, der fornyer dit <strong>TLS<\/strong>-certifikat to gange dagligt og kun udsteder nyt, n\u00e5r der er under 30 dage tilbage.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Kontroll\u00e9r at fornyelsestimeren er aktiv\nsudo systemctl list-timers | grep certbot\n\n# Forventet output:\n# snap.certbot.renew.timer  ...  snap.certbot.renew.service\n\n# Se selve timerens status\nsystemctl status snap.certbot.renew.timer<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Hvis du af en eller anden grund ikke har timeren (for eksempel ved en pip-installation), kan du oprette en cron-opgave i stedet. Den f\u00f8lgende linje k\u00f8rer fornyelseskontrollen hver dag klokken 03:30 og genindl\u00e6ser Nginx, hvis et nyt certifikat blev hentet.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Redig\u00e9r root's crontab\nsudo crontab -e\n\n# Tilfoej denne linje:\n30 3 * * * certbot renew --quiet --deploy-hook \"systemctl reload nginx\"<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Argumentet <code>--deploy-hook<\/code> k\u00f8rer kun, n\u00e5r et certifikat faktisk blev fornyet, hvilket sparer un\u00f8dvendige genindl\u00e6sninger. Det er bedre end den gamle <code>--post-hook<\/code>, der k\u00f8rte hver gang.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"trin-9-udsted-et-wildcard-certifikat-med-dns-01\">Trin 9: Udsted et wildcard-certifikat med DNS-01<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Har du mange underdom\u00e6ner, vil du have et wildcard <strong>SSL certifikat<\/strong>, der d\u00e6kker <code>*.eksempel.dk<\/code> i \u00e9t. Det kr\u00e6ver DNS-01-challenge, fordi Let&#8217;s Encrypt ikke udsteder wildcards via HTTP-01. Du skal bruge en DNS-plugin til din udbyder. Eksemplet bruger Cloudflare.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Install\u00e9r Cloudflare-pluginet\nsudo snap set certbot trust-plugin-with-root=ok\nsudo snap install certbot-dns-cloudflare\n\n# Gem din API-token sikkert\nsudo mkdir -p \/root\/.secrets\necho \"dns_cloudflare_api_token = DIN_TOKEN_HER\" | sudo tee \/root\/.secrets\/cloudflare.ini\nsudo chmod 600 \/root\/.secrets\/cloudflare.ini\n\n# Udsted wildcard-certifikatet\nsudo certbot certonly \\\n  --dns-cloudflare \\\n  --dns-cloudflare-credentials \/root\/.secrets\/cloudflare.ini \\\n  -d eksempel.dk -d \"*.eksempel.dk\" \\\n  --email admin@eksempel.dk --agree-tos --no-eff-email<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Husk at inkludere b\u00e5de <code>eksempel.dk<\/code> og <code>*.eksempel.dk<\/code>, fordi wildcard-delen ikke d\u00e6kker det n\u00f8gne dom\u00e6ne. Rettighederne p\u00e5 <code>cloudflare.ini<\/code> skal v\u00e6re 600, s\u00e5 kun root kan l\u00e6se din API-token. En l\u00e6kket token giver en angriber kontrol over hele din DNS-zone.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"trin-10-skift-til-ecdsa-noegler-for-hurtigere-haandtryk\">Trin 10: Skift til ECDSA-n\u00f8gler for hurtigere h\u00e5ndtryk<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Som standard udsteder Let&#8217;s Encrypt et RSA 2048-bit <strong>SSL certifikat<\/strong>, men ECDSA-n\u00f8gler giver mindre certifikater og hurtigere TLS-h\u00e5ndtryk med samme sikkerhed. En ECDSA P-256-n\u00f8gle svarer kryptografisk til en RSA 3072-bit-n\u00f8gle, men er en br\u00f8kdel af st\u00f8rrelsen. Vil du forst\u00e5 matematikken bag, har vi en grundig gennemgang i artiklen om <a href=\"\/digital-signatures\/\">digitale signaturer forklaret<\/a>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Udsted et nyt ECDSA-certifikat\nsudo certbot certonly --nginx \\\n  -d eksempel.dk -d www.eksempel.dk \\\n  --key-type ecdsa \\\n  --elliptic-curve secp256r1 \\\n  --cert-name eksempel.dk-ecdsa\n\n# Bekraeft noegletypen\nsudo certbot certificates | grep -A1 eksempel.dk-ecdsa<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">For maksimal kompatibilitet kan du k\u00f8re dobbelt udstedelse med b\u00e5de RSA og ECDSA, s\u00e5 \u00e6ldre klienter f\u00e5r RSA, mens moderne browsere f\u00e5r det hurtigere ECDSA-certifikat. De fleste servere har dog ikke brug for det i 2026, da praktisk talt alle klienter underst\u00f8tter ECDSA.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"trin-11-test-fornyelse-og-overvaag-udloeb\">Trin 11: Test fornyelse og overv\u00e5g udl\u00f8b<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Stol aldrig p\u00e5, at automatisk fornyelse virker, f\u00f8r du har testet den. Certbot har en t\u00f8r-k\u00f8rsel, der gennemf\u00f8rer hele fornyelsesforl\u00f8bet mod Let&#8217;s Encrypts testmilj\u00f8 uden at bruge af din kvote. Det er din forsikring mod en pinlig nedetid om 60 dage.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Simul\u00e9r en fornyelse uden at udstede et rigtigt certifikat\nsudo certbot renew --dry-run\n\n# Forventet output afsluttes med:\n# Congratulations, all simulated renewals succeeded:\n#   \/etc\/letsencrypt\/live\/eksempel.dk\/fullchain.pem (success)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ud over t\u00f8r-k\u00f8rslen b\u00f8r du ops\u00e6tte ekstern overv\u00e5gning, s\u00e5 du f\u00e5r besked, hvis et certifikat alligevel n\u00e6rmer sig udl\u00f8b. En simpel cron-baseret kontrol med OpenSSL kan sende dig en advarsel, hvis der er under 14 dage tilbage.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Skript der advarer hvis certifikatet udloeber inden for 14 dage\nexpiry=$(echo | openssl s_client -connect eksempel.dk:443 -servername eksempel.dk 2>\/dev\/null \\\n  | openssl x509 -noout -enddate | cut -d= -f2)\nexpiry_epoch=$(date -d \"$expiry\" +%s)\nnow_epoch=$(date +%s)\ndays_left=$(( (expiry_epoch - now_epoch) \/ 86400 ))\necho \"Dage tilbage: $days_left\"\nif [ \"$days_left\" -lt 14 ]; then\n  echo \"ADVARSEL: certifikatet udloeber snart!\" | mail -s \"TLS-advarsel\" admin@eksempel.dk\nfi<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"trin-12-forbered-dig-paa-47-dages-og-kortlivede-certifikater\">Trin 12: Forbered dig p\u00e5 47-dages og kortlivede certifikater<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Det sidste trin handler om fremtiden. Med CA\/Browser Forums plan om 47-dages-certifikater fra 2029 og Let&#8217;s Encrypts kortlivede certifikater p\u00e5 160 timer (generelt tilg\u00e6ngelige siden 15. januar 2026) bliver fornyelseshyppigheden langt h\u00f8jere. En ops\u00e6tning, der fornyer hver 60. dag, holder ikke, n\u00e5r certifikatet kun lever i seks dage. Heldigvis kr\u00e6ver det ingen ny kode, kun en justering af tankegangen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For at opte ind p\u00e5 kortlivede certifikater i fremtiden tilknytter du en s\u00e6rlig ACME-profil. Certbots fornyelseslogik h\u00e5ndterer resten, fordi timeren allerede k\u00f8rer to gange dagligt og vil hente et nyt certifikat, s\u00e5 snart der er under en tredjedel af levetiden tilbage. Det vigtigste r\u00e5d er derfor: lad v\u00e6re med at hardkode 90 dage nogen steder. Stol p\u00e5 Certbots egen logik, der tilpasser sig den faktiske udl\u00f8bsdato.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Tjek hvilke ACME-profiler din konto understoetter\nsudo certbot certificates\n\n# Naar kortlivede profiler er tilgaengelige paa din konto,\n# kan du udstede med en profil-parameter (eksempel):\n# sudo certbot certonly --nginx -d eksempel.dk \\\n#   --preferred-profile shortlived<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Kortlivede certifikater reducerer risikoen ved et kompromitteret <strong>SSL certifikat<\/strong> dramatisk, fordi et stj\u00e5let certifikat alligevel udl\u00f8ber inden for en uge, uden at nogen beh\u00f8ver at revokere det. Det er en af grundene til, at hele branchen bev\u00e6ger sig v\u00e6k fra lange levetider. Du kan l\u00e6se mere om de officielle gr\u00e6nser i <a href=\"https:\/\/letsencrypt.org\/docs\/rate-limits\/\" rel=\"nofollow noopener\" target=\"_blank\">Let&#8217;s Encrypts dokumentation om rate limits<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"komplet-fungerende-projekt-med-docker-compose\">Komplet, fungerende projekt med Docker Compose<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Vil du have hele ops\u00e6tningen i \u00e9n genskabelig pakke, er her et komplet projekt med Docker Compose. Det k\u00f8rer Nginx og Certbot i hver sin container, deler certifikat-volumen mellem dem og fornyer automatisk hvert 12. time. Det er ideelt til en ny server, hvor du vil have <strong>TLS<\/strong> op at k\u00f8re p\u00e5 f\u00e5 minutter.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># docker-compose.yml\nservices:\n  nginx:\n    image: nginx:1.27\n    ports:\n      - \"80:80\"\n      - \"443:443\"\n    volumes:\n      - .\/nginx.conf:\/etc\/nginx\/conf.d\/default.conf\n      - .\/certbot\/conf:\/etc\/letsencrypt\n      - .\/certbot\/www:\/var\/www\/certbot\n    restart: unless-stopped\n\n  certbot:\n    image: certbot\/certbot:latest\n    volumes:\n      - .\/certbot\/conf:\/etc\/letsencrypt\n      - .\/certbot\/www:\/var\/www\/certbot\n    entrypoint: \"\/bin\/sh -c 'trap exit TERM; while :; do certbot renew --webroot -w \/var\/www\/certbot; sleep 12h; done'\"\n    restart: unless-stopped<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Den tilh\u00f8rende Nginx-konfiguration serverer ACME-challenge fra webroot, s\u00e5 Certbot kan validere via HTTP-01 uden at r\u00f8re Nginx-konfigurationen.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># nginx.conf\nserver {\n    listen 80;\n    server_name eksempel.dk;\n    location \/.well-known\/acme-challenge\/ {\n        root \/var\/www\/certbot;\n    }\n    location \/ {\n        return 301 https:\/\/$host$request_uri;\n    }\n}\nserver {\n    listen 443 ssl;\n    server_name eksempel.dk;\n    ssl_certificate     \/etc\/letsencrypt\/live\/eksempel.dk\/fullchain.pem;\n    ssl_certificate_key \/etc\/letsencrypt\/live\/eksempel.dk\/privkey.pem;\n    ssl_protocols TLSv1.2 TLSv1.3;\n    location \/ {\n        root \/usr\/share\/nginx\/html;\n    }\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">F\u00f8rste gang udsteder du certifikatet med en engangskommando: <code>docker compose run --rm certbot certonly --webroot -w \/var\/www\/certbot -d eksempel.dk --email admin@eksempel.dk --agree-tos --no-eff-email<\/code>. Derefter k\u00f8rer fornyelsen automatisk. Hele projektet ligger i tre filer og kan versioneres i Git.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"8-almindelige-faldgruber-du-skal-undgaa\">8 almindelige faldgruber, du skal undg\u00e5<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Selv en simpel <strong>SSL certifikat<\/strong>-ops\u00e6tning kan g\u00e5 galt p\u00e5 overraskende m\u00e5der. Her er de otte hyppigste faldgruber og hvordan du undg\u00e5r dem.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Lukket port 80.<\/strong> Den absolut hyppigste fejl. HTTP-01 kr\u00e6ver, at Let&#8217;s Encrypt kan n\u00e5 port 80 udefra. Tjek b\u00e5de lokal firewall og cloud-firewall.<\/li>\n<li><strong>DNS peger forkert.<\/strong> Hvis A-posten ikke peger p\u00e5 serveren, fejler valideringen straks. Verific\u00e9r altid med <code>dig<\/code> f\u00f8rst.<\/li>\n<li><strong>Du rammer rate-limittet.<\/strong> Let&#8217;s Encrypt tillader 50 certifikater pr. registreret dom\u00e6ne pr. uge. Brug <code>--dry-run<\/code> under test, s\u00e5 du ikke spilder kvoten.<\/li>\n<li><strong>Wildcard via HTTP-01.<\/strong> Det virker aldrig. Wildcard kr\u00e6ver DNS-01, punktum.<\/li>\n<li><strong>Glemt fornyelse.<\/strong> Hvis du installerede via pip uden timer, fornyer intet sig selv. Bekr\u00e6ft altid med <code>certbot renew --dry-run<\/code>.<\/li>\n<li><strong>Forkerte filrettigheder p\u00e5 privatn\u00f8glen.<\/strong> <code>privkey.pem<\/code> skal kun kunne l\u00e6ses af root. Kopi\u00e9r aldrig n\u00f8glen til et offentligt sted.<\/li>\n<li><strong>OCSP-stapling i konfigurationen.<\/strong> Da Let&#8217;s Encrypt udfaser OCSP i 2025, giver <code>ssl_stapling on;<\/code> nu fejl i loggen. Fjern direktivet.<\/li>\n<li><strong>Manglende mellemcertifikat.<\/strong> Brug altid <code>fullchain.pem<\/code>, ikke <code>cert.pem<\/code>, ellers mangler k\u00e6den, og nogle klienter afviser dit certifikat.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"fejlfinding-8-konkrete-fejlmeddelelser\">Fejlfinding: 8 konkrete fejlmeddelelser<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">N\u00e5r noget g\u00e5r galt, returnerer Certbot en ret pr\u00e6cis fejl. Denne tabel overs\u00e6tter de otte hyppigste meddelelser til \u00e5rsag og l\u00f8sning, s\u00e5 du hurtigt kommer videre med dit <strong>TLS<\/strong>-certifikat.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Fejlmeddelelse<\/th><th>\u00c5rsag<\/th><th>L\u00f8sning<\/th><\/tr><\/thead><tbody><tr><td>Timeout during connect (HTTP-01)<\/td><td>Port 80 er lukket eller blokeret<\/td><td>\u00c5bn port 80 i lokal og cloud-firewall<\/td><\/tr><tr><td>DNS problem: NXDOMAIN<\/td><td>Dom\u00e6net har ingen A-post<\/td><td>Opret A-post og vent p\u00e5 DNS-spredning<\/td><\/tr><tr><td>too many certificates already issued<\/td><td>Rate-limit p\u00e5 50 pr. uge ramt<\/td><td>Vent en uge eller brug &#8211;dry-run til test<\/td><\/tr><tr><td>Challenge failed for domain<\/td><td>Forkert webroot-sti til challenge-fil<\/td><td>Ret root-stien i Nginx-blokken<\/td><\/tr><tr><td>The nginx plugin is not working<\/td><td>Nginx-konfigurationen har syntaksfejl<\/td><td>K\u00f8r nginx -t og ret fejlen<\/td><\/tr><tr><td>could not bind to IPv4 or IPv6<\/td><td>Port 443 er optaget af en anden proces<\/td><td>Stop processen eller skift port<\/td><\/tr><tr><td>Account already exists<\/td><td>ACME-konto findes allerede<\/td><td>Ufarligt, Certbot bruger den eksisterende konto<\/td><\/tr><tr><td>certificate has expired<\/td><td>Automatisk fornyelse fejlede<\/td><td>K\u00f8r certbot renew og tjek timeren<\/td><\/tr><\/tbody><\/table><figcaption>De otte hyppigste Certbot-fejl og deres l\u00f8sning.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Hvis du sidder fast, s\u00e5 l\u00e6s Certbot-loggen i <code>\/var\/log\/letsencrypt\/letsencrypt.log<\/code>. Den indeholder den fulde fejl med flere detaljer end terminaloutputtet. N\u00e6sten alle problemer med et <strong>SSL certifikat<\/strong> handler om netv\u00e6rk, DNS eller filrettigheder.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"avancerede-tips-til-produktion\">Avancerede tips til produktion<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">N\u00e5r grundops\u00e6tningen k\u00f8rer, er der flere m\u00e5der at g\u00f8re dit <strong>TLS<\/strong>-setup endnu mere robust. Disse tips adskiller en hobbyserver fra en produktionsserver.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Brug DNS-01 selv for enkeltdom\u00e6ner.<\/strong> Det fjerner afh\u00e6ngigheden af port 80 og virker bag load balancers, hvor HTTP-01 er besv\u00e6rlig.<\/li>\n<li><strong>Aktiv\u00e9r CAA-poster.<\/strong> En CAA-DNS-post, der kun tillader letsencrypt.org, forhindrer andre certifikatmyndigheder i at udstede for dit dom\u00e6ne.<\/li>\n<li><strong>Centralis\u00e9r certifikater.<\/strong> I et cluster kan du udstede \u00e9t sted og distribuere via en hemmeligheds-manager frem for at k\u00f8re Certbot p\u00e5 hver node.<\/li>\n<li><strong>Overv\u00e5g Certificate Transparency.<\/strong> V\u00e6rkt\u00f8jer som crt.sh viser hvert certifikat udstedt for dit dom\u00e6ne, s\u00e5 du opdager uautoriseret udstedelse.<\/li>\n<li><strong>Test mod staging f\u00f8rst.<\/strong> Brug <code>--test-cert<\/code> mod Let&#8217;s Encrypts testmilj\u00f8, n\u00e5r du bygger nye automatiseringer, s\u00e5 du aldrig rammer rate-limittet.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Husk ogs\u00e5, at et <strong>SSL certifikat<\/strong> kun beskytter transporten. Det krypterer trafikken mellem browser og server, men det beskytter ikke data i hvile p\u00e5 serveren. Til det skal du bruge kryptering p\u00e5 applikationsniveau, som vi gennemg\u00e5r i vores guide til <a href=\"\/aes-256-encryption-nodejs\/\">AES-256-kryptering i Node.js<\/a>. Og n\u00e5r kvantecomputere modnes, \u00e6ndrer billedet sig igen, hvilket vi d\u00e6kker i artiklen om <a href=\"\/post-quantum-cryptography-2026\/\">post-kvantekryptografi<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"dv-ov-og-ev-hvilken-type-certifikat-skal-du-vaelge\">DV, OV og EV: hvilken type certifikat skal du v\u00e6lge?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Ikke alle certifikater er ens. Der findes tre valideringsniveauer, og forskellen mellem dem er, hvor grundigt certifikatmyndigheden kontrollerer dig, f\u00f8r den udsteder dit <strong>TLS<\/strong>-certifikat. Det er vigtigt at forst\u00e5, fordi mange betaler for et niveau, de slet ikke har brug for.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Domain Validation (DV).<\/strong> Certifikatmyndigheden bekr\u00e6fter kun, at du kontrollerer dom\u00e6net. Det er pr\u00e6cis det, Let&#8217;s Encrypt udsteder, og det sker automatisk p\u00e5 sekunder. For et website, en API eller en webshop er DV alt, hvad du beh\u00f8ver. Browseren viser n\u00f8jagtig den samme h\u00e6ngel\u00e5s som et dyrere certifikat.<\/li>\n<li><strong>Organization Validation (OV).<\/strong> Her kontrollerer myndigheden ogs\u00e5, at organisationen bag dom\u00e6net faktisk eksisterer. Det kr\u00e6ver manuel sagsbehandling, koster typisk penge og tager dage. Det giver ikke ekstra kryptografisk sikkerhed, kun en juridisk verificeret ejer i certifikatet.<\/li>\n<li><strong>Extended Validation (EV).<\/strong> Den grundigste, dyreste og langsomste form. Tidligere viste browsere et gr\u00f8nt firmanavn i adresselinjen ved EV, men den visuelle forskel er stort set fjernet i moderne browsere siden 2019. I praksis ser brugeren ingen forskel p\u00e5 et EV- og et DV-certifikat.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Konklusionen for de fleste i 2026 er enkel: v\u00e6lg DV via Let&#8217;s Encrypt. Krypteringen er identisk, h\u00e6ngel\u00e5sen er identisk, og prisen er nul. Kun virksomheder med specifikke compliance-krav, for eksempel inden for finans, har et reelt behov for OV eller EV. For alt andet er et gratis DV-certifikat det rigtige valg, og det er netop det, denne vejledning bygger.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"certbot-acme-sh-eller-caddy-hvilket-vaerktoej-passer-dig\">Certbot, acme.sh eller Caddy: hvilket v\u00e6rkt\u00f8j passer dig?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Certbot er den officielle ACME-klient fra EFF, men det er ikke det eneste valg. Tre v\u00e6rkt\u00f8jer dominerer feltet i 2026, og det rette afh\u00e6nger af din ops\u00e6tning. Alle tre taler med Let&#8217;s Encrypt via ACME-protokollen og giver det samme betroede <strong>TLS<\/strong>-certifikat.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>V\u00e6rkt\u00f8j<\/th><th>Sprog<\/th><th>Bedst til<\/th><th>Automatisk fornyelse<\/th><\/tr><\/thead><tbody><tr><td>Certbot<\/td><td>Python<\/td><td>Nginx og Apache p\u00e5 Linux-servere<\/td><td>systemd-timer<\/td><\/tr><tr><td>acme.sh<\/td><td>Ren shell<\/td><td>Minimale systemer uden Python<\/td><td>cron<\/td><\/tr><tr><td>Caddy<\/td><td>Go<\/td><td>Ny ops\u00e6tning, indbygget webserver<\/td><td>Fuldt automatisk, indbygget<\/td><\/tr><tr><td>lego<\/td><td>Go<\/td><td>Egne automatiseringer og CI\/CD<\/td><td>Manuel eller scriptet<\/td><\/tr><\/tbody><\/table><figcaption>Fire udbredte ACME-klienter og deres styrker.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Certbot er det sikreste valg, hvis du allerede k\u00f8rer Nginx eller Apache, fordi pluginnene redigerer konfigurationen for dig. Foretr\u00e6kker du noget endnu lettere, er acme.sh skrevet i ren shell og kr\u00e6ver hverken Python eller snap. Bygger du en helt ny server fra bunden, er Caddy interessant, fordi webserveren selv henter og fornyer certifikatet uden et eneste ekstra v\u00e6rkt\u00f8j. For pipelines og containere bruger mange lego, der er let at kalde fra et script. Uanset valget g\u00e6lder den samme grundregel fra trin 8: fornyelsen skal v\u00e6re fuldautomatisk, ellers er det kun et sp\u00f8rgsm\u00e5l om tid, f\u00f8r dit certifikat udl\u00f8ber.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"ofte-stillede-spoergsmaal-om-ssl-og-tls-certifikater\">Ofte stillede sp\u00f8rgsm\u00e5l om SSL- og TLS-certifikater<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"er-et-lets-encrypt-ssl-certifikat-virkelig-gratis\">Er et Let&#8217;s Encrypt SSL certifikat virkelig gratis?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Ja, helt gratis og uden skjulte gebyrer. Let&#8217;s Encrypt er en non-profit certifikatmyndighed drevet af Internet Security Research Group. Et <strong>TLS<\/strong>-certifikat herfra er teknisk fuldt ud lige s\u00e5 betroet som et betalt certifikat fra en kommerciel udsteder. Forskellen er, at Let&#8217;s Encrypt ikke tilbyder udvidet validering eller garantier, kun dom\u00e6nevalidering, hvilket er rigeligt for langt de fleste websteder.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"hvor-ofte-skal-jeg-forny-mit-certifikat\">Hvor ofte skal jeg forny mit certifikat?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Et standardcertifikat fra Let&#8217;s Encrypt udl\u00f8ber efter 90 dage, og Certbot fornyer det automatisk, n\u00e5r der er 30 dage tilbage. Du beh\u00f8ver derfor i praksis aldrig at g\u00f8re noget manuelt, s\u00e5 l\u00e6nge den automatiske timer k\u00f8rer. Med CA\/Browser Forums plan om at s\u00e6nke loftet til 47 dage frem mod 2029 bliver hyppigheden h\u00f8jere, men Certbots logik tilpasser sig den faktiske udl\u00f8bsdato automatisk.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"hvad-er-forskellen-paa-ssl-og-tls\">Hvad er forskellen p\u00e5 SSL og TLS?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">SSL (Secure Sockets Layer) er den oprindelige protokol, som i dag er for\u00e6ldet og usikker. TLS (Transport Layer Security) er efterf\u00f8lgeren, og den nyeste version er TLS 1.3, defineret i RFC 8446. N\u00e5r folk siger &#8220;SSL certifikat&#8221;, mener de n\u00e6sten altid et <strong>TLS<\/strong>-certifikat. Begreberne bruges i fl\u00e6ng, men teknisk er det TLS, der beskytter din forbindelse i dag.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"kan-jeg-bruge-et-certifikat-til-flere-domaener\">Kan jeg bruge \u00e9t certifikat til flere dom\u00e6ner?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Ja. Du kan tilf\u00f8je op til 100 dom\u00e6nenavne til \u00e9t certifikat med gentagne <code>-d<\/code>-argumenter, kaldet et SAN-certifikat. Alternativt d\u00e6kker et wildcard-certifikat alle underdom\u00e6ner p\u00e5 \u00e9t niveau med <code>*.eksempel.dk<\/code>. Husk dog, at et wildcard ikke d\u00e6kker det n\u00f8gne dom\u00e6ne, s\u00e5 du skal tilf\u00f8je <code>eksempel.dk<\/code> separat.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"hvad-sker-der-hvis-mit-certifikat-udloeber\">Hvad sker der, hvis mit certifikat udl\u00f8ber?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Browsere viser en fuldsk\u00e6rmsadvarsel om, at forbindelsen ikke er sikker, og de fleste bes\u00f8gende forlader siden med det samme. S\u00f8gemaskiner kan ogs\u00e5 nedrangere siden. Derfor er den automatiske fornyelse i trin 8 s\u00e5 afg\u00f8rende. Et udl\u00f8bet <strong>SSL certifikat<\/strong> er en af de mest almindelige og mest undg\u00e5elige \u00e5rsager til nedetid.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"hvad-er-lets-encrypts-rate-limit\">Hvad er Let&#8217;s Encrypts rate-limit?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Let&#8217;s Encrypt tillader 50 certifikater pr. registreret dom\u00e6ne pr. uge. For de fleste er det rigeligt, men hvis du automatiserer udstedelse p\u00e5 tv\u00e6rs af mange underdom\u00e6ner, kan du ramme gr\u00e6nsen. Brug derfor altid <code>--dry-run<\/code> eller <code>--test-cert<\/code> under udvikling, s\u00e5 testk\u00f8rsler ikke t\u00e6ller med i din kvote.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"boer-jeg-vaelge-ecdsa-eller-rsa\">B\u00f8r jeg v\u00e6lge ECDSA eller RSA?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">V\u00e6lg ECDSA, medmindre du har meget gamle klienter at underst\u00f8tte. En ECDSA P-256-n\u00f8gle giver samme sikkerhed som en RSA 3072-bit-n\u00f8gle, men med mindre certifikater og hurtigere TLS-h\u00e5ndtryk. I 2026 underst\u00f8tter praktisk talt alle browsere og operativsystemer ECDSA, s\u00e5 der er sj\u00e6ldent grund til at blive p\u00e5 RSA.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"hjaelper-en-groen-haengelaas-mod-hacking\">Hj\u00e6lper en gr\u00f8n h\u00e6ngel\u00e5s mod hacking?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">H\u00e6ngel\u00e5sen betyder kun, at forbindelsen er krypteret, ikke at siden er sikker eller trov\u00e6rdig. Ogs\u00e5 phishing-sider har gyldige <strong>TLS<\/strong>-certifikater. Et certifikat beskytter mod aflytning undervejs, men ikke mod s\u00e5rbarheder i din applikation eller mod ondsindede afsendere. L\u00e6s mere om, hvad h\u00e6ngel\u00e5sen faktisk garanterer, i vores artikel om HTTPS og TLS.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"relateret-indhold\">Relateret indhold<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"\/https-tls-explained\/\">HTTPS og TLS forklaret: hvad h\u00e6ngel\u00e5sen virkelig betyder<\/a><\/li>\n<li><a href=\"\/digital-signatures\/\">Digitale signaturer forklaret: hvordan de virker<\/a><\/li>\n<li><a href=\"\/aes-256-encryption-nodejs\/\">AES-256-kryptering i Node.js p\u00e5 12 trin<\/a><\/li>\n<li><a href=\"\/post-quantum-cryptography-2026\/\">Post-kvantekryptografi: 50 % af nettet er nu sikret<\/a><\/li>\n<li><a href=\"\/sha-256\/\">SHA-256 forklaret: s\u00e5dan virker det, og hvorfor det betyder noget<\/a><\/li>\n<li><a href=\"\/cryptography\/\">Kryptografi og hashing forklaret<\/a><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Du har nu et komplet, automatiseret og h\u00e6rdet <strong>SSL certifikat<\/strong> p\u00e5 din server. Det fornyer sig selv, scorer topkarakter p\u00e5 SSL Labs og er forberedt p\u00e5 de kortere certifikatlevetider, der kommer frem mod 2029. Det vigtigste, du tager med: automatisering er ikke valgfri l\u00e6ngere. Et <strong>TLS<\/strong>-certifikat, der ikke fornyer sig selv, er en nedetid, der bare venter p\u00e5 at ske.<\/p>\n\n","protected":false},"excerpt":{"rendered":"<p>Et SSL certifikat er ikke l\u00e6ngere noget, du s\u00e6tter op \u00e9n gang og glemmer. I 2026 er TLS blevet en automatiseret, kortlivet og uafladelig del af enhver server. Let&#8217;s Encrypt\u2026<\/p>\n","protected":false},"author":4,"featured_media":54,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[],"class_list":["post-53","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-security"],"_links":{"self":[{"href":"https:\/\/shattered.io\/dk\/wp-json\/wp\/v2\/posts\/53","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/shattered.io\/dk\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/shattered.io\/dk\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/shattered.io\/dk\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/shattered.io\/dk\/wp-json\/wp\/v2\/comments?post=53"}],"version-history":[{"count":0,"href":"https:\/\/shattered.io\/dk\/wp-json\/wp\/v2\/posts\/53\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/shattered.io\/dk\/wp-json\/wp\/v2\/media\/54"}],"wp:attachment":[{"href":"https:\/\/shattered.io\/dk\/wp-json\/wp\/v2\/media?parent=53"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/shattered.io\/dk\/wp-json\/wp\/v2\/categories?post=53"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/shattered.io\/dk\/wp-json\/wp\/v2\/tags?post=53"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}