Drift/Oppdatere SSL-sertifikater
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
- 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)
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.