UWC kommer som standard med en egensignert SSL-sertifikat som i seg selv ikke er mer eller mindre trygt enn andre SSL-sertifikater med tanke på kryptering av data, men det er ikke trusted noe sted og derfor blir det langdryg sutring fra nettlesere hver gang man skal inn og administrere kontrolleren.
Etter at Let's Encrypt kom på banen og begynte å tilby gratis SSL-sertifikater for alle og enhver helt gratis, er det dog vesentlig mye enklere å få sikret ymse tjenester man drifter uten at det koster skjorten.
Jeg valgte å sette opp en Ubuntu-server for å kjøre Unifi-serveren for å slippe Windows-lisensieringskostnader og telemetri-pisset Microsoft holder på med.
Unifi ble installert slik:
$ sudo apt update && sudo apt install ca-certificates apt-transport-https
$ echo 'deb https://www.ui.com/downloads/unifi/debian stable ubiquiti' | sudo tee /etc/apt/sources.list.d/100-ubnt-unifi.list
$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 0C49F3730359A14518585931BC711F9BA15703C6Installer følgende trusted key til /etc/apt/trusted.gpg.d:
$ echo "deb https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list
$ sudo apt update
$ sudo apt update && sudo apt install unifi
Etter installasjonen bør du kunne se innloggingssiden ved å gå til https://din-ip:8443.
Du vil da få beskjed om at sertifikatet ikke er til å stole på og yada yada. På tide å få satt opp et skikkelig sertifikat, med andre ord.
Det første vi må gjøre er å installere Let's Encrypt i form av certbot. I gamle dager måtte man luske rundt for å finne programmet, men i dag er det så enkelt som dette:
$ sudo apt install certbot
Etter installasjonen spør vi om å få et sertifikat:
$ sudo certbot certonly
Velg alternativ 1 (spin up a temporary server), skriv inn mailadressen din (for å få beskjed hvis noe slutter å funke), samtykk til avtaleteksten ingen leser og skriv til slutt inn domenenavnet du vil ha et sertifikat for (f.eks. unifi.example.com). Hvis alt funket som det skulle skal du få en gratulasjonsmelding og vi kan gå videre. Hvis du fikk feilmeldinger, finn ut hva som gikk galt og fiks det.
Sertifikatet vi har fått er bare et sertifikat og er ikke installert noe sted. Certbot har plugins for å automatisk installere sertifikater i Apache og NGINX-configfiler, men ikke UniFi-tjenestene. Ubiquiti-tjenestene er Java-baserte og bruker derfor Java Keystore for å lagre private krypteringsnøkler og sertifikater. For å installere sertifikatet vårt til Keystore må det først konverteres til PKCS#12-format. Det gjøres veldig enkelt på denne måten (alt på en lnje):
$ sudo openssl pkcs12 -export \
-inkey /etc/letsencrypt/live/unifi.example.com/privkey.pem \ -in /etc/letsencrypt/live/unifi.example.com/fullchain.pem \
-out /tmp/cert.p12 \
-name unifi \ -password pass:temppass
Ikke glem å erstatte unifi.example.com med ditt faktiske domenenavn. Resten kan være som det er.
Nå er vi klare til å legge inn PKCS#12-sertifikatet i Keystore (igjen, alt på én linje):
$ sudo keytool -importkeystore -deststorepass aircontrolenterprise \
-destkeypass aircontrolenterprise \ -destkeystore /var/lib/unifi/keystore \
-srckeystore /tmp/cert.p12 -srcstoretype PKCS12 \
-srcstorepass temppass -alias unifi -noprompt
Til slutt kan PKCS#12-sertifikatet slettes (siden det allerede er importert og det ikke er god form å la sertifikatfiler slenge rundt), og start UniFi-tjenesten på nytt:
$ sudo rm /tmp/cert.p12 $ sudo /etc/init.d/unifi restart
Det er i all hovedsak det man trenger å gjøre. Gå tilbake til innloggingssiden for kontrolleren og se at du nå har et gyldig sertifikat, og at nettleseren har sluttet å sutre :)
Ulempen med LE-sertifikater er at de bare har en gyldighet på 3 måneder. Vi må derfor fornye sertifikatet før det utløper. Av denne grunn må vi sette opp maskinen til å forsøke å fornye sertifikatet en gang i uken og så kopiere et eventuelt nytt sertifikat inn i Keystore og starte tjenesten på nytt. I all hovedsak vil del 2 og 3 utføres automatisk en gang i uken via cron. Ukentlig kan kanskje se mye ut, men tatt i betraktning at reverseproxyen min forsøker renewal to ganger i døgnet er en gang i uken helt greit.
For å få dette til oppretter vi et enkelt script under /root/bin/renew_lets_encrypt_cert.sh og legger enkelt og greit inn kommandoene vi brukte i del 2 og 3.
Det skal sies at dette er et veldig brutalt script som ikke har noen som helst form for sjekk eller feilhåndtering, så hvis noe knekker, så knekker det hardt. Det bør virkelig skrives om til noe som sjekker etter mtime eller noe på sertifikatet for å unngå å stappe det samme sertifikatet inn i Keystore, og unngå å starte tjenestene på nytt unødvendig.
# Forny sertifikatet fra LetsEncrypt /usr/bin/certbot renew --quiet --no-self-upgrade # Konverter sertifikatet til PKCS#12-format /usr/bin/openssl pkcs12 -export \
-inkey /etc/letsencrypt/live/mysubdomain.mydomain.com/privkey.pem \
-in /etc/letsencrypt/live/mysubdomain.mydomain.com/fullchain.pem \
-out /tmp/cert.p12 -name unifi -password pass:temppass # Importer sertifikatet til Java Keystore som UBNT forstår /usr/bin/keytool -importkeystore -deststorepass aircontrolenterprise \ -destkeypass aircontrolenterprise -destkeystore /var/lib/unifi/keystore \ -srckeystore /tmp/cert.p12 -srcstoretype PKCS12 -srcstorepass temppass -alias unifi -noprompt # Rydd opp og start tjenesten på nytt for å bruke det nye sertifikatet rm /tmp/cert.p12 /etc/init.d/unifi restart
Gjør scriptet kjørbart
$ sudo chmod +x /root/bin/renew_lets_encrypt_cert.sh
Legg inn scriptet i crontab slik at det kjøres regelmessig. Kjør sudo crontab -e og legg inn følgende i slutten av filen:
1 1 * * 1 /root/bin/renew_lets_encrypt_cert.sh
Dette kjører en fornyelse av sertifikatet hver mandag klokken 01:01.
NB: For at dette i det hele tatt skal virke, må serveren UniFi-kontrolleren kjører på ha port 80 og 443 åpne for at verifiseringen av sertifikatet skal gjennomføres. Dersom maskinen står bak en reverse proxyserver, må denne ha åpnet port 80 og 443 til serveren UniFi-kontrolleren kjører på. Hvis port 80 og 443 ikke er åpne vil ikke verken utstedelse eller fornyelse av sertifikatene kunne gjennomføres, og da må man gjøre alt over manuelt etter å ha åpnet portene.