Начало работы с OPEN AS2

HTTP

Протокол AS2 (Положение о применимости 2) — это стандартная спецификация для безопасной и надежной передачи данных через Интернет. Он обеспечивает безопасность передаваемых данных с помощью цифровых сертификатов и механизмов шифрования.

OpenAS2 — это проект с открытым исходным кодом, который реализует AS2 в Java.Основываясь на протоколе с открытым исходным кодом FreeBSD, OpenAS2 позволяет вам передавать и получать сообщения AS2 в EDI-X12, EDIFACT, XML или двоичной форме между торговыми партнерами.

1. Загрузите и установите

Откройте адрес загрузки AS2:источник forge.net/projects/op…

Скачиваем и распаковываем, можно запустить без установки, структура каталогов следующая:

.
├── OpenAS2HowTo.pdf
├── RELEASE-NOTES.md
├── bin
├── changes.txt
├── config
├── lib
└── resources

2. Запустите тест

Перед выполнением скрипта необходимо подтвердить, что система установленаJAVA_HOMEпеременные окружения.

Добавить разрешение на выполнение в сценарий запуска

chmod +x ./bin/start-openas2.sh

Запустить ОТКРЫТЫЙ AS2

./bin/start-openas2.sh

Если все нормально, вы увидите следующую подсказку

FINE OpenAS2Server: OpenAS2 Server v2.9.0 started.

3. Сгенерируйте ключ

$ ./gen_p12_key_par.sh clinflash-pv clinflash-pv SHA256 \
"CN=www.clinflash.net, OU=Clinflash, O=Clinflash, L=Shanghai, S=Shanghai, C=CN"
Generate a certificate to a PKCS12 key store.
Generating certificate:  using alias clinflash-pv to clinflash-pv.p12
Do you wish to execute this request? [Y/N]Y
Enter password for keystore:123456
存储在文件 <clinflash-pv.cer> 中的证书

Generated files:
     PKCS12 keystore: clinflash-pv.p12
     Public Key File: clinflash-pv.cer

4. Инструкции по настройке

Файл конфигурации находится в каталоге config, и каждый файл имеет разные функции.

  • config.xml

Основной файл конфигурации, включая глобальные атрибуты, сертификаты ключей, партнерские файлы конфигурации, журналы, каталоги файлов отправки, каталоги файлов получения и многие другие связанные конфигурации. - партнерства.xml
Используется для настройки партнеров и партнерств EDI. - as2_certs.p12
Файл подписи PKCS12, используемый для защиты информации о партнере, это имя файла по умолчанию, и пользовательское имя файла может быть указано в config.xml. - команды.xml
В этом файле перечислены команды, поддерживаемые OPEN AS2. Как правило, не изменяйте содержимое этого файла.

Кроме того, если конфигурация в файле config.xml изменена, приложение необходимо перезапустить, чтобы оно вступило в силу, а изменения конфигурации в других файлах будут автоматически обновлены.

4.1 конфигурация приложения config.xml

4.1.1 Конфигурация свойств

Узел свойств определяет некоторые значения свойств, которые можно использовать в качестве переменных в другом месте.

<properties
        storageBaseDir="%home%/../data"
        log_date_format="yyyy-MM-dd HH:mm:ss.SSS"
        sql_timestamp_format="yyyy-MM-dd HH:mm:ss.SSS"
        as2_message_id_format="OPENAS2-$date.ddMMyyyyHHmmssZ$-$rand.UUID$@$msg.sender.as2_id$_$msg.receiver.as2_id$"
        as2_async_mdn_url="http://localhost:10081"/>

Например, используйтеstorageBaseDirЗначение этого свойства:

<processor classname="org.openas2.processor.DefaultProcessor"
        pendingMDN="$properties.storageBaseDir$/pendingMDN3"
        pendingMDNinfo="$properties.storageBaseDir$/pendinginfoMDN3">
</>
4.1.2 Конфигурация сертификата
<certificates classname="org.openas2.cert.PKCS12CertificateFactory"
        filename="%home%/as2_certs.p12"
        password="testas2"
        interval="300"/>

%home%Указывает текущий каталог, который является каталогом конфигурации,filenameиpasswordЗначение свойства необходимо изменить на наш файл хранилища ключей и пароль.

4.1.3 Конфигурация партнерского файла

Здесь определяется только расположение файла партнерства, и в этом файле содержится подробная информация о конфигурации.

<partnerships classname="org.openas2.partner.XMLPartnershipFactory"
        filename="%home%/partnerships.xml"
        interval="120"/>
4.1.4 Отправить конфигурацию файла

