Cette page n'existe pas encore en français. Vous lisez la version néerlandaise.
Construis ton propre certificat
Het slotje links in je adresbalk zegt: je zit echt bij de site die er staat, en niet bij iemand die zich ervoor uitgeeft. Achter dat slotje zit een certificaat. Hieronder maak je er zelf twee — met echte sleutels, echte handtekeningen en een echte controle. Alles zal kloppen. En toch zou geen enkele browser ze aanvaarden, en niet omdat er ergens een rekenfout in zit.
Woorden die je zo nodig hebt
- Certificaat
- Een verklaring in de vorm "deze publieke sleutel hoort bij deze naam", ondertekend door iemand anders. Hoe zo'n verklaring er in het echt uitziet, staat in hoofdstuk 7.2; hier bouw je er zelf een.
- Subject en issuer
- De twee namen in elk certificaat. Subject is over wie het gaat, issuer is wie het ondertekend heeft. Engelse woorden, want ze staan zo letterlijk in de velden.
- CA
- Certification authority, certificeringsautoriteit: een partij die certificaten uitschrijft voor anderen. In de demo ben jij dat.
- Wortelcertificaat
- Het certificaat helemaal bovenaan, dat zichzelf ondertekent. Subject en issuer zijn er identiek. "Wortel" omdat de keten daar stopt, zoals een boom in een schema ondersteboven staat.
- Zelfondertekend
- Ondertekend met de private sleutel die bij de publieke sleutel in het certificaat zelf hoort. Het bewijst dat je die sleutel hebt, en verder niets — je zegt alleen over jezelf dat je te vertrouwen bent.
- Eindcertificaat
- Het certificaat onderaan de keten, voor een echte naam: een website, een persoon. Dat van je bank is er zo een.
- Vertrouwensanker (trust anchor)
- De sleutel waar je de controle stopt omdat je hem gewoon gelooft. Elke keten eindigt bij zo eentje. Dit woord is de kern van dit hoofdstuk.
- Vingerafdruk
- De hash van een sleutel of een certificaat, geschreven als hex met dubbelpunten. Kort genoeg om te vergelijken, en uniek genoeg om als naam te dienen.
- JSON
- Een manier om gegevens op te schrijven met accolades en
"naam": waarde. Je ziet ze zo in de uitvoer.
Wat je gaat bouwen
Twee certificaten en één handtekening ertussen. Dat is de kleinste keten die bestaat, en ze werkt precies als de keten achter het slotje van je bank — alleen staan daar meestal drie certificaten in: het eindcertificaat van de site, een tussencertificaat, en de wortel.
| Wortelcertificaat | Eindcertificaat | |
|---|---|---|
| subject | Mijn eigen wortel-CA | de naam die jij intikt |
| issuer | Mijn eigen wortel-CA | Mijn eigen wortel-CA |
| sleutelpaar | eigen | een nieuw, eigen paar |
| wie zet de handtekening | de wortel, over zichzelf | de wortel, over het eindcertificaat |
| wat het bewijst | dat iemand die private sleutel heeft | dat de wortel deze naam aan deze sleutel koppelt |
De private sleutel van het eindcertificaat verlaat nooit de eigenaar. De wortel ondertekent een verklaring over een publieke sleutel, en heeft de bijhorende private sleutel daarvoor niet nodig. Dat is dezelfde scheiding als in hoofdstuk 6.
Ons certificaat is JSON, een echt certificaat is DER
De demo schrijft een certificaat als JSON, omdat je dat kan lezen. Een echt certificaat bevat dezelfde kern — serienummer, subject, issuer, het geldigheidsvenster, de publieke sleutel — maar staat in DER, een binaire schrijfwijze waarin elk veld een vaste plaats en een vaste lengte heeft. Die velden en wat er nog bij komt, staan in hoofdstuk 7.2.
Waarom binair, en niet gewoon JSON? Een handtekening staat over bytes, niet over betekenis. Zet in JSON één spatie bij, of draai twee velden om, en het zijn andere bytes terwijl er hetzelfde staat: de handtekening klopt niet meer. De demo lost dat op door altijd exact dezelfde velden in exact dezelfde volgorde weg te schrijven voordat er getekend wordt. DER doet hetzelfde, maar dan als afspraak waar niemand van kan afwijken. Dat is de enige reden dat een certificaat er onleesbaar uitziet.
Bouw je eigen keten
Alles gebeurt in je browser. De sleutels worden hier gemaakt en gaan nergens heen; sluit je het tabblad, dan zijn ze weg.
- Klik Maak een wortelcertificaat. Zoek in de JSON de velden
subjectenissuer: dezelfde naam. Dit certificaat zegt over zichzelf dat het klopt. - Typ een naam — je voornaam, of een verzonnen domein zoals
sam.be— en klik Maak een eindcertificaat. Kijk naarxeny: dat zijn de coördinaten van een punt op de kromme uit hoofdstuk 6.2, en ze zijn anders dan die van de wortel. Nieuw sleutelpaar. - Klik Controleer de keten. De demo haalt de publieke sleutel uit het wortelcertificaat en controleert daarmee de handtekening onder het eindcertificaat. Geldig.
- Klik Verander één letter in de naam. De handtekening blijft staan, de datums blijven staan, er verandert één teken — en de controle draait meteen opnieuw. Ongeldig. Dit is de belangrijkste knop van dit hoofdstuk: zo weet je dat niemand een certificaat kan aanpassen zonder de private sleutel van de uitgever.
- Klik Zet de naam terug. Weer geldig, zonder dat er iets opnieuw ondertekend is.
- Klik Oordeel zoals een browser. Vier controles, drie keer JA en één keer NEE. Lees die vierde regel goed.
Alles klopt, en toch gelooft niemand je
Je keten is wiskundig in orde. Elke handtekening is echt, elke controle slaagt, en de sleutels zijn van hetzelfde soort als achter het slotje van echte sites: ECDSA op de kromme P-256, precies wat je in hoofdstuk 7.1 zelf gebruikt hebt. Zet je dit op een webserver, dan krijg je toch een rode waarschuwing over je hele scherm.
De reden staat in die vierde regel van de laatste knop. Je browser controleert de handtekeningen, klimt de keten op, en komt uit bij jouw wortel. Daar stelt hij één vraag: staat deze wortel in mijn lijst? Dat is een echte lijst met echte vingerafdrukken, die met de browser meegeleverd wordt. Firefox gebruikt die van Mozilla, met rond de honderdvijftig wortels erin; Chrome, Safari en Windows hebben er elk een van Google, Apple en Microsoft. Jouw wortel staat in geen van die vier, want je hebt hem dertig seconden geleden gemaakt.
Er staat dus geen wiskundig verschil tussen jouw certificaat en dat van je bank. Het verschil is dat iemand de CA van je bank op een lijst heeft gezet, en jou niet. Om erop te komen moet een CA zich laten doorlichten, regels volgen en dat elk jaar opnieuw laten controleren.
Wat een echte CA doet voordat ze tekent
Een CA die een certificaat voor sam.be uitschrijft, wil eerst
weten of jij dat domein echt beheert. Meestal gaat dat automatisch: zet een
bepaald bestand op de server, of een bepaalde regel in de DNS van het domein,
en de CA gaat kijken of het er staat. Kan je dat, dan beheer je het domein.
Let's Encrypt doet het zo, gratis, en daarom heeft zowat elke site vandaag een
slotje.
| Jouw wortel | Een wortel uit de lijst |
|---|---|
| Tekent wat jij vraagt. | Tekent pas na een controle van wie de aanvrager is of wat hij beheert. |
| Bestaat in één tabblad. | Staat in honderden miljoenen toestellen, jarenlang. |
| Niemand kijkt mee. | Jaarlijkse audits, publieke regels, en elk uitgeschreven certificaat komt in een openbaar logboek. |
| Kwijt bij het sluiten van je browser. | Gaat de private sleutel ooit lekken, dan moet de wortel uit alle lijsten — en dat breekt elke site eronder tegelijk. |
Een lijst kan je aanpassen. Voeg jouw wortel toe aan de lijst van je eigen laptop, en je eigen certificaten werken meteen zonder waarschuwing. Scholen en bedrijven doen dat op hun toestellen, en daar zit een addertje onder: wie een wortel in jouw lijst krijgt, kan een geldig certificaat maken voor elke site en zo tussen jou en het internet gaan zitten zonder dat het slotje iets laat merken. Zie hoofdstuk 7.4 voor wat dat slotje dan nog waard is.
Dezelfde keten zit in de chip van je identiteitskaart, maar dan met de Belgische Staat als CA in plaats van jou: bovenaan een wortel van de Staat, daaronder een certificaat voor jouw kaart met jouw naam erin. Wat er precies op staat en hoe je die handtekening laat zetten, doe je in hoofdstuk 8.2.
Dit is wiskunde: waar de wiskunde ophoudt
Elke stap in je keten is narekenbaar. Handtekening onder het eindcertificaat: te controleren met de sleutel uit het wortelcertificaat. Handtekening onder het wortelcertificaat: te controleren met zijn eigen sleutel. Maar die laatste controle voegt niets toe — wie de private sleutel heeft, kan over zichzelf ondertekenen wat hij wil. Bovenaan elke keten staat een sleutel die je niet kan narekenen, alleen geloven. Dat is het vertrouwensanker.
Dat is geen zwakte in het ontwerp; het is hoe bewijzen werken. In de wiskunde begin je met axioma's: uitspraken die je aanneemt, omdat je ergens moet beginnen. In de cryptografie heet het vakgebied dat dit uitzoekt bewijsbare veiligheid, en de stellingen daar hebben allemaal dezelfde vorm: als deze aanname klopt, dan is dit systeem veilig. Nooit "dit is veilig", altijd "als …, dan …".
Het vertrouwensanker is het axioma van het internet. Alleen is het hier geen wiskundige uitspraak maar een organisatie, en wordt de lijst met axioma's beheerd door vier bedrijven. Daar houdt de wiskunde op en begint de afspraak — en het is nuttig om precies te weten waar die grens ligt.
Tot hier
Dit is het laatste hoofdstuk. Je bent begonnen bij tekst die eruitzag als geheimschrift en het niet was, en je hebt daarna zelf gehasht, wachtwoorden gekraakt, met AES versleuteld, een geheim afgesproken waar iedereen bij stond, punten opgeteld op een kromme, een handtekening gezet en gebroken, berichten verstuurd die alleen je vriend kan lezen, de chip van je identiteitskaart laten tekenen, en nu een certificaatketen gebouwd. Niets daarvan was nagebootst: het is dezelfde wiskunde die achter het slotje van je bank draait.
Wat je nu ook weet, is waar die wiskunde ophoudt. Encryptie regelt dat niemand meeleest en dat niemand ongemerkt iets verandert. Wie je aan de andere kant vertrouwt, is een beslissing van mensen. Dat is geen gat in de techniek — het is de plaats waar jij nog iets te zeggen hebt.