Jump to content

Drift/Oppdatere SSL-sertifikater

From Programvareverkstedet

Merk: hele denne siden er totalt omskrevet i 2026. Se wiki-historikken for de "gamle" / pre-ACME sertifikatsystemene

Hva og hvorfor

Når en klient kobler seg til en server med TLS, for eksempel når PC-en din skal hente e-post fra imap.pvv.ntnu.no over IMAPS, eller denne wikien over HTTPS, presenterer serveren et signert sertifikat, og bruker den tilhørende nøkkelen til å dekryptere og signere kommunikasjon med klienten. PC-en din kan kontrollere sertifikatet og bekrefte at serveren du snakker med faktisk er den riktige PVV-serveren, og at ingen har avlyttet, modifisert eller forfalsket kommunikasjonen.

Tidligere genererte vi disse filene manuelt, og prosedyren var omtrent

  • Bruk "openssl"-trylleformler for å generere en privatnøkkel (ofte ascii-armored .pem) og en sertifikatforespørsel (ofte pkcs#10 i en .csr-fil)
    • Privatnøkkelen holdes alltid hemmelig, og deles ikke med andre maskiner, personer eller organisasjoner, ikke en gang CA-en.
    • CSR-en er en bestilling som inneholder et domenenavn, eventuelle aliaser, den offentlige nøkkelen som hører til privatnøkkelen, og kanskje noe tilleggsinformasjon, for eksempel hvem som eier tjeneren / bestiller sertifikatet
  • Send CSR-en til en Certificate Authority (CA), for eksempel i en webportal eller over e-post
    • CA-en ser om bestillingen er gyldig, verifiserer at du faktisk har lov til å be om sertifikat for de aktuelle domenenavnene, tar eventuelt imot betaling, osv.
  • Få tilbake et ferdig signert sertifikat fra CA-en. Det inkluderer feltene fra CSR-en, første og siste gyldighetsdato, og en signatur fra CA-en som beviser at det er gyldig
  • Installer sertifikatet på tjeneren
    • Dette kan variere fra tjeneste til tjeneste, men skjer som regel ved å legge sertifikat- og nøkkel-filene et lurt sted på boksen, og å henvise til de i konfigurasjonsfilen (se eksempler på microbel under)
      • Pass på filtilgangene, så ikke hvem som helst kan lese privatnøkkelen

I nyere tid har ACME blitt vanlig, en protokoll som gjør det mulig å automatisere stegene over mot en CA som LetsEncrypt. I stedet for å fylle ut skjemaer og vente på svar fra CA-en din, kan du kjøre et par enkle kommandoer og raskt få generert et nøkkelpar, verifisert domenet og signert et sertifikat. LetsEncrypt er gratis, krever ingen formell registrering, og verifiserer automatisk og umiddelbart at du kontrollerer et domenenavn, for eksempel ved at du legger en token på webserveren din eller i en DNS-peker.

Hvordan skaffe/bytte sertifikater på de forskjellige webtjenerene

Maskiner med NixOS

De fleste "nye" webtjenere på PVV kjører NixOS og nginx. Vi har felles basisoppsett i base/services/nginx.nix og base/services/acme.nix som automatiserer hele HTTPS-oppsettet.

En enkel konfigurasjon som vist under, vil generere systemd- og nginx-konfigurasjon for å generere, hente og bruke sertifikater fra LetsEncrypt. Det opprettes også en systemd-timer som går innimellom og passer på å fornye sertifikatet før det går ut. Du trenger ikke å gjøre noe mer enn å aktivere nixos-konfigurasjonen og sjekke at brukeren får servert riktig sertifikat til slutt.


 services.nginx.enable = true;
 services.nginx.virtualHosts."${domain}" = {
   forceSSL = true;
   enableACME = true;
   kTLS = true;
   locations = {
     ...
   };
 };

TL;DR

Bruk gjerne ACME/LE. Husk å ta med alle domenenavnene i bestillingen, det er mange underdomener under både pvv.ntnu.no og pvv.org. Når du er ferdig skal filene se omtrent sånn ut:

  • i /etc/exim4:
-r-------- 1 Debian-exim  root exim.crt                          ; full chain
-rw------- 1 Debian-exim  root exim.key                          ; private key
  • i /etc/dovecot/ssl:
-rw-r--r-- 1 root root imap.crt.pem                              ; full chain
-rw------- 1 root root imap.key.pem                              ; private key
  • i /etc/ssl/certs:
-rw-r--r-- 1 root dovecot dovecot.pem                            ; full chain

Prosedyre / Kommandoer

Les, tenk gjennom og kjør følgende kommandoer, en av gangen, i denne rekkefølgen. Noen av kommandoene, som "journalctl" er der så du skal se at ting starter opp igjen uten unormale feilmeldinger. Hvis en kommando på veien feiler, stopp, les feilmeldingene og finn ut hvorfor.

  • Logg inn på microbel, bli root, og cd til `/root`
  • Generer nøkkel/sertifikat
 lego --accept-tos --email drift@pvv.ntnu.no --http.webroot /var/www --http --domains microbel.pvv.ntnu.no --domains imap.pvv.ntnu.no --domains list.pvv.ntnu.no --domains mail.pvv.ntnu.no --domains pop.pvv.ntnu.no --domains smtp.pvv.ntnu.no --domains microbel.pvv.org --domains imap.pvv.org --domains list.pvv.org --domains mail.pvv.org --domains pop.pvv.org --domains smtp.pvv.org run
  • Ta en titt på sertifikatet, se at det gir mening og ser riktig ut (Riktige domenealiaser, fra- og til-datoer, osv.)
 openssl x509 -in .lego/certificates/microbel.pvv.ntnu.no.crt -text -noout
  • Bytt sertifikatet til exim
 cp -a /etc/exim4/exim.crt /etc/exim4/exim.crt.old
 cp -a /etc/exim4/exim.key /etc/exim4/exim.key.old
 cp .lego/certificates/microbel.pvv.ntnu.no.crt /etc/exim4/exim.crt
 cp .lego/certificates/microbel.pvv.ntnu.no.key /etc/exim4/exim.key
 chown Debian-exim /etc/exim4/exim.crt
 chown Debian-exim /etc/exim4/exim.key
 systemctl restart exim4
 journalctl -feu exim4
  • Bytt sertifikatet til dovecot
 cat /etc/dovecot/ssl/README_VIKTIG.txt
 cp -a /etc/dovecot/ssl/imap.crt.pem /etc/dovecot/ssl/imap.crt.pem.old
 cp -a /etc/dovecot/ssl/imap.key.pem /etc/dovecot/ssl/imap.key.pem.old
 cp .lego/certificates/microbel.pvv.ntnu.no.crt /etc/dovecot/ssl/imap.crt.pem
 cp .lego/certificates/microbel.pvv.ntnu.no.key /etc/dovecot/ssl/imap.key.pem
 cp .lego/certificates/microbel.pvv.ntnu.no.crt /etc/ssl/certs/dovecot.pem
 chown dovecot: /etc/ssl/certs/dovecot.pem
 systemctl restart dovecot
 journalctl -feu dovecot
  • Restart apache2 (den spiser automatisk sertifikatfilene i /etc/exim4)
 systemctl restart apache2
  • Verifiser at sertifikatene er installert

IMAPS

openssl s_client -showcerts -connect imap.pvv.ntnu.no:993 -servername imap.pvv.ntnu.no | openssl x509 -noout -dates

SMTP med starttls

 openssl s_client -connect smtp.pvv.ntnu.no:25 -starttls smtp | openssl x509 -noout -dates

HTTPS

 openssl s_client -showcerts -connect list.pvv.ntnu.no:443 -servername list.pvv.ntnu.no | openssl x509 -noout -dates


TODO, men Isvegg kjører lighttpd, så let i /etc/lighttpd for gjeldende konfigurasjon.