Als je op een server gebruik wilt maken van SSL-certificaten, is de makkelijkste methode met behulp van opensource: het aanmaken van de certificaten via Let’s Encrypt.

Door: André Fondse

Een beperking van Let’s Encrypt is dat het aanmaken van deze certificaten alleen werkt als de server via internet benaderbaar is. Als dat niet het geval is, kun je gebruik maken van Step-CA zoals Koen Vervloesem in Linux Magazine nummer 6 van 2019 beschreven heeft. Dit is vrij ingewikkeld. Een andere mogelijkheid is om je eigen SSL-certificaten-uitgever te worden. In deze workshop gaan we in op deze mogelijkheid.

Werkwijze

In het kort verloopt het aanmaken van SSL-certificaten als certificaten-uitgever als volgt:

1: Word zelf een certificaat-uitgever en maak certificaten aan.
2: Installeer je eigen root certificaat (als certificaat-uitgever) op alle apparaten die je als server gebruikt.
3: Importeer het certificaat als certificaat-uitgever op al je clients.

Het aanmaken van certificaten gaat via het ingeven van opdrachten via de terminal. In het vervolg van deze workshop zullen deze stappen één voor één nader uitgewerkt worden.

Word zelf een certificaat-uitgever en maak certificaten aan

Met de commando’s uit listing 1 zorg je ervoor dat je zelf je eigen certificaat-uitgever wordt en certificaten voor je server aanmaakt.

Listing 1

Toelichting op de commando’s:

Regel 1 + 2: We slaan alles wat we aanmaken rondom de zelf ondertekende certificaten in een subdirectory van je homedirectory met de naam self-signed-cert.
Regel 3: Met deze regel wordt een privé-sleutel aangemaakt met de naam linuxmag_ca.key.
Regel 4: Je maakt een certificaat als certificaat-uitgever aan met de geldigheid van 10 jaar (3652 dagen) met de naam linuxmag_ca.pem. Omdat je dit certificaat toch alleen voor jezelf gebruikt, hoef je je voorlopig geen zorgen meer te maken over het vernieuwen van het certificaat. Openssl stelt een aantal vragen over de tenaamstelling van het certificaat. Na het ingeven van het e-mailadres is het certificaat van jou als certificaat-uitgever aangemaakt.

Regel 5: Niet alle clients (waaronder Android) accepteren een root certificaat in het .pem-formaat. Daarom converteer je het root certificaat ook naar het .crt-formaat.

Regel 6: Met dit commando maak je de privé-sleutel van het certificaat dat je op de server gaat gebruiken.

Regel 7: Het csr-bestand heb je nodig om in regel 8 een certificaat aan te kunnen maken. Vul hier de gevraagde gegevens in. Bij ‘challenge password´kun je ook een enter ingeven, zodat je bij het starten van de webserver niet steeds het wachtwoord op hoeft te geven.

Regel 8: Je maakt hier een certificaat voor op je server aan die je ondertekent met je eigen certificaatautoriteit die je in regel 4 hebt aangemaakt. Ook hier heb ik ervoor gekozen het certificaat 10 jaar geldig te laten zijn. Voordat je deze regel invoert, maak je eerst nog met je favoriete editor het bestand linuxmag.ext aan waarin je de inhoud van listing 2 opneemt.

Listing 2

In de eerste 6 regels van linuxmag.ext staan de instellingen voor het servercertificaat die ervoor zorgen dat het certificaat door jou als certificaat-uitgever geaccepteerd wordt. Je moet dan wel je uitgeverscertificaat geïnstalleerd hebben. Staan er in deze regels andere waarden, dan is er kans dat het door jou zelf uitgegeven certificaat (fout)meldingen gaat geven. In regel 7 geef je de hostname aan van de server waarop het certificaat draait. In regel 7 betreft dit een server die alleen in het interne netwerk bereikbaar is. In regel 8 kun je optioneel ook het IP-adres opnemen van deze server. Meerdere hostnames en IP-nummers voeg je toe door op aparte regels DNS.2 = …, IP.2 = … en dergelijke op te nemen.

