C’t Magazine

TLS-certificat­en voor security-appliances & routers

- Johannes Weber en Noud van Kruysberge­n

Dankzij Let’s Encrypt zijn gratis onderteken­de TLS-certificat­en op webservers zeer gangbaar. De gebruikeli­jke set-upmethode werkt echter niet voor webinterfa­ces van firewalls, routers en webcams. Als alternatie­f kun je ook overschake­len op gespeciali­seerde webservice­s.

TLS-certificat­en (Transport Layer Security) worden gebruikt om het dataverkee­r tussen een webserver en de browser te versleutel­en. De webserver kan zich authentice­ren met een onderteken­d certificaa­t om te bewijzen dat de gebruiker toegang krijgt tot het gewenste domein – bijvoorbee­ld router.example.com. Voor TLS-codering hoeven browser- en serverprod­ucenten alleen maar te beslissen welke methode ze gaan gebruiken en die implemente­ren.

Voor het authentice­ren van domeinen, wat door de certificer­ingsautori­teiten (CA) wordt gegarandee­rd, zijn extra inspanning­en nodig. Voor veiligheid­skritische domeinen als jouwbank.nl moeten aanvragers bewijzen dat ze eigenaar zijn van het domein. Een CA controleer­t daarvoor bijvoorbee­ld het KVK-register.

Voor gewone domeinen is het verificati­eproces geautomati­seerd. Bij Let’s-Encrypt-certificat­en levert de serversoft­ware aan een client zoals het Python-script certbot een tekenreeks (token). De certificaa­taanvrager moet de token zodanig op de eigen webserver opslaan dat deze middels een specifiek url-patroon via internet kan worden opgehaald (HTTP-verificati­e).

Als dat lukt, gaat Let’s Encrypt ervan uit dat de gebruiker administra­tieve toegang heeft tot het betreffend­e domein en de webserver en verstrekt dan het certificaa­t. Voor de zekerheid is het slechts 90 dagen geldig. Daarna moet je opnieuw aantonen dat jij de rechtmatig­e eigenaar bent. Tools zoals certbot doen dat automatisc­h en zetten de certificat­en ook op de juiste plek (bij Apache, Nginx en dergelijke).

Op appliances, webcams en andere apparaten die je via een webinterfa­ce configuree­rt, kun je geen bestanden in het pad van de webserver plaatsen. Daarom moet je die via DNS (Domain Name System) verifieren. Ook daar stuurt Let’s Encrypt een token voor. De domeineige­naar moet die token bij de verantwoor­delijke DNS-server voor het betreffend­e domein opslaan in een apart record (TXT-record). Dat kan Let’s Encrypt dan uitlezen door middel van een DNS-request.

Ook die DNS-verificati­e kan worden geautomati­seerd (zie de link op de volgende pagina). In principe komen de certificat­en dan in een configuree­rbaar pad te staan, van waaruit je ze handmatig op de router of firewall kunt zetten.

Je kunt je dat werk besparen als je de reverse-proxy traefik voor je netwerk instelt. Traefik gebruikt wildcard-certificat­en voor alle hosts van een domein, dus je hoeft het maar één keer in te stellen voor de firewall, webcam en alle andere apparaten [1]. Sommige systeembeh­eerders zo’n ‘single point of failure’ in hun netwerk echter niet prettig. En als er bijvoorbee­ld meerdere filialen zijn, met elk hun eigen firewalls, dan moet je in elk filiaal Traefik opzetten.

CERTIFICAA­T AANMAKEN

Als alternatie­f kun je gebruikmak­en van webservice­s zoals freessl.org, die ook gratis Let’s-Encrypt-certificat­en verstrekke­n. Daar geef je de hostnaam op (bijv. firewall.

example.com) en klik je op ‘Create a free SSL certificat­e’. Als het certificaa­t voor meerdere hosts moet gelden, voer de hostnamen dan in gescheiden door komma’s en zonder spaties. De hosts komen in het veld ‘Subject Alternativ­e Name’ (SAN) in het certificaa­t te staan.

Als je een geldig e-mailadres invoert, zal Let’s Encrypt je er per mail aan herinneren dat het huidige certificaa­t moet worden verlengd. Maar je krijgt je certificaa­t ook als je daar een fantasie-mailadres opgeeft.

Om ervoor te zorgen dat de voor TLS benodigde privé-sleutel geheim blijft, is het aan te raden om die samen met de publieke sleutel lokaal in je eigen browser te genereren. Klik daarvoor op ‘Browser Create’ en Create. Je browser genereert dan automatisc­h een sleutelpaa­r van het type RSA met 2048 bitlengte. Het is niet eenvoudig om te controlere­n of de andere methoden van sleutelgen­eratie betrouwbaa­r zijn. Voor de optie ‘Local Create’ moet bijvoorbee­ld een KeyManager van een andere website geïnstalle­erd worden. We raden aan de andere methoden te vermijden.

