Administre documentos comerciales con OpenAS2 en Fedora

Los documentos comerciales a menudo requieren un manejo especial. Enter Intercambio de documentos electrónicos, o . EDI es más que simplemente transferir archivos usando correo electrónico o http (o ftp), porque estos son documentos como pedidos y facturas. Cuando envía una factura, quiere estar seguro de que:

1. Va al destino correcto y no es interceptado por los competidores.
2. Su factura no puede ser falsificada por un tercero.
3. Su cliente no puede reclamar ante un tribunal que nunca recibió la factura.

Los dos primeros objetivos se pueden lograr mediante HTTPS o correo electrónico con S/MIME y, en algunas situaciones, basta con una simple POST de HTTPS a una API web. Lo que agrega EDI es la última parte.

Este artículo no cubre el complicado tema de los formatos de los archivos intercambiados. Incluso cuando se utiliza un formato estandarizado como ANSI o EDIFACT, en última instancia depende de los socios comerciales. No es raro que los socios comerciales utilicen un formato de archivo CSV ad-hoc. Este artículo le muestra cómo configurar Fedora para enviar y recibir en una configuración EDI.

EDI centralizado

La solución tradicional es utilizar una Red de Valor Agregado, o DESDE . La VAN es un eje central que transfiere documentos entre sus clientes. Lo que es más importante, mantiene un registro seguro de los documentos intercambiados que pueden usarse como evidencia en disputas. La VAN puede utilizar diferentes protocolos de transferencia para cada uno de sus clientes

Protocolos AS y MDN

Los protocolos AS son una especificación para agregar una firma digital con cifrado opcional a un documento electrónico. Lo que agrega sobre HTTPS o S/MIME es la Notificación de disposición de mensajes, o MDN . El MDN es una respuesta firmada y fechada que dice, en esencia, “Recibimos su factura”. Utiliza un hash seguro para identificar el documento específico recibido. Esto aborda el punto #3 sin involucrar a un tercero.

los protocolo AS2 utiliza HTTP o HTTPS para el transporte. Objetivo de otros protocolos AS FTP y SMTP . AS2 es utilizado por empresas grandes y pequeñas para evitar depender (y pagar) de una VAN.

AbiertoAS2

OpenAS2 es una implementación Java de código abierto del protocolo AS2. esta disponible en Fedora desde 28, e instalado con:

                      $ sudo dnf install openas2
                      
$ cd /etc/openas2

La configuración se realiza con un editor de texto y los archivos de configuración están en XML. La primera orden del día antes de iniciar OpenAS2 es cambiar las contraseñas de fábrica.

Edite /etc/openas2/config.xml y busque ChangeMe. Cambia esas contraseñas. La contraseña predeterminada en el almacén de certificados es testas2, pero eso no importa mucho ya que cualquiera que pueda leer el almacén de certificados puede leer config.xml y obtener la contraseña.

Qué compartir con los socios de AS2

Hay 3 cosas que intercambiará con un compañero AS2.

Identificación AS2

No se moleste en buscar el estándar AS2 oficial para ID de AS2 legales. Si bien OpenAS2 implementa el estándar, es probable que sus socios utilicen un producto patentado que no lo hace. Si bien AS2 permite identificaciones mucho más largas, muchas implementaciones se rompen con más de 16 caracteres. El uso de caracteres de ID de AS2 legales como ‘:’ que pueden aparecer como separadores de ruta en un sistema operativo propietario también es un problema. Restrinja su ID de AS2 a mayúsculas y minúsculas, dígitos y ‘_’ con no más de 16 caracteres.

certificado SSL

Para uso real, querrá generar un certificado con SHA256 y RSA. OpenAS2 se envía con dos certificados de fábrica para jugar. No los uses para nada real, obviamente. El archivo del certificado está en formato PKCS12. Java se envía con keytool que puede mantener su “almacén de claves” PKCS12, como lo llama Java. Este artículo omite el uso de openssl para generar claves y certificados. Simplemente tenga en cuenta que sudo keytool -list -keystore as2_certs.p12 enumerará los dos certificados de prácticas de fábrica.

URL de AS2

Esta es una URL HTTP que accederá a su instancia de OpenAS2. HTTPS también es compatible, pero es redundante. Para usarlo, debe descomentar la configuración del módulo https en config.xml y proporcionar un certificado firmado por una CA pública. Esto requiere otro artículo y es completamente innecesario aquí.