Hoewel je de certificaten waarschijnlijk alleen op je interne netwerk gebruikt, is het vanuit veiligheidsoogpunt verstandig er voor te zorgen dat alleen jij rechten hebt op de .key-bestanden. Dit doe je met het commando:

chmod go-rwx linuxmag_ca.key
chmod go-rwx linuxmag.key

Installeer je eigen root certificaat (als certificaat-uitgever) op alle apparaten die je als server gebruikt

Het certificaat dat je als eigen certificaat uitgever hebt aangemaakt ga je nu installeren op je server(s). Hoe je je eigen certificaten op je (web)server) installeert, valt buiten de scope van deze workshop. Op onder andere op deze website staat beschreven hoe je voor Apache onder Debian (en afgeleiden) het certificaat installeert. Apache heeft voor het configureren van een secure webserver op basis van dit voorbeeld het bestand linuxmag.pem nodig als SSLCertificateFile en het bestand linuxmag.key als SSLCertificateKeyFile (zie afbeelding 1).

Afbeelding 1: Apache configuratie

Importeer het certificaat als certificaat uitgever op al je clients

In deze laatste stap voorzie je alle clients (die gebruikmaken van de server(s) waarop je het eigen aangemaakte certificaat hebt geïnstalleerd) van het certificaat van jou als certificaat-uitgever. Door dit certificaat op te nemen, weten de clients die je gebruikt dat SSL-certificaten die ondertekend zijn met dit certificaat te vertrouwen zijn. Als je op een client met meerdere gebruikers(namen) werkt, dan installeer je voor alle applicaties per gebruiker het certificaat van jou als uitgever. Voor een aantal applicaties licht ik toe hoe je dit certificaat installeert. Het makkelijkste is om de certificaten die je op de clients wilt zetten op je webserver te zetten, zodat je ze met de client van de webserver kunt downloaden. Het gaat (op basis van het voorgaande voorbeeld) om de volgende bestanden:

linuxmag_ca.pem
linuxmag_ca.crt
Afbeelding 2: certificaatgegevens root certificaat

Firefox

Type in de adresbalk: about:preferences#privacy. Scroll vervolgens naar beneden en klik op ‘Certificaten bekijken’. Je komt nu in de certificatenbeheerder. Klik nu rechts aan de bovenkant op ‘Organisaties’ en klik daarna midden onder op ‘Importeren’. Selecteer nu het linuxmag_ca.pem bestand. Firefox vraagt nu of je het certificaat wilt vertrouwen. Als je op de knop ‘Weergeven’ klikt, dan zie je alle informatie over de certificaatuitgever (zie afbeelding 2). Voordat je op de OK knop klikt, vink je nog de velden aan waarvoor je het certificaat wilt vertrouwen.

Als je nu op je client een website via HTTPS opent van de server waarop je je eigen aangemaakte SSL-certificaten geïnstalleerd hebt, dan krijg je geen beveiligingsmeldingen meer (afbeelding 3). Als je op het slotje klikt, krijg je wel een melding dat Mozilla de certificaatuitgever niet herkent (afbeelding 4), maar dit doet niets af aan de werking.

Afbeelding 3: https site zonder beveiligingsmelding
Afbeelding 4: Melding dat Mozilla certificaat uitgever niet herkent

Google Chrome

Type in de adresbalk: chrome://settings/certificates. Klik nu op de tab ‘Certificeringsinstanties’ en klik daarna op ‘Importeren’. Selecteer nu het linuxmag_ca.pem bestand. Kies nu wat je van het certificaat wilt vertrouwen en klik op de ‘OK’ knop.

Android

Het makkelijkst is om het bestand linuxmag_ca.crt op je webserver te installeren. Download dit bestand op je Android device via http. Open daarna het bestand, geef het certificaat een naam en voeg het het certificaat toe. In afbeelding 5 is het certificaat weergegeven. Na de herstart van je browser benader je nu je eigen server via https.

Afbeelding 5: Gegevens certificaat in Android

Tot slot

Het configureren van je eigen certificaten is een secure klus. Als je het eenmaal doorhebt, dan heb je ook wat. Je bent dan voor de door jouw ingegeven geldigheidsduur van het certificaat van deze configuratie verlost! En als je een andere computer installeert, dan kopieer je de certificaten daar gewoon naartoe.