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

12/04/2016 - 12:09 von Gerome Muent | Report spam
Hallo 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


<?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() . "";
}
 

Lesen sie die antworten

#1 Michael Baeuerle
12/04/2016 - 12:55 | Warnen spam
Gerome Muent wrote:

Hallo 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



Dass eine Zeile nicht erkannt wird liegt eventuell am Zeilenumbruch
Unix (LF) vs. Windows (CR LF).

Ähnliche fragen