abonneren

ACME: De techniek achter SSL-certificaat-aanvragen

SSL-certificaat-aanvragen
Toen vijf jaar geleden Let’s Encrypt het daglicht zag, kon niemand voorspellen dat deze sympathieke underdog de wereld van de certificaatautoriteiten door elkaar zou schudden. Dat is voor een groot deel te danken aan ACME, een protocol voor volledig automatische SSL-certificaat-aanvragen.

In 2012 vatten Josh Aas en Eric Rescorla van Mozilla samen met Peter Eckersley van de digitale burgerrechtenbeweging Electronic Frontier Foundation (EFF) en computerwetenschapper J. Alex Halderman van de universiteit van Michigan het plan op om een nieuwe certificaatautoriteit (CA) op te richten die gratis tls-certificaten voor websites zou uitreiken. Dat plan werd uitgewerkt tot wat we nu als Let’s Encrypt kennen.

Het ging heel hard met Let’s Encrypt. Op 14 september 2015 reikte Let’s Encrypt zijn eerste certificaat uit. En twee jaar later al bleek volgens NetTrack maar liefst 38 procent van de websitecertificaten door de gratis certificaatautoriteit te zijn uitgereikt, ruim voor de nummer twee (de commerciële CA Comodo met 19 procent). Let’s Encrypt heeft de hele CA-industrie, die jaren ingedommeld was, getransformeerd.

Aanvragen automatiseren

Een groot deel van het succes van Let’s Encrypt is te danken aan de verregaande mate van automatisering die de certificaatautoriteit heeft doorgevoerd. Met de officiële Let’s Encrypt-software Certbot hoef je maar één opdracht uit te voeren op je Linux-server om een certificaat aan te vragen en met nog één andere opdracht vernieuw je je certificaat, dat 90 dagen geldig is. Indien gewenst stelt Certbot zelfs je Apache-configuratie in. Kortom, een kind kan de was doen.

Ook aan de kant van de CA gebeurt alles volautomatisch, met de software Boulder. Alleen op deze manier is het kleine team van Let’s Encrypt in staat om een CA draaiende te houden. Om certificaatuitgiftes te automatiseren heeft Let’s Encrypt het protocol ACME (Automatic Certificate Management Environment) ontwikkeld dat de nodige interacties tussen een webserver en een CA beschrijft.

Er zijn ondertussen al tientallen ACME-clients ontwikkeld. En ook aan de kant van de andere CA’s gebeurt er wat: in maart 2018 was Buypass de eerste commerciële CA die onder de merknaam Buypass SSL Go gratis tls-certificaten via ACME uitreikte, en ook de CA’s Entrust en GlobalSign ondersteunen ondertussen het protocol.

SSL-certificaat-aanvragen

Alleen domeingevalideerde certificaten

ACME is alleen geschikt om zogenoemde domeingevalideerde certificaten (DV-certificaten) uit te reiken, waarbij de aanvrager bewijst dat hij de controle heeft over het domein waarvoor hij een certificaat wil. Let’s Encrypt heeft met zijn gratis certificaten dan ook de hele DV-business van commerciële CA’s weggevaagd. Het enige waar commerciële aanbieders zich nog mee kunnen onderscheiden, zijn de uitgebreid gevalideerde certificaten (EV-certificaten).

Het uitgeven van die certificaten is onmogelijk te automatiseren, omdat de aanvrager zijn identiteit of rechtspersoon en bijbehorende gegevens zoals de vestigingsplaats moet bewijzen. De CA controleert dat handmatig voordat hij het certificaat toekent en volgt daarbij de EV SSL Certificate Guidelines van het CA/Browser Forum.

De ontwikkeling van ACME

2012: Het werk aan een de nieuwe certificaatautoriteit Let’s Encrypt begint achter de schermen bij Mozilla, de Electronic Frontier Foundation en de universiteit van Michigan.

2013: De Internet Security Research Group (ISRG) wordt opgericht.

2014: De ISRG kondigt Let’s Encrypt publiek aan.

2015: De ISRG publiceert een conceptversie van het ACME-protocol en Let’s Encrypt reikt zijn eerste certificaat uit, voor https://helloworld.letsencrypt.org. De webserver Caddy krijgt ingebouwde ondersteuning voor ACME en Let’s Encrypt wordt als CA door de belangrijkste browsers ondersteund.

2016: De release van ACME 1.0, met ondersteuning voor enkelvoudige subdomeinen. Let’s Encrypt komt uit de bètafase.

2017: Mozilla sponsort de ontwikkeling van mod_md, een module die ACME-ondersteuning toevoegt aan Apache-httpd. Wereldwijd zijn 38 procent van de tls-certificaten door Let’s Encrypt uitgereikt.

2018: De release van ACME 2.0 met de langverwachte ondersteuning van wildcards in domeinen. Buypass biedt als eerste commerciële CA certificaten via ACME aan. Meer dan 150 miljoen websites gebruiken een tls-certificaat van Let’s Encrypt.

2019: Er wordt gewerkt aan ACME-ondersteuning in de webserver nginx. Let’s Encrypt verwacht 210 miljoen websites van een certificaat te voorzien.

Controle over het domein

Maar hoe bewijs je dat je de controle over een domein hebt (bijvoorbeeld example.com)? Allereerst maakt de ACME-client een sleutelpaar aan voor asymmetrische encryptie. Daarna vraagt de client aan de CA wat hij moet doen om aan te tonen dat hij de controle over het domein heeft. De CA kan bijvoorbeeld antwoorden dat de client een dns-record onder example.com moet aanmaken of een bestand dat bereikbaar is op https://example.com/8303 met als inhoud ed98 (in realiteit gaat het uiteraard om complexere tekenreeksen). De CA vraagt de client ook om een getal 9cf0b331 met zijn geheime sleutel te ondertekenen, als bewijs dat de client de controle heeft over het sleutelpaar.

SSL-certificaat-aanvragen

Veronderstel dat de ACME-client een specifiek bestand moet aanmaken. De client plaatst het gevraagde bestand op de webserver en ondertekent het getal met zijn geheime sleutel. Hij stuurt die handtekening naar de CA, die aan de hand van de publieke sleutel van de client kan verifiëren of het getal met de geheime sleutel ondertekend is. De CA downloadt ook het gevraagde bestand en controleert of dit de verwachte inhoud heeft. Kloppen zowel het ondertekende getal als het bestand op de webserver, dan besluit de CA dat de ACME-client geassocieerd met die publieke sleutel de controle heeft over het domein example.com en certificaten voor dit domein mag beheren.

SSL-certificaat-aanvragen

Certificaten uitreiken

Na deze eerste stap is het uitreiken, vernieuwen en intrekken van certificaten eigenlijk eenvoudig: de ACME-client stuurt gewoon aanvragen voor certificaatbeheer naar de CA en ondertekent die met zijn geheime sleutel, zodat de CA kan controleren dat de aanvraag wel degelijk van die client komt. De CA verifieert of de client een certificaat voor dit domein mag aanvragen, vernieuwen of intrekken. Als alles in orde is, bezorgt de CA de client een certificaat of trekt hij het in.

Geschreven door: Koen Vervloesem op

Category: Nieuws, Security

Tags: Encryptie

Laatste Vacatures