Ejemplo: intercambio completo de mensajes AS2 (Avanzado)
Este ejemplo ilustra un intercambio de mensajes AS2 más avanzado, con cifrado y firma, entre dos socios AS2 que ejecutan FlowForce Server. Siga primero el tutorial anterior (Ejemplo: intercambio completo de mensajes AS2 (Simple)), que cubre los aspectos más básicos, antes de comenzar a seguir este tutorial.
Este ejemplo muestra el escenario más complejo posible entre dos socios AS2 (la duodécima combinación de doce posibles, conforme a la sección 2.4.2 del RFC 4130), que básicamente es la siguiente:
•el emisor envía datos AS2 cifrados
•el emisor envía datos AS2 firmados
•el emisor solicita que el receptor devuelva una MDN firmada en respuesta al mensaje
Supuestos
•se usan el mismo emisor y el mismo receptor que en el ejemplo anterior: Hermes (FlowForce Server en Linux) y Apollo (FlowForce Server en Windows).
•Hermes quiere enviar a Apollo un mensaje cifrado y firmado, y solicita una MDN firmada de vuelta.
•tanto Apollo como Hermes se ejecutan en una red privada local.
•el servidor receptor AS2 (Apollo) acepta solicitudes HTTP de clientes sin autenticar (es decir, el servicio AS2 es de acceso público).
Requisitos previos
•FlowForce Server Advanced Edition debe estar instalado y y tener una licencia asignada tanto en el equipo de Apollo como en el de Hermes.
•en los servidores Apollo y Hermes, la interfaz de administración de FlowForce Web debe estar instalada y ejecutándose, y el host y el puerto deben estar configurados (por ejemplo, http://apollo:8082 y http://hermes:8082, si los respectivos nombres de host son "apollo" y "hermes"). Consulte también Definir la configuración de red.
Configurar los certificados de Apollo
En este paso haremos lo siguiente:
1.Apollo genera un certificado público y una clave privada e importa ambos a FlowForce Server.
2.Apollo envía el certificado público (sin la clave privada) a Hermes.
3.Hermes importa el certificado público de Apollo a FlowForce Server.
Por qué es esto necesario:
•antes de enviar el mensaje a Apollo, Hermes necesita la clave pública de Apollo para cifrarlo. Al recibir el mensaje de Hermes, Apollo lo descifra usando su propia clave privada.
•antes de enviar la MDN solicitada por Hermes, Apollo la firma usando su propia clave privada. Al recibir la MDN firmada, Hermes necesita el certificado público de Hermes para verificar la firma.
Para este ejemplo vamos a generar un certificado autofirmado usando la biblioteca Open SSL (https://www.openssl.org/) incluido en Cygwin (https://cygwin.com/). Sin embargo, en un ejemplo real puede que prefiera usar otras herramientas para generar el certificado SSL o puede que en su organización ya exista uno.
Para generar un certificado autofirmado para Apollo, abra el terminal de Cygwin y teclee lo siguiente:
openssl req -x509 -newkey rsa:2048 -keyout apollo_private.pem -out apollo_public.pem -days 365 |
Escoja una contraseña para cifrar la clave privada, introdúzcala cuando se le pida y recuérdela. Puede que necesite esta contraseña más tarde para importar el certificado en FlowForce Server. Siga los pasos del asistente y rellene todos los campos requeridos ("País", "Nombre de estado o provincia", "Nombre de localidad", "Nombre de organización", "Nombre del departamento", "Nombre común" y "Dirección de correo electrónico").
Cuando termine de seguir los pasos del asistente, el comando de la imagen anterior genera dos archivos: apollo_private.pem y apollo_public.pem. Estos archivos se guardan en el directorio raíz de Cygwin (por ejemplo C:\cygwin64\home\<user>\ si Cygwin está instalado en C:\cygwin64). Este par de archivos sólo se puede cargar en FlowForce Server como uno solo, para lo cual primero debe ejecutar el siguiente comando (para copiar el certificado público en el archivo de la clave privada):
cat apollo_public.pem >> apollo_private.pem |
En el equipo Apollo, inicie sesión en FlowForce Server, haga clic en el menú Configuración y luego en Crear > Crear Certificado.
Introduzca el nombre del certificado y su descripción, haga clic en Examinar y seleccionen el archivo apollo_private.pem creado con anterioridad. Asegúrese de que introduce la contraseña creada al principio del esta sección y haga clic en Guardar.
Ahora el par de certificados público y privado se ha importado al FlowForce Server de Apollo. Como ve, el icono y el texto descriptivo indican que este archivo contiene ambos certificados:
Para enviar la clave pública a Hermes, copie el archivo apollo_public.pem al equipo de Hermes. A continuación, inicie sesión en FlowForce Server en el equipo de Hermes e importe ese archivo siguiendo los mismos pasos que se indican más arriba (esta vez la clave privada no está en el archivo, por lo que no es necesaria una contraseña).
Como ve, el icono y el texto descriptivo indican que el archivo contiene únicamente el certificado público (sin la clave privada).
Configurar los certificados de Hermes
En este paso haremos lo siguiente:
4.Hermes genera un certificado público y una clave privada e importa ambos a FlowForce Server.
5.Hermes envía el certificado público (sin la clave privada) a Apollo.
6.Apollo importa el certificado público de Hermes a FlowForce Server.
Por qué es esto necesario:
•Antes de enviar el mensaje a Apollo, Hermes lo firma usando su propia clave privada.
•Al recibir el mensaje de Hermes, Apollo verifica la firma del mensaje usando el certificado público de Hermes.
Primero, cree el certificado público y la clave privada de Hermes siguiendo los mismos pasos que con Apollo. Asegúrese de que cambia el nombre:
openssl req -x509 -newkey rsa:2048 -keyout hermes_private.pem -out hermes_public.pem -days 365 |
Los campos "Nombre de la organización", "Nombre común", etc. también tienen que contener la información correspondiente a Hermes:
A continuación, combine ambos archivos en uno solo usando el siguiente comando:
cat hermes_public.pem >> hermes_private.pem |
Ahora importe hermes_private.pem a FlowForce Server en el equipo de Hermes:
Por último, copie hermes_public.pem al equipo de Apollo e impórtelo a FlowForce Server:
Habilitar el cifrado AS2, las firmas y la verificación de firmas de MDN
En el equipo de Hermes, edite la configuración del socio APOLLO como sigue:
Habilitar el descifrado AS2, la firma de MDNs y la verificación de firmas en Apollo
En el equipo de Apollo, edite la configuración del socio HERMES como sigue:
Procesar la MDN
Según los requisitos explicados más arriba, Hermes necesita que Apollo envíe una MDN para confirmar la transmisión AS2. Podemos computar el estado de la MDN entrante (éxito, error) con la función de expresión as2-success. Para ello, inicie sesión en FlowForce, en el equipo de Hermes, y abra el trabajo "send-as2" creado con anterioridad en Ejemplo: intercambio completo de mensajes AS2 (Simple). A continuación, modifique el trabajo como se ve a continuación:
Tenga en cuenta que:
•El resultado del primer paso de ejecución, de tipo "MDN AS2", ahora está declarado (véase el campo Asignar el resultado de este paso a).
•La casilla Anular en caso de error no está marcada, ya que la ejecución debe continuar hasta el siguiente paso.
•El segundo paso de ejecución llama a la función /system/compute, que computa una expresión booleana con ayuda de la función as2-success. Esta última toma como argumento la MDN devuelta por el primer paso de ejecución.
Enviar el mensaje AS2
Ahora está listo para enviar a Apollo el mensaje AS2 cifrado y firmado desde Hermes. En el equipo de Hermes, copie el archivo .edi al directorio configurado con anterioridad /home/altova/as2/outgoing. Cuando transcurre el intervalo de sondeo (60 segundos por defecto) se ejecuta el desencadenador y el trabajo envía el archivo al servicio AS2 del equipo Apollo. El directorio C:\as2\incoming del equipo de Apollo ahora debería contener el mensaje enviado por Hermes, por ejemplo:
Para ver si el trabajo se ha ejecutado con éxito, compruebe el registro del sistema (puede que tenga que hacer esto no sólo en Hermes, sino también en el equipo de Apollo). Para más información, consulte Ver el registro de trabajos.
El registro contiene información sobre cualquier error que haya ocurrido en esta transmisión. Por ejemplo, si Hermes envía datos sin cifrar pero Apollo espera que estén cifrados, el trabajo generará un error y se registrará el mensaje correspondiente.