OPEN AS2 будет опрашивать и сканировать указанный каталог в поисках файлов для отправки партнерам. Сканер каталогов проверяет изменение размера найденного файла в течение двух последовательных циклов и добавляет файл в очередь отправки, если изменений нет.

Каталог для хранения отправленных файлов может быть личным каталогом партнера или общим каталогом. Если используется общий каталог, личность партнера определяется путем разбора имени файла.

Ниже приведены ключевые атрибуты, связанные с отправкой файлов:

outboxdir- Сканирование каталога для отправки файлов

errordir- Каталог, в котором хранится файл после ошибки отправки файла

interval- Период (секунды) для сканирования каталога

sendfilename- должно ли сообщение, отправляемое удаленному партнеру, содержать имя файла

mimetype- Укажите тип расширения файла в сообщении отправки

  • Общая конфигурация каталога отправки
<!-- This directory polling module will parse the filename to get a sender, receiver and name of file to send to partner.
        For instance, a file named MyComapny_OID-PartnerB_OID-OrderID-745634.edi would be sent from MyCompany to PartnerB.
        The name of the file sent to the partner will be "OrderID-745634.edi" -->
<module classname="org.openas2.processor.receiver.AS2DirectoryPollingModule"
        outboxdir="$properties.storageBaseDir$/toAny"
        errordir="$properties.storageBaseDir$/toAny/error"
        interval="5"
        delimiters="-"
        mergeextratokens="true"
        sendfilename="true"
        format="sender.as2_id, receiver.as2_id, attributes.filename"
        mimetype="application/EDI-X12" />
  • Собственная конфигурация каталога отправки
<!-- This directory polling module will is dedicated to sending to partner PartnerA_OID -->
<module classname="org.openas2.processor.receiver.AS2DirectoryPollingModule"
        outboxdir="$properties.storageBaseDir$/toPartnerA/"
        errordir="$properties.storageBaseDir$/toPartnerA/error"
        interval="5"
        defaults="sender.as2_id=MyCompany_OID, receiver.as2_id=PartnerA_OID"
        sendfilename="true"
        mimetype="application/EDI-X12"/>

<!-- This directory polling module will is dedicated to sending to partner PartnerB_OID -->
<module classname="org.openas2.processor.receiver.AS2DirectoryPollingModule"
        outboxdir="$properties.storageBaseDir$/toPartnerB"
        errordir="$properties.storageBaseDir$/toPartnerB/error"
        interval="5"
        defaults="sender.as2_id=MyCompany_OID, receiver.as2_id=PartnerB_OID"
        sendfilename="true"
        mimetype="application/EDI-X12"/>

где атрибут defaults указывает идентификаторы AS2 отправителя и получателя всех файлов в каталоге.

Кроме того, есть возможность ограничить расширение отправляемого файла,fileextensionfilterЗадается расширение передаваемого файла,fileextensionexcludefilterБыло указано игнорируемое расширение файла.

fileextensionfilter="doc, docx, txt, edi"
fileextensionexcludefilter="tmp"
4.1.5 Отслеживание сообщений

Начиная с версии 2.1.0, OPEN AS2 будет отслеживать процесс передачи и приема сообщений и записывать статус сообщения во встроенную базу данных H2.

Ниже приведена конфигурация по умолчанию:

<module classname="org.openas2.processor.msgtracking.DbTrackingModule"
        use_embedded_db="true"
        force_load_jdbc_driver="false"
        db_user="sa"
        db_pwd="OpenAS2"
        db_name="openas2"
        table_name="msg_metadata"
        db_directory="%home%/DB"
        jdbc_driver="org.h2.Driver"
        jdbc_connect_string="jdbc:h2:$component.db_directory$/$component.db_name$"
        sql_escape_character="'"
        tcp_server_start="true"
        tcp_server_port="9092"
        tcp_server_password="openas2"
        />

Помимо использования встроенной базы данных H2, вы также можете использовать любую базу данных, управляемую JDBC (например, Oracle, MySql или Postgresql и т. д.). При использовании внешней базы данных необходимо установить драйвер JDBC вlibкаталог иuse_embedded_dbЗначение атрибута установлено на «false», и другая часть значения атрибута также изменена.

Следующая конфигурация использует Postgresql в качестве примера: (имя пользователя и пароль заполняются в соответствии с реальной ситуацией)

<module classname="org.openas2.processor.msgtracking.DbTrackingModule"
        use_embedded_db="false"
        force_load_jdbc_driver="false"
        db_user="sa"
        db_pwd="OpenAS2"
        db_name="openas2"
        db_directory="%home%/DB"
        jdbc_driver="org.postgresql.Driver"
        jdbc_connect_string="jdbc:postgresql://localhost:5432/$component.db_name$"
        sql_escape_character="'"
        />
