[PHP] Goutte + Client Side Certificate == HTTP 403

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 12-10 19:34

Matis

Rubber Rocket

Topicstarter
Beste PRGers,

Ik probeer middels Goutte in te loggen op ons Tijdsregistratie-pakket (https://pronet05.myprotime.be/pronet05.asp).

Hiervoor hebben we ooit een Client Side Certifcate ontvangen (Protime.pfx). Dit certificaat heb ik in Chrome geinstalleerd en middels een bijbehorend wachtwoord gedecrypted.

Dan wordt je doorverwezen naar de inlogpagina: https://pronet05.myprotim.../login.aspx?Customer=4087

Nu wil ik graag hetzelfde realiseren middels Goutte. Omdat Goutte (volgens mij) geen PFX-certificaten ondersteunt, heb ik de PFX omgezet naar een PEM middels het volgende commando:
 openssl pkcs12 -in Protime.pfx -out Protime.pem -nodes

Tijdens de conversie werd ook naar het wachtwoord gevraagd, dat heb ik ingevoerd en nu heb ik een Protime.pem bestand:
Bag Attributes
   ...
Key Attributes
    X509v3 Key Usage: 10 
-----BEGIN PRIVATE KEY-----
...
-----END PRIVATE KEY-----
Bag Attributes
...
-----BEGIN CERTIFICATE-----
...


Ik probeer nu het certificaat mee te geven bij de request:
PHP:
1
2
3
4
5
const CERTIFICATE   = 'Protime.pem';
const CERT_URL      = 'https://pronet05.myprotime.be/pronet05.asp';

$client = new Client();
$crawler = $client->request('GET', CERT_URL, ['verify' => realpath(CERTIFICATE)]);

Echter krijg ik als response HTTP Status 403 (Forbidden)

Ik heb daarna gepoogd om het certificaat in te laden
PHP:
1
$crawler = $client->request('GET', CERT_URL, ['cert' => [realpath(CERTIFICATE), CERT_PASS]]);

Helaas met hetzelfde resultaat :/

Ik heb geprobeerd de transfers middels Wireshark te loggen, maar daar wordt ik niet veel wijzer van.
Ook wanneer ik via de browser de pagina bezoek, zie ik nergens de exchange van het certificaat. Wel zie ik een 302 op bovenstaande CERT_URL welke me doorverwijst naar de inlogpagina.

Misschien ten overvloede:
Ik draai op "fabpot/goutte": "^3.1". Vanochtend geïnstalleerd.

Het script draai ik vanaf de PHP-commandline versie PHP 5.5.28-1+deb.sury.org~precise+1 (cli) (built: Aug 16 2015 09:33:43)

Alvast bedankt _O_

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

  • EddoH
  • Registratie: Maart 2009
  • Niet online

EddoH

Backpfeifengesicht

Wellicht een long shot en ervan uitgaande dat Goutte intern cUrl gebruikt:

Ik heb ooit eens problemen gehad met cUrl en een PEM file zonder passphrase. Volgens mij was de oplossing toen een PEM certificate maken mét passphrase. Dit omdat in de PEM file de private key samen met het certificaat zat.

Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 12-10 19:34

Matis

Rubber Rocket

Topicstarter
Bedankt voor de tip. Ik heb zojuist het volgende commando uitgevoerd:
curl --cert ./Protime.pem -u "username:password" https://pronet05.myprotime.be/pronet05.asp
<head><title>Object moved</title></head>
<body><h1>Object Moved</h1>This object may be found <a HREF="/pronetEE.premnat05/indexP8112_.htm">here</a>.</body>


Dat lijkt dus wel te werken :/

If money talks then I'm a mime
If time is money then I'm out of time