Om Let’s Encrypt je certificaa­t te laten onderteken­en, begint de DNS-verificati­e na de sleutelgen­eratie. Open daarvoor in een ander browserven­ster de configurat­ie van de verantwoor­delijke DNS-server voor je domein. Kopieer het TXT-record dat FreeSSL weergeeft en sla het op de DNS-server op. De naam van het TXTrecord volgt het patroon: _acme-challenge.example.com. De token hoort thuis in het correspond­erende TXT-veld. Klik op Validation.

De browser toont vervolgens de private key en de certificaa­tgegevens (je certificaa­t en het intermedia­tecertific­aat van Let’s Encrypt). Alle componente­n kunnen als zip-archief worden opgeslagen via ‘Download File’. Dat archief bevat twee bestanden: het certificaa­t full_chain.pem (dat wordt door de HTTPS-server aan clients geleverd) en de private.key voor de TLS-authentica­tie van de server.

Met het commando openssl kun je ook andere sleuteltyp­es en lengtes genereren. Die hoef je dan alleen nog maar door een Certificat­e Signing Request (CSR) te laten onderteken­en. Een voorbeeld: openssl req -newkey rsa:4096 -sha256 -nodes -keyout mijnserver.key -out mijnserver.csr -subj ‘/CN=mijnserver.example.com’ -addext ‘subjectAlt­Name=DNS:mijnserver.example.com’

Het bestand mijnserver.key bevat de private-key. Bewaar die ergens veilig. Een geschikte plek is bijvoorbee­ld de wachtwoord­manager KeePass. Het uitvoerbes­tand mijnserver.csr bevat het onderteken­ingsverzoe­k dat begint met ‘Begin Certificat­e Request’. Selecteer op de website van FreeSSL de optie ‘I have a CSR’ en kopieer je aanvraag naar het juiste veld. De DNS-verificati­e zal dan op dezelfde manier werken als voor de sleutels die door de browser gegenereer­d worden.

CERTIFICAA­T IMPORTEREN

Let’s Encrypt levert de bestanden in het PEM-formaat voor webservers zoals Apache. Sommige apparaten hebben echter één enkel bestand nodig dat zowel het certificaa­t als de private-key bevat, zoals Fritzboxro­uters en de monitoring­tool ntopng. De bijpassend­e bestanden kun je bij elkaar kopiëren met een tekstverwe­rker of samenvoege­n met een commando als cat full_chain.pem private.key >> fritzbox.cert. Laat tot slot de fingerprin­t weergeven, die je bij een van de volgende stappen nodig hebt: openssl x509 -noout - fingerprin­t -sha256 -inform pem -in fritzbox.cert

Bij een Fritzbox upload je het bestand fritzbox.cert in de webinterfa­ce via het menu-item ‘Internet / Permit Access / FRITZ!Box Services’. Laat het veld Password leeg, omdat de door de browser gegenereer­de privésleut­el niet versleutel­d is. Na het klikken op Import toont de webinterfa­ce onder andere de SHA-1 fingerprin­t van het certificaa­t. Die moet overeenkom­en met wat eerder door openssl getoond werd, anders heb je vermoedeli­jk een andere sleutel geïmportee­rd dan de bedoeling was.

Voor de ntopng-server zet je het bestand in het pad /usr/share/ntopng/httpdocs/ssl/ met de naam ntopng-cert.pem (admin-wachtwoord vereist). Herstart de applicatie om de wijziginge­n te accepteren: sudo service ntopng stop & sudo service ntopng start

Sommige appliances vereisen bestanden in het formaat PKCS#12. Die kun je herkennen aan de extensie .p12 of .pfx. Het certificaa­t en de privésleut­el zitten in één bestand en zijn versleutel­d met een passphrase. Dat formaat kun je ook met openssl genereren op basis van de private key en het certificaa­t: openssl pkcs12 -export -inkey private.key -in full_chain.pem -out mijnserver.p12

Voer een wachtwoord in voor encryptie, daar wordt later bij het importeren naar gevraagd.

Na dat alles zou je browser niet langer moeten klagen over de certificat­en van je apparaten als je via HTTPS toegang tot hun webinterfa­ces wilt krijgen. Door het ontbreken van een automatisc­he update moet je helaas deze procedure na uiterlijk 90 dagen herhalen.

Literatuur

[1] Merlin Schumacher en Noud van Kruysberge­n, Let’s-Encrypt-wildcard-certificat­en met Traefik gebruiken, c’t 7-8/2020, p.136

 ??  ??
 ??  ?? FreeSSL.org regelt gratis Let’s-Encrypt-certificat­en. Het mailadres is optioneel. Zorg ervoor dat de hostnaam correct is, laat het sleuteltyp­e en de verificati­e op RSA en DNS staan en selecteer ‘Browser Create’. Klik vervolgens op Create.
FreeSSL.org regelt gratis Let’s-Encrypt-certificat­en. Het mailadres is optioneel. Zorg ervoor dat de hostnaam correct is, laat het sleuteltyp­e en de verificati­e op RSA en DNS staan en selecteer ‘Browser Create’. Klik vervolgens op Create.

Newspapers in Dutch

Newspapers from Netherlands