JWT-Token mit open_ssl_verify verifizieren endet im SSL-Error :error:0906D06C:PEM routines:PEM_read_bio:no start line

12/04/2016 - 15:59 von Gerome Muent | Report spam
allo zusammen,
ich versuche einen JWT-Token von einem OpenID-Connect-Server gegen die
enthaltene Signatur zu verifizieren.
Das endet in einem endet im SSL-Error :error:0906D06C:PEM
routines:PEM_read_bio:no start line

Warum, weiß ich leider nicht. Token und RSA public key sind mit Sichheit
ok und eine Verifizierung mit Nimbus für Java funktioniert auch.
Leider weiß ich ziemlich wenig über die PHP-Funktion openssl_verify.
Vielleicht kann mir da mal jemand auf die Sprünge helfen, was falsch làuft.

Skript unten anbei. Im Prinzip geht's nur um das openssl_verify bzw.
welche Parameter dem übergeben werden müssen.


Danke und Grüße, Gérôme

PS: Zeilumbrüche Windows<->Unix habe ich auch schon gewechselt. Hat
nichts gebracht.


<?php
$jwt_access_token =
"eyJhbGciOiJSUzI1NiIsImtpZCI6InJzYTEifQ.eyJ1aWQiOiJjZWViNmZiYS1jM2JlLTRlMjYtOTUzYi02NTgwZDgwMTdmNzkiLCJzdWIiOiJjZWViNmZiYS1jM2JlLTRlMjYtOTUzYi02NTgwZDgwMTdmNzkiLCJhdF9oYXNoIjoiYW5kR1NoclZfX0pUM2lJYUlXVEdmUSIsImlzcyI6Imh0dHA6XC9cL2ZtMy1iZTAzLXByby52ZXJ0aWtvbS5jb21cL3ZlcnRpa29tY29ubmVjdFwvIiwidmstc3lzLXJvbGVzIjpbIk9QRU5JRENfVVNFUiIsIkZNX1VTRVIiXSwiZ2l2ZW5fbmFtZSI6IkJlcm5kIiwiaWF0IjoxNDYwMzczMDU5LCJraWQiOiJyc2ExIiwiYXV0aF90aW1lIjoxNDYwMzczMDU4LCJleHAiOjE0NjA0NTk0NTksIm9yZ2FuaXphdGlvbiI6IlZFUlRJS09NIERFIiwibm9uY2UiOiJlbXB0eSIsImVtYWlsIjoiYm1zZXJ2aWNlc0BnbXgubmV0IiwibmFtZSI6IkJlcm5kIE3DvG50IiwiYXVkIjoiYzM5YWE3NTItOWE4Mi00YWU4LThhYTAtYTAyM2NmOTk3MzhhIiwiYmFzZSI6ImRjPXZrdXNlcixkYz1jb20iLCJmYW1pbHlfbmFtZSI6Ik3DvG50IiwianRpIjoiMzk2Yzk0YTItZWZmOS00NzY0LWEyYjgtZjE1MWFiZTg4MzRhIiwicHJlZmVycmVkX2xhbmd1YWdlIjoiZGUtREUifQ.k6nN03QmEmaAB85O512x6wR8eVZHjCamRY8fBVXGw5id-SuMfhJJo8sdviWcmE5MAyt8u6TjN1Ru59T2VsAb9y0gW3wXJygeef8r4qHuUdxRWCnGGSOcIEUqukco6hAk5BPqAiECOvvUFli1G4pwHMNLk63KkUD2ZzZ8nV1eV59yp33SwM

CTgwgASVFyrv3GYC8Uiu_AUwRtulz1As8gqtoUusB6dtfduv9eeOyD5BYXGiPfdUqcpMnzFeu_FZAtKIhV_7_C74UvX_ErjVMLMRj4udi9jy3zylHF2CiBp-gtw3Y7zVZRssuwfrdTVB6tuU5mu1VULhZT98wxxskBTA";


define("PUB_KEY", "--BEGIN PUBLIC KEY--
MIIBdzANBgkqhkiG9w0BAQEFAAOCAWQAMIIBXwKCAVZxdDZ5T2lJX3dDb0NWbEdP
ME15U3NlejBWa1NxaFB2RGwzcmZhYk9zbHgzNW1ZRU8tbjRBQmZJVDVHbjJ6Ti1D
ZUljT1o1dWdBWHZJSVJXdjVINTUtdHpqRmF6aTVJS2tPSU1DaXo1X19NdHNkeEtD
cUdsWnUyenQtQkxwcVRPQVBpZmxOUHBNM1JVQWx4S0FobllFcU5oYTYtYWxsUG5G
UXVwbldfZVRZb3l1enVlZFQ3ZFNwOTByeTBaY1FEaW1udFhXZWFTYnJZS0NqOVJy
OVcxam4ydVRvd1V1WGFTY0tYVENqQW1KVm5zRDc1Sk56UWZhOER3ZWtsVHlXUUYt
WTVLeTAzOUkwVkl1LTBDSUdoWFk0OEdBRmUyRUZiOFZwTmhmMDdEUDYzcDEzOFJX
UTFkM0tQRU05bVlKVnBRQzY4ajN3ekRRWVNsanBMZjlieTdUR3cCAwEAAQ=--END PUBLIC KEY--");

try {
$separator = '.';

if (2 !== substr_count($jwt_access_token, $separator)) {
throw new Exception("Incorrect access token format");
}

list($header, $payload, $signature) = explode($separator,
$jwt_access_token);

$decoded_signature = base64_decode($signature);

// The header and payload are signed together
$payload_to_verify = utf8_decode($header . $separator . $payload);

// however you want to load your public key
$public_key = PUB_KEY;

// default is SHA256
$verified = openssl_verify($payload_to_verify, $decoded_signature,
$public_key, OPENSSL_ALGO_SHA256);

if ($verified !== 1) {
throw new Exception("Cannot verify signature:" .
openssl_error_string());
}

// output the JWT Access Token payload
var_dump(base64_decode($payload));
} catch (Exception $e) {
echo $e->getMessage() . "";
}

BM ComputerServices Daumstr. 180
Programmierung 13599 Berlin
Webdesign Tel.: 0175/7419517
Datenbanken Web: http://www.bmservices.de
Apache/PHP/MySQL eMail: kontakt@bmservices.de
 

Lesen sie die antworten

#1 Gerome Muent
13/04/2016 - 09:12 | Warnen spam
Hat sich erledigt... der Public mußte aus dem JWK anders extrahiert
werden unter Einbeziehung des Exponenten "e".

Gruß, Gérôme

Ähnliche fragen