4.1.6 Повторите настройку

Если при передаче сообщения возникает ошибка, система автоматически повторяет попытку неограниченное количество раз, но количество попыток можно настроить.

config.xmlНастроенное количество попыток вpartnerships.xmlПереопределяет количество повторных попыток, настроенное в .

<module classname="org.openas2.processor.sender.AS2SenderModule" retries="5"/>
<module classname="org.openas2.processor.sender.MDNSenderModule" retries="3"/>
4.1.7 Другая конфигурация

Кроме того, есть некоторые другие настройки, такие как разрешение имени файла, прокси-сервер, проверка работоспособности и т. д., вы можете просмотреть инструкции по использованию OPEN AS2OpenAS2HowTo.pdf.

4.2 конфигурация партнера partners.xml

partnerships.xmlВся информация о партнере по обмену информацией настраивается в

4.2.1 <partner>Информация о торговом партнере, которая определяет обмен информацией

имя: имя торгового партнера;
as2_id: идентификация подтверждения личности между торговыми партнерами, а также используется общим модулем опроса отправки файлов для анализа имени файла;
x509_alias: псевдоним сертификата, который должен совпадать с псевдонимом, установленным в сертификате ключа.
4.2.2 <partnership>Определяет отношения между двумя торговыми партнерами

`отправитель`: должен соответствовать значению атрибута имени в отправителе.
`receive`: должно соответствовать значению атрибута имени в приемнике.
`sign`: алгоритм подписи пакетов AS2, поддерживает md2, md5, sha1, sha224, sha256, sha384, sha512.
`encrypt`: алгоритм шифрования сообщений AS2, поддерживает 3des, cast5, rc2_cbc, aes128, aes192, aes256.
4.2.3 Пример конфигурации партнерства

В следующем примере представлена ​​конфигурация собственной компании и 2 торговых партнеров:

<partnerships>
    <partner name="MyCompany"
             as2_id="MyCompany_OID"
             x509_alias="mycompany"
             email="as2msgs@openas2.com"/>

    <partner name="PartnerA"
             as2_id="PartnerA_OID"
             x509_alias="partnera"
             email="as2msgs@partnera.com"/>

    <partner name="PartnerB"
             as2_id="PartnerB_OID"
             x509_alias="partnerb"
             email="as2msgs@partnerb.com"/>

    <partnership name="MyCompany-to-PartnerA">
        <sender name="MyCompany"/>
        <receiver name="PartnerA"/>
        <attribute name="protocol" value="as2"/>
        <attribute name="content_transfer_encoding" value="binary"/>
        <attribute name="compression_type" value="ZLIB"/>
        <attribute name="subject" value="File $attributes.filename$ sent from $sender.name$ to $receiver.name$"/>
        <attribute name="as2_url" value="http://localhost:10080"/>
        <attribute name="as2_mdn_to" value="edi@myCompany.com"/>
        <attribute name="as2_mdn_options"
                   value="signed-receipt-protocol=optional, pkcs7-signature; signed-receipt-micalg=optional, $attribute.sign$"/>
        <attribute name="encrypt" value="3DES"/>
        <attribute name="sign" value="SHA256"/>
        <attribute name="resend_max_retries" value="3"/>
        <attribute name="prevent_canonicalization_for_mic" value="false"/>
        <attribute name="rename_digest_to_old_name" value="false"/>
        <attribute name="remove_cms_algorithm_protection_attrib" value="false"/>
    </partnership>
    <partnership name="PartnerA-to-MyCompany">
        <sender name="PartnerA"/>
        <receiver name="MyCompany"/>
    </partnership>

    <partnership name="MyCompany-to-PartnerB">
        <sender name="MyCompany"/>
        <receiver name="PartnerB"/>
        <attribute name="protocol" value="as2"/>
        <attribute name="content_transfer_encoding" value="8bit"/>
        <attribute name="compression_type" value="ZLIB"/>
        <attribute name="subject" value="File $attributes.filename$ sent from $sender.name$ to $receiver.name$"/>
        <attribute name="as2_url" value="https://as2.partnerb.com:8443"/>
        <attribute name="as2_mdn_to" value="edi@myCompany.org"/>
        <attribute name="as2_mdn_options"
                   value="signed-receipt-protocol=optional, pkcs7-signature; signed-receipt-micalg=optional, $attribute.sign$"/>
        <attribute name="encrypt" value="3DES"/>
        <attribute name="sign" value="SHA1"/>
        <attribute name="resend_max_retries" value="3"/>
        <attribute name="prevent_canonicalization_for_mic" value="false"/>
        <attribute name="rename_digest_to_old_name" value="false"/>
        <attribute name="remove_cms_algorithm_protection_attrib" value="false"/>
    </partnership>
    <partnership name="PartnerB-to-MyCompany">
        <sender name="PartnerB"/>
        <receiver name="MyCompany"/>
    </partnership>


