
Samenvatting
Akkoord is een eigen dienst om documenten online te laten ondertekenen. De afzender stuurt een PDF via de API, de tekenaar krijgt een link per mail, bekijkt het document, bevestigt met een code van zes cijfers dat het mailadres klopt en tekent met de vinger, de muis of een getypte naam. Een account of app is niet nodig. Na de laatste handtekening zet de dienst een audit-pagina achter in de PDF en verzegelt hij het geheel met een eigen certificaat en een tijdstempel van DigiCert. Elke wijziging na het tekenen is daardoor in Acrobat te zien. Beide partijen krijgen de verzegelde PDF per mail. De eerste toepassing is mijn maandelijkse urenstaat, die de opdrachtgever aftekent voordat de factuur de deur uit gaat.
De vraag
Mijn urenstaat ging elke maand als PDF heen en weer per mail. DocuSign lost dat op, maar dan betaal ik een abonnement voor een handvol documenten en staan ze bij een andere partij. Ik wilde hetzelfde bewijs als DocuSign, dus niet alleen een plaatje van een handtekening. Een tekenaar die aantoonbaar het mailadres beheert, een vastgelegd verloop, en een PDF waarin je ziet of er na het tekenen iets is veranderd. Op mijn eigen server, en met een API, zodat mijn urenportal een urenstaat met één knop ter ondertekening kan versturen.
Wat ik heb gebouwd
- Een tekenpagina in drie stappen (bekijken, code invoeren, ondertekenen) die op telefoon en laptop werkt, zonder account. Tekenen met vinger of muis, of de naam typen in een handschriftlettertype
- Een code van zes cijfers per mail, tien minuten geldig, met vijf pogingen per code en hoogstens drie codes per uur. De code gaat pas weg na een klik op de knop en niet bij het openen van de link, omdat mailscanners links vooraf openen
- Een audit trail die alleen aangevuld kan worden. Database-triggers weigeren elke wijziging en elk verwijderen, en elk event bevat de SHA-256 van het vorige, zodat de hele keten na te rekenen is
- Verzegeling met pyHanko volgens PAdES-B-LT, met een eigen certificaatautoriteit waarvan de root-sleutel offline staat, een RFC 3161-tijdstempel van DigiCert met Sectigo als terugval, en certificering op 'geen wijzigingen toegestaan'
- Een audit-pagina achter in de PDF met de vingerafdruk van het origineel en van het getoonde document, de tekenaars met gemaskeerd mailadres, en elk event met tijd, IP-adres en browser
- Velden via onzichtbare ankers in de PDF, zodat de aanroeper alleen het document maakt en de dienst de posities zelf opzoekt. Daarbij een API voor aanmaken, status en ophalen, en een beheerscherm voor weigeren, intrekken en herinneren
In detail
- Nooit een onverzegelde PDF als getekend. Is de tijdstempeldienst onbereikbaar, dan krijgt de tekenaar gewoon een bevestiging, blijft het document wachten en verzegelt een achtergrondtaak het alsnog, met een melding aan mij als dat na een uur nog niet gelukt is
- Wat de tekenaar ziet is wat er getekend wordt. De vingerafdruk van het getoonde document staat op de tekenpagina, en de server controleert hem opnieuw op het moment van tekenen
- Bestand tegen mailscanners en dubbelklikken. Het openen van de link legt alleen 'geopend' vast, en twee keer op Ondertekenen drukken levert precies één handtekening op
- Link-tokens en codes staan alleen als hash in de database. De tekensessie na de code duurt 30 minuten en hoort bij die ene browser, dus de link doorsturen is niet genoeg om te tekenen
- Zelf gehost, met SQLite en de documenten op disk in de bestaande uurlijkse backup, en een melding via Telegram bij getekend, geweigerd of verlopen
Resultaat
Live sinds oktober 2026 op documenten.xbas.nl, met 227 tests over de verzegeling, de audit trail, de codes en de tekenflow, waarvan twee tegen de echte tijdstempeldiensten. Juridisch is het een eenvoudige elektronische handtekening met een volledig bewijspakket, hetzelfde niveau als de standaardhandtekening van DocuSign, en voldoende voor offertes, opdrachtbevestigingen en de meeste zakelijke contracten. Voor bredere inzet zijn de volgende stappen velden slepen op een willekeurige PDF, meerdere afzenders met eigen huisstijl, inloggen met iDIN als zwaardere verificatie, en een publiek vertrouwd certificaat, zodat Acrobat een groen vinkje toont in plaats van 'identiteit onbekend'.