5 min read

Everything is a freaking timing problem

Of: "Hoe zorg ik ervoor dat ik op MacOS terug kan inloggen met de Belfius USB kaartlezer"
Everything is a freaking timing problem

Of: "Hoe zorg ik ervoor dat ik op MacOS terug kan inloggen met de Belfius USB kaartlezer"

Als je een (Business) rekening hebt bij Belfius, kan je op een aantal manier inloggen. Dat kan met itsme, met de (niet verbonden) kaartlezer, of met een USB kaartlezer. Sinds een tweetal weken werkt dit laatste niet meer op MacOS. Deze blogpost legt uit hoe je het terug doet werken.

Eerst wat achtergrond

De "USB verbonden" kaartlezer die Belfius gebruikt, is een Digipass 870 van Vasco, intussen herdoopt tot OneSpan. Om ervoor te zorgen dat je webbrowser verbinding kan maken met de kaartlezer, is een stukje software nodig, de "Digipass Native Bridge". Dit is de software die Belfius je vraagt te installeren de eerste keer.

Dat stukje software wordt bij het starten van je Mac geladen en werkt als een "brug". Aan de ene kant praat het met de kaartlezer. Langs de andere kant moet ook je browser hiermee praten.

Om dat laatste te laten gebeuren zonder specifieke plugins in je browser te moeten laden, gebruikt het WebSockets: je browser "opent een verbinding" met het stukje software, en ze kunnen daardoor efficiënt communiceren. Om dat veilig te laten lopen, gebruiken ze de TLS variant. De communicatie tussen je Browser en de Bridge wordt versleuteld en de Browser gaat nakijken dat het "servertje" wel is wie het beweert te zijn. Hiervoor worden certificaten gebruikt. Die certificaten worden uitgegeven door een instantie die door de Browser of je besturingssysteem vertrouwd wordt. Daarnaast hebben de certificaten ook een beperkte geldigheidsduur. Je browser kijkt dus na of het certificaat niet vervallen is.

En daar zit nu het probleem. Het certificaat dat de Native Bridge gebruikt, verviel op 28 september!

Je Browser zal daarom het certificaat niet aanvaarden, en weigeren een verbinding op te zetten met de Bridge. Hierdoor denkt de Belfius website dat je de software nog niet geïnstalleerd hebt en krijg je de vraag om de software opnieuw te installeren.

Hoe lossen we dit op?

Als je kan, wacht tot Belfius (en/of OneSpan) een nieuwe versie van de software uitrolt. Ik kan me moeilijk voorstellen dat dit bijzonder lang kan duren: als ik zonder dat ik wist hoe de software werkte, dit binnen een half uurtje kan uitvogelen, moeten de ontwikkelaars bij zowel Belfius als OneSpan al heel lang weten dat het probleem opgelost is door een nieuw certificaat aan te vragen, een nieuwe versie te bouwen, te testen enzovoort. Ik kan me moeilijk voorstellen dat dit nog weken kan duren.

Als je niet kan wachten – bijvoorbeeld omdat je functies gebruikt die enkel met de verbonden kaartlezer werken – is er een oplossing, maar ze is niet voor de gevoelige zielen. Doe dit niet als je niet snapt wat je doet, ik geef geen garanties of ondersteuning!

Stap 1: download het certificaat

Je kan het certificaat dat gebruikt wordt, downloaden op de volgende link: digipass.crt.

Wil je het liever zelf downloaden en ben je niet bang van de command line, dan doe je het volgende:

  1. Je opent een Terminal window
  2. Je geeft daar volgende commando-regel in: openssl s_client -showcerts -servername localhost.vdsnb.com -connect localhost.vdsnb.com:$(cat /usr/local/VASCO/NativeBridge/port.conf) < /dev/null
  3. Bovenaan de output die je dan krijgt, zie volgende lijntjes:
depth=0 OU = Domain Control Validated, CN = localhost.vdsnb.com
notAfter=Sep 28 08:42:20 2019 GMT
verify return:1
---
Certificate chain
 0 s:/OU=Domain Control Validated/CN=localhost.vdsnb.com
   i:/C=BE/O=GlobalSign nv-sa/CN=GlobalSign Domain Validation CA - SHA256 - G2