De forma predeterminada, OpenAS2 escucha en 10080 para HTTP y 10443 para HTTPS. OpenAS2 puede comunicarse consigo mismo, por lo que se envía con dos asociaciones que utilizan https://localhost:10080 como URL de AS2. Si no encuentra esta demostración convincente y puede instalar una segunda instancia (en una VM, por ejemplo), puede usar IP privadas para las URL de AS2. O instale Cjdns para obtener direcciones de malla IPv6 que se pueden usar en cualquier lugar, lo que da como resultado URL AS2 como https://[fcbf:fc54:e597:7354:8250:2b2e:95e6:d6ba]:10080.

La mayoría de las empresas también querrán una lista de direcciones IP para agregar a su firewall. esto es en realidad mala práctica . Un servidor AS2 tiene el mismo riesgo de seguridad que un servidor web, lo que significa que debe aislarlo en una VM o contenedor. Además, la dificultad de mantener actualizadas las listas mutuas de IP crece con la lista de socios. El servidor AS2 rechaza las solicitudes no firmadas por un socio configurado.

Socios de OpenAS2

Con eso en mente, abra partnerships.xml en su editor. En la parte superior hay una lista de “socios”. Cada socio tiene un nombre (referido por las asociaciones a continuación como “remitente” o “receptor”), ID de AS2, certificado y correo electrónico. Necesita una definición de socio para usted y para aquellos con los que intercambia documentos. Puede definir varios socios por sí mismo. OpenAS2 se envía con dos socios, OpenAS2A y OpenAS2B, que utilizará para enviar un documento de prueba.

Asociaciones de OpenAS2

Lo siguiente es una lista de “asociaciones”, una para cada dirección. Cada configuración de asociación incluye el remitente, el destinatario y la URL de AS2 utilizada para enviar los documentos. De forma predeterminada, las asociaciones utilizan MDN síncrono. El MDN se devuelve en la misma transacción HTTP. Puede descomentar as2_receipt_option para MDN asíncrono, que se envía algún tiempo después. Utilice MDN síncrono siempre que sea posible, ya que el seguimiento de MDN pendientes agrega complejidad a su aplicación.

Las otras opciones de asociación seleccionan cifrado, hash de firma y otras opciones de protocolo. Un receptor AS2 completamente implementado puede manejar cualquier combinación de opciones, pero los socios AS2 pueden tener implementaciones incompletas o requisitos de políticas. Para example, DES3 es un algoritmo de cifrado comparativamente débil y es posible que no sea aceptable. Es el predeterminado porque se implementa casi universalmente.

Si se tomó la molestia de configurar una segunda máquina física o virtual para esta prueba, designe una como OpenAS2A y la otra como OpenAS2B. Modifique as2_url en la asociación OpenAS2A-to-OpenAS2B para usar la IP (o nombre de host) de OpenAS2B, y viceversa para la asociación OpenAS2B-to-OpenAS2A. A menos que estén usando el perfil de firewall de FedoraWorkstation, en ambas máquinas necesitará:

                      # sudo firewall-cmd --zone=public --add-port=10080/tcp
                    

Ahora inicie el servicio openas2 (en ambas máquinas si es necesario):

                      # sudo systemctl start openas2
                    

Restablecimiento de la contraseña de MDN

Esto inicializa la base de datos de registro de MDN con la contraseña de fábrica, no con la que la cambió. Este es un error de empaquetado que se solucionará en la próxima versión. Para evitar frustraciones, aquí se explica cómo cambiar la contraseña de la base de datos h2:

                      $ sudo systemctl stop openas2
                      
$ cat >h2passwd <<'DONE'
#!/bin/bash
AS2DIR="/var/lib/openas2"
java -cp "$AS2DIR"/lib/h2* org.h2.tools.Shell
-url jdbc:h2:"$AS2DIR"/db/openas2
-user sa -password "$1" <<EOF
alter user sa set password '$2';
exit
EOF
DONE
$ sudo sh h2passwd ChangeMe yournewpasswordsetabove
$ sudo systemctl start openas2

Probando la configuración

Con eso fuera del camino, enviemos un documento. Suponiendo que está en una máquina OpenAS2A:

                      $ cat >testdoc <<'DONE'
                      
This is not a real EDI format, but is nevertheless a document.
DONE
$ sudo chown openas2 testdoc
$ sudo mv testdoc /var/spool/openas2/toOpenAS2B
$ sudo journalctl -f -u openas2
... log output of sending file, Control-C to stop following log
^C

OpenAS2 no envía un documento hasta que el usuario o grupo openas2 puede escribirlo. Como consecuencia, su aplicación comercial real copiará o generará el documento. Luego cambia de grupo o permisos para enviarlo en su camino, para evitar enviar un documento parcial.

Ahora, en la máquina OpenAS2B, /var/spool/openas2/OpenAS2A_OID-OpenAS2B_OID/inbox muestra el mensaje recibido. ¡Eso debería ayudarte a comenzar!

Foto por Beatriz Pérez Moya en Unsplash .

Related Posts