Rabo OmniKassa ondersteunt geen SNI bij automatic­Response­Url

Per 1 april 2015 stopt de Rabobank met de Rabo Internetkassa. Als vervanger daarvan is er de door de Rabobank zelf ontwikkelde OmniKassa. Werkt ongeveer hetzelfde; het initiëren van transacties gebeurt door een client naar de omgeving van de OmniKassa te sturen met een ‘signed’ request met behulp van een geheime sleutel. De OmniKassa controleert of de ondertekening klopt en biedt de client vervolgens de mogelijkheid om af te rekenen. Nadat er is betaald komt men terug op de website en kun je controleren of de betaling is geslaagd.

Nu wil het gebeuren dat de client na het betalen direct weg klikt en niet terug komt op de website. Om in die gevallen toch te zien dat er is betaald kun je bij het initiëren van de transactie een automaticResponseUrl meegeven die de OmniKassa zelf moet aanroepen om de transactiestatus door te geven.

Maar nu komt het; als je webshop draait op HTTPS werken de aanroepen naar de automaticResponseUrl alleen als die zonder SNI (Server Name Indication) werkt. De OmniKassa (althans het deel dat de automatische notificaties uitvoert) draait op Java 6. Dat kan ik in de logs zien bij de transacties waarbij de automatische notificaties wel werkten:

XXX.XXX.XXX.XXX – – [17/Feb/2015:09:32:08 +0100] “POST /?module=SHOP&action=ProcessPayment&orderId=XXX HTTP/1.1” 302 – “-” “Java/1.6.0_45”

Van Java 6 is bekend dat deze geen SNI ondersteunt. In mijn geval kon ik het probleem oplossen door de automaticResponseUrl te laten wijzen naar een ander domein dat wel werkt zonder SNI. Een structurele oplossing kan alleen van de kant van Rabobank komen; door gebruik te maken van een HTTP client die ook SNI ondersteunt voor HTTPS-requests. Het is immers 2015 en in de huidige stand van de techniek ondersteunt 99% van onze bezoekers SNI. De OmniKassa echter nog niet.

Ik begrijp uiteraard dat dat niet zomaar geregeld is maar ik zou in de tussentijd in ieder geval de documentatie van de OmniKassa voorzien van een melding dat voor requests naar de automaticResponseUrl geen SNI kan worden gebruikt.

– Edit: Rabobank heeft een update uitgevoerd waardoor SNI nu wel wordt ondersteund.

Now accepting HTTP/2 connections

This blog now runs on a server that accepts HTTP/2 connections. It is H2O 1.0.0 with a proxy to Apache/PHP.

Since H2O can only proxy to HTTP/1 using plain (no HTTPS) connections, WordPress needs to be told not to redirect to the canonical url. This can be done by adding the following line to wp-config.php: $_SERVER['HTTPS'] = 1;

Building H2O requires quite some knowlegde of Linux. And I wouldn’t recommend using it in production yet. But it surely is fun to experiment with.

Another day – another WordPress Blog

I’m a developer. I know I should be able to build my own blogging software. But over the years I have learnt to stand on shoulders of others. The WordPress community is a great one. And even though a WordPress site is a honeypot for malware and hackers, I prefer to just start blogging than spend more time coding than actually writing.

So here it is. On a fresh VPS. HTTPS and IPv6 in place. Enjoy.