udistrital / core_documentacion

0 stars 0 forks source link

Ajustes posteriores a pruebas de carga y seguridad - Parte 1 #78

Closed diagutierrezro closed 1 month ago

diagutierrezro commented 1 month ago

Se requiere realizar ajustes a los sistemas una vez realizadas las pruebas de carga y seguridad según lo encontrado en el informe, se iniciará con la eliminación de la información de la firma electrónica (llaves publica y privada y firma electrónica) en la tabla documento ya que esta información se duplica en la tabla de firma_electronica que es donde debería estar.

Posterior a esto se debe modificar el CRUD para que las peticiones http que se hagan a la tabla firma electrónica no retornen la información de la llave privada por cuestiones de seguridad (esta tarea se confirmará con Maria Fernanda para asegurarse de que este es el correcto proceder).

Finalmente se debe realizar el ajuste de los endpoint de firma electrónica para que no tenga "firmaelectronica" al inicio de los endpoints, ejemplo, actualmente el endpoint de verificación es firma_electronica/verify_, debe quedar unicamente verify. Una vez se haga este ajuste se deben actualizar los cliente de verificación y evaluación para que los endpoint coincidan.

Sub Tareas

Criterios de aceptación

Requerimientos

No aplica

Definition of Ready - DoR

Definition of Done - DoD - Desarrollo

Skyrus1203 commented 1 month ago

ACTUALIZACIÓN 16/07/24

Se comienzan los ajustes descritos iniciando con la corrección respectiva al guardado de la firma y las llaves en la tabla de documentos. Por lo tanto se realiza dicha corrección:

Inicialmente en documentos se guardan los metadatos que vienen con el documento, posteriormente se realiza la firma y dicho método retorna un diccionario que es el siguiente:

image

Dicho objeto se guarda en la variable firma_electronica y posteriormente es esa variable la que se agrega a los metadatos que posteriormente son actualizados en la tabla de documentos por lo que se procede a modificar ese diccionario para que no agregue la firma y las llaves al registro de la tabla de documentos (obviamente procurando que si lo haga para la tabla de firma electrónica).

Por lo tanto la corrección implementada es la siguiente:

image

Sin embargo se generaba un error producido por un cambio anterior con el propósito de quitar la llave privada de la respuesta de la API firma electrónica el cual era el siguiente:

image

Por lo tanto al no haber llaves ahora en los metadatos genera un error por lo que se quita dicho cambio para dejar el ajuste realizado a la variable firma_electronica. Por tanto en la base de datos ahora quedan los registros de la siguiente manera:

image

Skyrus1203 commented 1 month ago

ACTUALIZACIÓN 17/07/24

Se realiza la clonación del repositorio de documentos CRUD y se inicia el análisis para la implementación de los cambios en los metadatos de los métodos de obtención de información de la BD.

Sin embargo no se puede probar directamente ya que se requieren las credenciales de conexión para que la API pueda rescatar info de la base de datos, así que queda pendiente ese apartado.

Skyrus1203 commented 1 month ago

ACTUALIZACIÓN 18/07/24

Se ajustan los endpoints en firma electrónica modificando el namespace que maneja la construcción de los enpoints:

image

Quedando de la siguiente manera:

image

Así mismo en el cliente de verificación se modificó el firmaElectronicaHelper para que apunte al nuevo endpoint actualizado

image

También en el cliente de evaluación se ajustó el endpoint en firmaElectronicaService:

image

En cuanto al CRUD se sigue trabajando en ello lo cual queda pendiente de este Issue

Skyrus1203 commented 1 month ago

ACTUALIZACIÓN 19/07/24

Se comienza a implementar el ajuste de documentos CRUD:

Cuando se hacía una consulta a getOne o getAll de firmaElectrónica en documentos CRUD se traen las llaves tanto en la clave de "Llaves" como en los metadatos de la tabla de documentos que se adjunta a la respuesta, por lo tanto para quitar la llave privada de las respuestas se debe quitar de estas dos claves del JSON de las respuestas:

Para el getOne de firma electrónica se implementa un Unmarshal que convierte el String de las llaves a un mapa y se manipula eliminando la clave llave privada y se vuelve a reasignar el json como string con marshal al campo de la estructura correspondiente:

A continuación se edita el modelo de firma electrónica de get One para quitar la llave privada

image

Luego se edita el controlador para quitar la clave de los metadatos (de existir):

image

Dando como resultado la correcta ausencia de la clave tanto en las llaves como en los metadatos de la consulta getOne:

Captura de pantalla 2024-07-19 231824

Captura de pantalla 2024-07-19 231841

Luego de esto se modifica el modelo de firma electrónica de getAll para eliminar la clave de llave privada:

image

image

Dando como resultado la eliminación de la llave privada de las llaves:

Captura de pantalla 2024-07-19 234816

Sin embargo aún no se ha podido eliminar de los metadatos (de existir):

Captura de pantalla 2024-07-19 234843

Se sigue trabajando en ello por lo que queda pendiente este asunto.

Skyrus1203 commented 1 month ago

ACTUALIZACIÓN 20/07/24

Se toma la decisión de dejar implementados los cambios realizados el día anterior ya que el pendiente se sale del alcance por motivos de que ya no se guardarán las llaves privadas en los metadatos por lo tanto para los nuevos registros el sistema cumplirá su función correctamente ya que se cumplió el propósito de mantener oculta esa información en las consultas de firma electrónica

Se prueba también el proceso de firmado y todo funciona:

image

Y se prueba la verificación:

image

diagutierrezro commented 1 month ago

Muy buen trabajo Andres.