Autodescubrir Interfaces Vía API | FWCloud Forum

Autodescubrir Interfaces Vía API

Urick

New member
Hola, buen día.

Estoy intentando realizar el proceso de autodescubrir interfaces vía API (https://10.20.6.119:3030/api/interface/autodiscover). Me causa duda el origen del mensaje cifrado perteneciente al campo apikey como se muestra en la imagen adjunta. Estoy realizando pruebas con llamados a la API desde Postman como se muestra en la otra imagen adjunta. ¿Cuál debe ser el valor del campo apikey? ¿Cuál es el camino correcto para descubrir interfaces vía API?

¿Podrías ayudarme? sería de gran utilidad. Agradezco de antemano.
 

Attachments

Last edited:

Carles Munyoz

Administrator
Staff member
Hola,
El valor del API Key se debe de cifrar, pero con el clave PGP pública que suministra el API al iniciar sesión.
¿Lo estás haciendo así?
 

Urick

New member
El proceso que estoy realizando es el siguiente:

  1. Cuando hago login vía API, guardo en un archivo .asc el valor de la clave pública PGP que me devuelve la API.
  2. Importo la clave: gpg --import fwcloud_public_key.asc
  3. Cifro el valor de API_KEY (/opt/fwcloud/agent/.env/): echo "Aquí valor API_KEY" | gpg --armor --encrypt -r "Aquí identificador asociado al clave".
  4. Una vez cifrado el apikey, lo inserto en la solicitud PUT en Postman y sale lo que se muestra en la imagen adjunta. Supongo que el error es debido a espacios o saltos de linea o mal formateo, ¿pero el proceso es el adecuado?
 

Attachments

Last edited:

Carles Munyoz

Administrator
Staff member
El error que indica es que la información encriptada por PGP no es correcta.
¿Puedes ver si sale algún log en fwcloud-api, en la respectiva carpeta de logs (/opt/fwcloud/api/logs)?
 

Urick

New member
  • He vuelto a realizar cautelosamente los pasos mencionados anteriormente con el fin de probar la funcionalidad "Autodescubrir interfaces" y ahora obtengo el resultado adjunto en la imagen Autodiscover Error 1.

  • También realicé el proceso vía UI para comprobar y en modo desarrollador/red copiar como cURL el formato del campo apikey es el mismo: curl 'https://10.20.6.119:3030/api/interface/autodiscover' -X PUT -H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:131.0) Gecko/20100101 Firefox/131.0' -H 'Accept: application/json, text/plain, */*' -H 'Accept-Language: es-ES,es;q=0.8,en-US;q=0.5,en;q=0.3' -H 'Accept-Encoding: gzip, deflate, br, zstd' -H 'Content-Type: application/json' -H 'X-FWC-CONFIRM-TOKEN: larXhku9F2QODdGO7Goqv_HVXJAkEwFM_WqbX4KGXtsnr2xzJT3zh' -H 'Origin: https://10.20.6.119:3030' -H 'Connection: keep-alive' -H 'Referer: https://10.20.6.119:3030/fwcdashboard/policy' -H 'Cookie: FWCloud.net-cookie=s%3AlarXhku9F2QODdGO7Goqv_HVXJAkEwFM.7zByu1Ngb9CQ9Sfcdsgj9MoGTL144j%2F0xUlFzv%2B3bPs' -H 'Sec-Fetch-Dest: empty' -H 'Sec-Fetch-Mode: cors' -H 'Sec-Fetch-Site: same-origin' --data-raw '{"fwcloud":2,"ip":"10.20.6.38","port":33033,"communication":"agent","apikey":"-----BEGIN PGP MESSAGE-----\n\nwcBMAzHdXrVQTBMxAQgAortSXRPa4r/gXi9jwy/JQtzckFp51Ncle6njx8hn\nfMt6ijMNVIdkMIJWPVZWFx8Z2vj9AAkbpxFMS4wigpu9FaJ8Doa2pBop88R9\nRm+JKVchZb14oCdBQqB2+rf2637KqwTS5aUzNVSGE6HBLZ9NO5tknx/PsLcF\n4S0jJLOkvLbPeL5zoSjDOIT95bvs2HaLu3wBi2RcWa4UDLLecMjwAnakqswq\n98yG6mBSvnQ4IpY7P8Q+zhlXfWGhlTkf0wjMjpJjkx9gBbLg5FWfs722oROY\noTcQOTZUnlEqB7DAsRh0jg19ld/Sz9NUaW5xWThJ34yZSRCGpl7wHta/uR8G\n8tJxAQJJNuJgSb2K70f06XZ7ovyTxtEFASKX5hYWTM6iFSZOipfrRgeXK2C9\nFlu+SYCo8vYyZ1wp4TPCT/stXZjlQy3JLW4drM8IJCnGbIcZJjreuBcSjvtv\nCbORrwY7wsiDHbDNf5vL61giQqM21ioXP0c=\n=jtNa\n-----END PGP MESSAGE-----\n","protocol":"https"}'

  • En los logs /opt/fwcloud/api/logs/app.log obtengo:
|ERROR|Invalid character in header content ["X-API-Key"]

Tal vez la causa del error radique en cómo se están gestionando el formato de las claves, ¿alguna recomendación?

Gracias! :)
 

Attachments

Carles Munyoz

Administrator
Staff member
El problema es que no se está encriptando correctamente el API Key. Creo que no estás utilizando las claves PGP de sesión que se generan cuando se inicia sesión.

Podrías probar una cosa, utilizar las herramientas para desarrollador de Chrome para ver las peticiones que se envían al API desde la interfaz web de usuario y replicar las mismas en Postman para verificar que estés haciendo correctamente la comunicación.
 

Urick

New member
He estado buscando la solución pero aún no lo consigo, enseguida adjunto los pasos que he estado realizando con más detalle para aclarar y poder encontrar una solución.

1. CREAR CLAVE:
  • Para iniciar sesión en la API de FWCloud, creo la clave con: gpg --full-generate-key y obtengo:
    gpg: certificado de revocación guardado como '/home/fwcloud/.gnupg/openpgp-revocs.d/35E229E719A977E0F9F0CA2168F5DDE93632EE1D.rev'claves pública y secreta creadas y firmadas.

    pub rsa2048 2024-10-24 [SC] [caduca: 2026-10-24]
    35E229E719A977E0F9F0CA2168F5DDE93632EE1D
    uid FWCloudLogin <correo aquí>
    sub rsa2048 2024-10-24 [E] [caduca: 2026-10-24]

  • Obtengo la clave con el comando: gpg --armor --export 35E229E719A977E0F9F0CA2168F5DDE93632EE1D


  • "customer": 1,
    "username": "fwcadmin",
    "password": "fwcadmin",
    "authCode": "",
    "publicKey": "-----BEGIN PGP PUBLIC KEY BLOCK-----Aquí clave generada en el paso anterior-----END PGP PUBLIC KEY BLOCK-----"
    }

2. IMPORTAR CLAVE:
  • Al iniciar sesión, guardo la clave formateada adecuadamente en un archivo, por ejemplo: /home/fwcloud/Documentos/FWCloud/GPG/APIResponsePublicKeyc.asc

  • Importo la clave pública devuelta por la API: gpg --import /home/fwcloud/Documentos/FWCloud/GPG/APIResponsePublicKeyc.asc

Obteniendo lo siguiente:
gpg: clave 1BE75F9A1B832AE5: clave pública "FWCloud.net <info@fwcloud.net>" importada
gpg: Cantidad total procesada: 1
gpg: importadas: 1



3. LISTAR KEYS:

  • Con el fin de verificar las llaves, ingreso el comando gpg --list-keys y obtengo lo siguiente:
pub rsa2048 2024-10-24 [SC] [caduca: 2026-10-24]
35E229E719A977E0F9F0CA2168F5DDE93632EE1D
uid [ absoluta ] FWCloudLogin <correo aquí>
sub rsa2048 2024-10-24 [E] [caduca: 2026-10-24]

pub rsa2048 2024-10-24 [SC]
564956ECF5E75921C19AEAE71BE75F9A1B832AE5
uid [desconocida] FWCloud.net <info@fwcloud.net>
sub rsa2048 2024-10-24 [E]


4. CIFRAR APIKEY:

  • Obtengo el API_KEY después de la instalación del agente en el nodo con IP 10.20.6.38
  • Creo un archivo con el contenido del API_KEY: /home/fwcloud/Documentos/FWCloud/GPG/apikey.txt
  • Cifro el API_KEY: gpg --armor --encrypt -r "1BE75F9A1B832AE5" /home/fwcloud/Documentos/FWCloud/GPG/apikey.txt
Obteniendo lo siguiente:
gpg: 2616DD33A1A41AEA: No hay seguridad de que esta clave pertenezca realmente
al usuario que se nombra

sub rsa2048/2616DD33A1A41AEA 2024-10-24 FWCloud.net <info@fwcloud.net>
Huella clave primaria: 5649 56EC F5E7 5921 C19A EAE7 1BE7 5F9A 1B83 2AE5
Huella de subclave: 7490 7E75 90CD AF8E D57B E2D6 2616 DD33 A1A4 1AEA

No es seguro que la clave pertenezca a la persona que se nombra en el
identificador de usuario. Si *realmente* sabe lo que está haciendo,
puede contestar sí a la siguiente pregunta.

¿Usar esta clave de todas formas? (s/N) s




5. OBTENER API_KEY CIFRADO

  • Después del proceso anterior obtengo el API_KEY cifrado.

-----BEGIN PGP MESSAGE-----API_KEY cifrada aquí-----END PGP MESSAGE-----


6. AUTODESCUBRIR INTERFACES

  • Utilizo el API_KEY desde Postman para realizar la petición a la API como se muetsra en las imágenes adjuntas, obteniendo el siguiente resultado:


{
"message": "Invalid character in header content [\"X-API-Key\"]"

}
 

Attachments

Urick

New member
En la imagen adjunta añado los headers que solicita. También adjunto la petición que se realiza desde la UI haciendo uso del modo desarrollador del navegador, esto lo hice para comparar la estructura de la petición a la API.

curl 'https://10.20.6.119:3030/api/interface/autodiscover' -X PUT -H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:131.0) Gecko/20100101 Firefox/131.0' -H 'Accept: application/json, text/plain, */*' -H 'Accept-Language: es-ES,es;q=0.8,en-US;q=0.5,en;q=0.3' -H 'Accept-Encoding: gzip, deflate, br, zstd' -H 'Content-Type: application/json' -H 'X-FWC-CONFIRM-TOKEN: larXhku9F2QODdGO7Goqv_HVXJAkEwFM_WqbX4KGXtsnr2xzJT3zh' -H 'Origin: https://10.20.6.119:3030' -H 'Connection: keep-alive' -H 'Referer: https://10.20.6.119:3030/fwcdashboard/policy' -H 'Cookie: FWCloud.net-cookie=s%3AlarXhku9F2QODdGO7Goqv_HVXJAkEwFM.7zByu1Ngb9CQ9Sfcdsgj9MoGTL144j%2F0xUlFzv%2B3bPs' -H 'Sec-Fetch-Dest: empty' -H 'Sec-Fetch-Mode: cors' -H 'Sec-Fetch-Site: same-origin' --data-raw '{"fwcloud":2,"ip":"10.20.6.38","port":33033,"communication":"agent","apikey":"-----BEGIN PGP MESSAGE-----\n\nAquí API_KEY cifrada\n\n-----END PGP MESSAGE-----\n","protocol":"https"}'