</partnerships>

Следует отметить, что даже если передача данных является однонаправленной, настройте двунаправленный<partnership>.

4.2.4 AS2 Message ID

Идентификатор сообщения используется для уникальной идентификации сообщения, отправленного партнеру, формат по умолчанию:

OPENAS2-$date.ddMMyyyyHHmmssZ$-$rand.UUID$@$msg.sender.as2_id$_$msg.receiver.as2_id$

В config.xml вы можете передатьas2_message_id_formatСвойство задает глобальный идентификатор сообщения, и параметр в файле partner.xml переопределяет глобальный параметр.

4.2.5 Кодирование передачи содержимого

Кодировка передачи контента по умолчанию:binary, вы можете использовать partenership.xml вcontent_transfer_encodingСвойства переопределяют значения по умолчанию.

4.2.6 Сжатие сообщений

OPEN AS2 автоматически поддерживает сжатие входящих сообщений. Если вы хотите включить сжатие исходящих сообщений, вам необходимо установить его в partenership.xml.compression_typeатрибут, поддерживаются только форматы сжатия/распаковкиZLIB, сжатие не включено по умолчанию.

5. Проверка передачи

партнер: CLINFLASH, CDEE2B

Здесь мы развертываем два экземпляра OPEN AS2 на одной машине.Чтобы конфигурация не влияла друг на друга, мы копируем 2 копии каталога программы OPEN AS2, которыеOpenAS2-01,OpenAS2-02.

5.1 Partener 1 - CLINFLASH

Войдите в OpenAS2-02 и сгенерируйте ключи clinflash-pv.p12 (хранилище ключей) и clinflash-pv.cer (открытый ключ) в каталоге конфигурации.

../bin/gen_p12_key_par.sh clinflash-pv clinflash-pv SHA256 \
"CN=www.clinflash.net, OU=Clinflash, O=Clinflash, L=Shanghai, S=Shanghai, C=CN"

config.xml

Изменить путь к сертификату и пароль

<certificates classname="org.openas2.cert.PKCS12CertificateFactory"
        filename="%home%/clinflash-pv.p12"
        password="123456"
        interval="300"/>

Отправьте конфигурацию каталога опроса, чтобы сохранить только один

<module classname="org.openas2.processor.receiver.AS2DirectoryPollingModule"
        outboxdir="$properties.storageBaseDir$/toCDEE2B/"
        errordir="$properties.storageBaseDir$/toCDEE2B/error"
        interval="5"
        defaults="sender.as2_id=CLINFLASH, receiver.as2_id=CDEE2B"
        sendfilename="true"
        mimetype="application/EDI-X12"/>

Другие конфигурации изменять не нужно.

partenership.xml

Среди них as2_url должен соответствовать хосту и порту получателя AS2 для получения сообщения.Если получатель также является ОТКРЫТЫМ AS2, настройте модуль AS2ReceiverModule в config.xml.

<partnerships>
    <partner name="CLINFLASH"
             as2_id="CLINFLASH"
             x509_alias="clinflash-pv"
             email="xxx@xxx.com"/>

    <partner name="CDEE2B"
             as2_id="CDEE2B"
             x509_alias="cdee2b"
             email="xxx@xxx.com"/>

    <partnership name="CLINFLASH-to-CDEE2B">
        <sender name="CLINFLASH"/>
        <receiver name="CDEE2B"/>
        <attribute name="protocol" value="as2"/>
        <attribute name="content_transfer_encoding" value="binary"/>
        <attribute name="compression_type" value="ZLIB"/>
        <attribute name="subject" value="File $attributes.filename$ sent from $sender.name$ to $receiver.name$"/>
        <attribute name="as2_url" value="http://localhost:20080"/>
        <attribute name="as2_mdn_to" value="any string"/>
        <attribute name="as2_mdn_options"
                   value="signed-receipt-protocol=optional, pkcs7-signature; signed-receipt-micalg=optional, $attribute.sign$"/>
        <attribute name="encrypt" value="3DES"/>
        <attribute name="sign" value="SHA256"/>
        <attribute name="resend_max_retries" value="3"/>
        <attribute name="prevent_canonicalization_for_mic" value="false"/>
        <attribute name="rename_digest_to_old_name" value="false"/>
        <attribute name="remove_cms_algorithm_protection_attrib" value="false"/>
    </partnership>
    
    <partnership name="CDEE2B-to-CLINFLASH">
        <sender name="CDEE2B"/>
        <receiver name="CLINFLASH"/>
    </partnership>
