
Angel de Jesus Quintero Pereira
PreguntaPregunta:
¿Cómo solucionar la respuesta de autenticación servidor auth_server.php ?
Tengo problema con esta clase y realmente llevo dos días trancado.
Problema:
Al realizar la petición php el servidor de validación muestra lo siguiente:
Invalid request (Unsupported SSL request)
; // validación de que el servidor de recursos recibió un token if (!array_key_exists('HTTP_X_TOKEN', $_SERVER)) { die; } // $url = 'https://' . $_SERVER['HTTP_HOST'] . '/auth'; // Se debe validar el token recibido con el servidor, // de autenticación ejecutando una llamada a tráves // de curl. $url = 'https://localhost:8001'; // iniciamos la llamada de curl $ch = curl_init($url); // Se configura curl para enviar // el token y validarlo con el serrvidor // de validación. curl_setopt( $ch, CURLOPT_HTTPHEADER, [ "X-Token: {$_SERVER['HTTP_X_TOKEN']}", ] ); // Se configura curl nuevamente para recibir la // respuesta sobre el token que enviamos // del servidor de validación curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true ); // Se obtine la respuesta del servidor // de validación $ret = curl_exec($ch); // finalmente se compara la respuesta del servidor // de autenticación, si el resultado no es true // entonces el usuario no ha sido autenticado // correctamente if ($ret !== 'true') { http_response_code(403); die; } $books = [ 1 => [ 'titulo' => 'Lo que el viento se llevo', 'id_autor' => 2, 'id_genero' => 2, ], 2 => [ 'titulo' => 'La Iliada', 'id_autor' => 1, 'id_genero' => 1, ], 3 => [ 'titulo' => 'La Odisea', 'id_autor' => 1, 'id_genero' => 1, ], ]; $allowedResourceTypes = [ 'books', 'authors', 'genres', ]; $resourceType = $_GET['resource_type']; if (!in_array($resourceType, $allowedResourceTypes)) { header('Status-Code: 400'); echo json_encode( [ 'error' => "Resource type '$resourceType' is un unkown", ] ); die; } $resourceId = array_key_exists('resource_id', $_GET) ? $_GET['resource_id'] : ''; $method = $_SERVER['REQUEST_METHOD']; switch (strtoupper($method)) { case 'GET': if ("books" !== $resourceType) { header('Status-Code: 404'); echo json_encode( [ 'error' => $resourceType . ' not yet implemented :(', ] ); die; } if (!empty($resourceId)) { if (array_key_exists($resourceId, $books)) { echo json_encode( $books[$resourceId] ); } else { header('Status-Code: 404'); echo json_encode( [ 'error' => 'Book ' . $resourceId . ' not found :(', ] ); } } else { echo json_encode( $books ); } die; break; case 'POST': $json = file_get_contents('php://input'); $books[] = json_decode($json); echo array_keys($books)[count($books) - 1]; break; case 'PUT': if (!empty($resourceId) && array_key_exists($resourceId, $books)) { $json = file_get_contents('php://input'); $books[$resourceId] = json_decode($json, true); echo $resourceId; } break; case 'DELETE': if (!empty($resourceId) && array_key_exists($resourceId, $books)) { unset($books[$resourceId]); } break; default: header('Status-Code: 404'); echo json_encode( [ 'error' => $method . ' not yet implemented :(', ] ); break; }
código del router.php
<?php $matches = []; if (preg_match('/\/([^\/]+)\/([^\/]+)/', $_SERVER["REQUEST_URI"], $matches)) { $_GET['resource_type'] = $matches[1]; $_GET['resource_id'] = $matches[2]; error_log( print_r($matches, 1) ); require 'server.php'; } elseif ( preg_match('/\/([^\/]+)\/?/', $_SERVER["REQUEST_URI"], $matches) ) { $_GET['resource_type'] = $matches[1]; error_log( print_r($matches, 1) ); require 'server.php'; } else { error_log('No matches'); http_response_code( 404 ); }
código del auth_server.php
<?php $method = strtoupper($_SERVER['REQUEST_METHOD']); // $token = "5d0937455b6744.68357201"; $token = sha1('Esto es secreto!!'); if ($method === 'POST') { if (!array_key_exists('HTTP_X_CLIENT_ID', $_SERVER) || !array_key_exists('HTTP_X_SECRET', $_SERVER)) { http_response_code(400); die('Faltan parametros'); } $clientId = $_SERVER['HTTP_X_CLIENT_ID']; $secret = $_SERVER['HTTP_X_SECRET']; if ($clientId !== '1' || $secret !== 'SuperSecreto!') { http_response_code(403); die("No autorizado"); } echo "$token"; } elseif ($method === 'GET') { if (!array_key_exists('HTTP_X_TOKEN', $_SERVER)) { http_response_code(400); die('Faltan parametros'); } if ($_SERVER['HTTP_X_TOKEN'] == $token) { echo 'true'; } else { echo 'false'; } } else { echo 'false'; }
pasos para replicar el problema
- Los códigos anteriormente presentados, están metidos en una sola carpeta. Cada código presentado anteriormente está separado en archivos distintos:
- server.php
- router.php
- auth_server.php
- En la terminal de linux se abre una pestaña para cada servidor y petición que se muestra a continuación
a. Se inicia el servidor router
$ php -S localhost:8000 router.php
b. Se inicia el servidor de autenticación
$ php -S localhost:80001 auth_server.php
c. Se realiza la petición al servidor de autenticación para pedir un token, el servidor crea el token y lo devuelvo en la terminal. Es token se debe copiar y enviarlo con la petición GET que se muestra en el siguiente paso
$ curl http : <//localhost> : 8001 -X ‘POST’ -H ‘X-CLIENT-Id:1’ -H ‘X-Secret:SuperSecreto!’
d. Se realiza la petición GET y se indica en la cabezare el token generado por el servidor de autenticación
$ curl http : // localhost : 8000/books -H ‘X-Token:c4b02a1525349e7888d4140dcd524aff2d6296dd’
e. finalmente después de la anterior consulta no se muestra nada.
El comportamiento esperado:
Mostrar la lista de libros.
El Comportamiento actual:
No muestra la lista de libros y en la pestaña donde se ejeucta el servidor de autenticación muesta el mensaje de:
[Wed Jun 2 12:42:21 2021] ::1:48248 Invalid request (Unsupported SSL request)
La caracterisitcas de mi de mi sistema
version de php
especificaciones de mi sistema operativo

Angel de Jesus Quintero Pereira
Perdón, correción en el archivo server.php yo tengol a $url declara e inicializada con :
$url = 'https ://localhost:8001';
y debe ser
$url = 'http :// localhost:8001';

Angel de Jesus Quintero Pereira
graciassssss ya entendiiiii jajajaja no había entendido al principio 😁😁😁😁😁😁😁😁...
Para los que vean este comentario luego: La modificación que sugiere RetaxMaster es que el archivo server.php declaro una e inicializo una url, en esa petición debo quitar la s de https, es decir yo tengo:
$url = 'https://localhost:8001';
y debe ser :
$url = 'https://localhost:8001';

Angel de Jesus Quintero Pereira
hola @RetaxMaster, nunca he usado la "s" para este tipo de petición. si te das cuenta en todo momento no usa la "s" en http

Carlos Eduardo Gomez García
Quítale la "s" a "https" e inténtalo de nuevo ;)
$url = 'https://localhost:8001';