Muchas gracias por el tiempo y soporte ofrecido :)
 

Attachments

Carles Munyoz

Administrator
Staff member
El error se genera cuando FWCloud-API llama a FWCloud-Agent a través del API que tiene el FWCloud-Agent.
¿Puedes analizar el tráfico que se genera entre tu FWCloud-API y el FWCloud-Agent para ver si la comunicación es correcta?
 

Urick

New member
Para probar, realicé lo siguiente:

  • Desde la UI, luego de "Autodescubrir interfaces" y haciendo uso de la funcionalidad "Comprobar" o "+Info" obtengo respuesta satisfactoria del agente.

  • UI: vuelvo a realizar el proceso de "Autodescubrir interfaces" desde la UI. Ahora para comprobar el tráfico entre FWCloud-API y FWCloud-Agent, instalo tcpdump en la instancia donde tengo FWCloud (IP: 10.20.6.119). Ingreso el comando: sudo tcpdump -i any host 10.20.6.38 and port 33033 para monitorear el tráfico hacia el agente, esto muestra todo el tráfico entre la API y el agente a través del puerto 33033, lo que permite verificar si hay datos que se están enviando y recibiendo correctamente. En efecto la captura de pantalla adjunta muestra que el tráfico y la comunicación bidireccional son correctos.

  • API: ahora desde Postman realizo el proceso de inicio de sesión y los pasos mencionados en el anterior post con el fin de obtener la clave pública devuelta por la API, cifrar el valor de apikey y así "Autodescubrir interfaces" pero en este caso no obtengo salida del comando sudo tcpdump -i any host 10.20.6.38 and port 33033 y como resultado obtengo el mismo mensaje de error:

