Cómo asegurar que mis solicitudes de API se envíen utilizando SSL

1

Tengo una API simple que se utiliza para enviar datos entre mis dos sitios. Esta no es una API pública a la que pueden acceder mis clientes, es simplemente un servicio para que los dos sitios se comuniquen. Utilizo una clave de API para verificar estas solicitudes, y quiero asegurarme de que todas mis solicitudes de API se envíen a través de SSL para proteger mi clave de API de los ataques de intermediarios. Ambos sitios tienen certificados SSL válidos. Estoy usando PHP con Laravel.

Ahora mismo, así es como hago las solicitudes reales:

$call = "https://myapp.com/api/apikey/somedata";
$response = file_get_contents($call);

Tenga en cuenta que el protocolo en la url es https y que los datos y la clave api simplemente se incluyen en la url como segmentos.

Mi pregunta es: ¿es este enfoque suficiente para garantizar que mis solicitudes de API usen HTTPS y no puedan ser interceptadas a través de un ataque de hombre en el medio?

    
pregunta Christian 14.11.2016 - 17:01
fuente

1 respuesta

3

Como en cualquier conexión SSL, el sistema es seguro si utiliza TLS 1.2 con solo cifrados seguros permitidos (es decir, una buena configuración SSL).

Aparte de eso, SSL está protegido por MITM si los sistemas involucrados solo confían en los certificados legítimos utilizados en la conexión SSL. Si uno puede inyectar en su lista de certificados trucados o convencer a su sistema para que acepte un certificado falso, podrá realizar un ataque MITM al presentarle al cliente el certificado falso, descifrar los datos y transferirlos a su servidor, actuando como un apoderado.

Por lo tanto, es posible que desee asegurarse de tener certificados de confianza correctos y configurados de manera restrictiva, y tal vez también desee utilizar la fijación de claves públicas (decidiendo explícitamente confiar en claves públicas específicas en lugar de certificados totalmente confiados o autoridades de certificación). Es posible que desee verificar cuáles son los anclajes de confianza que usa PHP, y parece que, dependiendo de la versión, puede que ni siquiera verifique el certificado, y eso haría que un MITM sea trivial. Más información sobre eso aquí: enlace

  

Tenga en cuenta que el protocolo en la url es https y que los datos y la api   Las claves se incluyen simplemente en la URL como segmentos.

Supongo que te preocupa que el token de API se filtre aquí porque está visible en la URL. En realidad, la parte api / apikey / somedata está protegida por SSL, lo que sucede detrás de la escena es que usted establece una conexión SSL con myapp.com (sin decir lo que quiere de él en texto claro) y luego , justo después de conectarse con éxito, utilizando la conexión protegida y cifrada, usted solicita "obtener api / apikey / somedata". Así que la clave api no será visible para nadie que esté escuchando. Sin embargo , la URL completa puede filtrarse por otros canales, como el historial de un navegador, registros, etc. Es por eso que normalmente los tokens de autenticación se agregan a los encabezados HTTP en lugar de los parámetros de ruta o consulta. Están tan protegidos como en la ruta desde el punto de vista de SSL, pero es menos probable que se filtre por error.

    
respondido por el CristianTM 14.11.2016 - 17:29
fuente

Lea otras preguntas en las etiquetas