@@ -245,10 +245,32 @@ public function getJwtVerificationKeys()
245
245
foreach ($ response ['keys ' ] as $ i => $ keyinfo ) {
246
246
if (isset ($ keyinfo ['x5c ' ]) && is_array ($ keyinfo ['x5c ' ])) {
247
247
foreach ($ keyinfo ['x5c ' ] as $ encodedkey ) {
248
- $ key = "-----BEGIN CERTIFICATE----- \n" ;
249
- $ key .= wordwrap ($ encodedkey , 64 , "\n" , true );
250
- $ key .= "\n-----END CERTIFICATE----- " ;
251
- $ keys [$ keyinfo ['kid ' ]] = $ key ;
248
+ $ cert =
249
+ '-----BEGIN CERTIFICATE----- ' . PHP_EOL
250
+ . chunk_split ($ encodedkey , 64 , PHP_EOL )
251
+ . '-----END CERTIFICATE----- ' . PHP_EOL ;
252
+
253
+ $ cert_object = openssl_x509_read ($ cert );
254
+
255
+ if ($ cert_object === false ) {
256
+ throw new \RuntimeException ('An attempt to read ' . $ encodedkey . ' as a certificate failed. ' );
257
+ }
258
+
259
+ $ pkey_object = openssl_pkey_get_public ($ cert_object );
260
+
261
+ if ($ pkey_object === false ) {
262
+ throw new \RuntimeException ('An attempt to read a public key from a ' . $ encodedkey . ' certificate failed. ' );
263
+ }
264
+
265
+ $ pkey_array = openssl_pkey_get_details ($ pkey_object );
266
+
267
+ if ($ pkey_array === false ) {
268
+ throw new \RuntimeException ('An attempt to get a public key as an array from a ' . $ encodedkey . ' certificate failed. ' );
269
+ }
270
+
271
+ $ publicKey = $ pkey_array ['key ' ];
272
+
273
+ $ keys [$ keyinfo ['kid ' ]] = $ publicKey ;
252
274
}
253
275
}
254
276
}
0 commit comments