{
"message": "Invalid character in header content [\"X-API-Key\"]"

}

Conclusión
: cuando realizo el proceso desde la UI la funcionalidad "Autodescubrir interfaces" funciona sin problemas, además el comando: sudo tcpdump -i any host 10.20.6.38 and port 33033 muestra tráfico correctamente. Pero cuando realizo el mismo proceso con los llamados a la API desde Postman no funciona.
 

Attachments

Last edited:

Carles Munyoz

Administrator
Staff member
La cabecera X-API-Key se utiliza para enviar la API Key del FWCloud-Agent desde FWCloud-API.
Esta Key se almacena en la base de datos encriptada o se transfieren junto con la petición que estás utilizando.

Sospecho que se están generando correctamente las claves PGP.
 

Urick

New member
¿Qué debo hacer? ¿Alguna sugerencia o idea? El propósito de todo esto y mi intención de "Autodescubrir interfaces" vía API es la de poder registrar (automatizar) varios nodos en FWCloud, ya que si lo hago a través de la UI tardaría mucho tiempo y no sería óptimo registrar uno por uno.
 

Carles Munyoz

Administrator
Staff member
Algo se tiene que estar enviando mal, dado que FWCloud-UI es una aplicación como cualquier otra (la tuya, por ejemplo) que quiera hacer uso de FWCloud-API.

Una cosa que podrías hacer es quitar las comunicaciones por TLS entre el API y el FWCloud-Agent, para así analizar el tráfico de red y ver el contenido de la información intercambiada con, por ejemplo, Wireshark. De ese modo se podría ver si el API Key del FWCloud-Agent que se está enviando es correcta.
 

Urick

New member
¿Puedes indicarme el formato exacto de las claves PGP que utiliza la API para la comunicación segura?. Por favor explícame mediante un ejemplo, paso a paso, ¿cómo logras "Autodescubrir interfaces" desde Postman? No he logrado resolver el problema, hay ausencia de documentación sobre la gestión de las claves PGP que se usa para la comunicación segura entre la API y el agente, el apidoc se encuentra desactualizado respecto a "Autodescubir interfaces".
 
Top