</partnerships>

5.2 Partener 2 - CDEE2B

Введите OpenAS2-02 и сгенерируйте ключи cdee2b.p12 (хранилище ключей) и cdee2b.cer (открытый ключ) в каталоге конфигурации.

../bin/gen_p12_key_par.sh cdee2b cdee2b SHA256 \
"CN=www.cde.org.cn, OU=CDE, O=CDE, L=Beijing, S=Beijing, C=CN"

config.xml

Изменить путь к сертификату и пароль

<certificates classname="org.openas2.cert.PKCS12CertificateFactory"
        filename="%home%/cdee2b.p12"
        password="123456"
        interval="300"/>

Отправьте конфигурацию каталога опроса, чтобы сохранить только один

<module classname="org.openas2.processor.receiver.AS2DirectoryPollingModule"
        outboxdir="$properties.storageBaseDir$/toCLINFLASH/"
        errordir="$properties.storageBaseDir$/toCLINFLASH/error"
        interval="5"
        defaults="sender.as2_id=CDEE2B, receiver.as2_id=CLINFLASH"
        sendfilename="true"
        mimetype="application/EDI-X12"/>

Другие конфигурации изменять не нужно.

partenership.xml

<partnerships>
    <partner name="CDEE2B"
             as2_id="CDEE2B"
             x509_alias="cdee2b"
             email="xxx@xxx.com"/>

    <partner name="CLINFLASH"
             as2_id="CLINFLASH"
             x509_alias="clinflash-pv"
             email="xxx@xxx.com"/>

    <partnership name="CDEE2B-to-CLINFLASH">
        <sender name="CDEE2B"/>
        <receiver name="CLINFLASH"/>
        <attribute name="protocol" value="as2"/>
        <attribute name="content_transfer_encoding" value="binary"/>
        <attribute name="compression_type" value="ZLIB"/>
        <attribute name="subject" value="File $attributes.filename$ sent from $sender.name$ to $receiver.name$"/>
        <attribute name="as2_url" value="http://localhost:10080"/>
        <attribute name="as2_mdn_to" value="any string"/>
        <attribute name="as2_mdn_options"
                   value="signed-receipt-protocol=optional, pkcs7-signature; signed-receipt-micalg=optional, $attribute.sign$"/>
        <attribute name="encrypt" value="3DES"/>
        <attribute name="sign" value="SHA256"/>
        <attribute name="resend_max_retries" value="3"/>
        <attribute name="prevent_canonicalization_for_mic" value="false"/>
        <attribute name="rename_digest_to_old_name" value="false"/>
        <attribute name="remove_cms_algorithm_protection_attrib" value="false"/>
    </partnership>
    
    <partnership name="CLINFLASH-to-CDEE2B">
        <sender name="CLINFLASH"/>
        <receiver name="CDEE2B"/>
    </partnership>
</partnerships>

обмен ключами

Каждый из них отправляет открытый ключ друг другу и импортирует его в хранилище ключей.

Команда для импорта открытого ключа выглядит следующим образом

cert import <alias> <path+filename> <keystore password>

OPEN AS2 также предоставляет быстрые сценарииimport_public_cert.sh, использование выглядит следующим образом

import_public_cert.sh <src certificate> <target keystore> <cert alias>

контрольная работа

Запустите OpenAS2-01 и OpenAS2-02 соответственно, но запустите второй экземпляр и обнаружите, что порт 9092, используемый для подключения к базе данных, занят, затем измените 9092 в одном из config.xml на другой порт.

Добавьте любой файл в каталог OpenAS2-01/data/toCDEE2B/

echo "test openas2..." > test.xml

скоро увидимMessage sent and MDN received successfullyПодсказка успешно отправлена ​​и получена квитанция.

В этот момент войдите в проект OpenAS2-02/data/CLINFLASH-CDEE2B/inbox и найдите только что полученный файл.test.xml-OPENAS2-28062019002300+0800-5bf115dd-b9f6-4fd2-b5ce-c6db19d2b435@CLINFLASH_CDEE2B.

Пока тест переноса с CLINFLASH на CDEE2B проходит успешно, аналогично нет проблем и с тестом переноса файлов с CDEE2B на CLINFLASH.

6. Резюме

До сих пор базовое использование OPEN AS2 было упомянуто выше, но функции OPEN AS2 намного шире. .

портал