-----BEGIN CERTIFICATE-----
MIIHazCCBlOgAwIBAgIMRoLKkoC+cWlkEslsMA0GCSqGSIb3DQEBCwUAMGAxCzAJ
BgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMTYwNAYDVQQDEy1H

Je knipt en plakt alles vanaf de eerste BEGIN CERTIFICATE tot en met de eerste END CERTIFICATE  in een bestandje. Zorg er wel voor dat je de beide BEGIN / END lijntjes helemaal mee plakt!

Stap 2: Het certificaat importeren in Key Chain

Open nu "Keychain Access" (of Sleutelhangertoegang als je Mac in het Nederlands staat).

Klik op "Certificates" (Certificaten) links onderaan. In de menu-bar ga je naar View en dan klik je op "Show expired certificates". De Nederlandse vertaling ervan heb ik niet zo direct bij me, maar je zou het normaal wel moeten kunnen vinden op basis daarvan.

Je ziet nu alle certificaten die je Mac kent, zowel de vervallen als niet vervallen. We gaan nu ons Digipass certificaat importeren. Klik daarvoor het op plus tekentje links boven in de Keychain Access toepassing.

Selecteer het bestand dat je net gedownload hebt of aangemaakt hebt.

Als je nu goed kijkt naar het overzicht, zou daar een certificaat voor "localhost.vdsnb.com" bijgekomen moeten zijn. Er staat een rood kruisje voor, om aan te tonen dat het certificaat vervallen is.

Dubbelklik nu op "localhost.vdsnb.com" in de lijst.

Stap 3: Trust instellingen bijwerken

We gaan nu tegen Keychain – en dus je Mac – zeggen dat we het certificaat toch vertrouwen, ook al is het niet meer geldig.

Klik op het driehoekje voor Trust. In het lijstje dat je nu krijgt, pas je de tweede dropdown – "Secure Sockets Layer (SSL)" – aan naar "Always Trust".

Trust settings SSL aanpassen naar "Always Trust"

Sluit nu het venstertje. Je Mac zal ter bevestiging om je login wachtwoord vragen, of om je vingerafdruk als je Mac een vingerafdruk lezer ingebouwd heeft.

Als je nu goed kijkt in het lijstje in Keychain, zal je zien dat er een blauw plus-tekentje voor het certificaat staat. Dit betekent dat je het certificaat vertrouwt.

Sluit nu Keychain af.

Stap 4a: There is no stap 4 ...

Tada. Nu zou alles terug moeten werken. Het kan zijn dat je even je browser moet afsluiten want de informatie over certificaten en WebSocket verbindingen wordt tijdelijk bewaard.

Nadat je deze aanpassing gedaan hebt, werkt het terug. Ik heb dit getest met Safari, Chrome en Firefox, in alle drie werkte de verbinding met de kaartlezer terug en kon ik ermee inloggen.

Stap 4b: ... of toch wel?

Achter de schermen gebeurde er trouwens iets raar. Toen ik de stappen herhaalde  om deze blogpost te kunnen maken, viel het me op dat het certificaat plots aangepast was. Het vervalt nu in 2020, niet meer in September 2019!

Ik heb alle stappen nog eens herhaald, maar blijf tot dezelfde conclusie komen. Eenmaal je  ingelogd bent, wordt in de achtergrond een nieuw – geldig – certificaat naar de Bridge gestuurd. Dit is uiteraard bijzonder nuttig, ware het niet dat dit het "kip en ei" probleem niet oplost: het nieuwe certificaat wordt pas gedownload bij een succesvolle verbinding ... wat niet lukt als je niet eerst een geldig certificaat hebt.

Dit wil wel zeggen dat we onze oplossing maar één maal moeten uitvoeren. We kunnen het certificaat dat we uitdrukkelijk toegevoegd hebben aan de Keychain in stap 3, terug wissen: onze Mac heeft immers het nieuwe certificaat al geïnstalleerd. Persoonlijk laat ik het wel staan, maar heb ik de trust instellingen terug aangepast naar de standaard instellingen.