Электронный обмен EDI
- Стандарты электронного обмена
-
UN EDIFACT (United Nations Electronic Data Interchange for Administration, Commerce and Transport) - формат сообщений утвержден ООН, контролируется и развивается под контролем этой организации. Cпецификации EDIFACT сообщений для обмена информацией в процессе морских контейнерных перевозок разрабатываются рабочей группой SMDG.
-
XML - формат сообщений, построенный в соответствии с локальными договоренностями с агентами судовых линий, являющихся клиентами терминала. Формат не соответствует ни одному международному стандарту.
Транспортный протокол: e-mail
Шифрование Возможна работа (прием/отправка) с сообщениями, зашифрованными с помощью pgp в соответствии со спецификацией rfc 2440
ЭЦП: Для определенных видов сообщений предусмотрено обязательное подписание ЭЦП. Дополнительную информацию по получению и использованию ЭЦП можно здесь.
Порядок предоставления информации: в соответствии с договорами между терминалом, судовыми линиями и их агентами.
Данные Отправитель Получатель Доступные форматы обмена Электронная цифровая подпись План размещения контейнеров на прибывающем судне (включая транзитные) Линия Терминал 1. EDIFACT BAPLIE v.D95B
2. XMLНе требуется Список выгрузки прибывающего судна с указанием предварительных данных о вывозе контейнеров Линия/Агент Терминал 1. EDIFACT BAPLIE v.D95B
2. XMLНе требуется Импортный грузовой манифест (коносаменты) Линия/Агент Терминал 1. XML
2. EDIFACT CUSCAR v. D95BНе требуется Отчет о выгрузке Терминал Линия/Агент EDIFACT COARRI v.D95B Не требуется ДУ Терминал Агент XML Не требуется Уведомление о необходимости досмотра Терминал Агент XML Не требуется Уведомление о факте проведения досмотра Терминал Агент XML Не требуется Релиз-ордер Агент Терминал 1. EDIFACT COREOR v.D00B
2. XMLТребуется Открепление линии на порожние контейнеры под затарку Агент Терминал XML Не требуется Доверенность на получение импортного контейнера Экспедитор Терминал TXT Требуется Расписка о получении релиз-ордера экспедитором Экспедитор Агент 1. TXT
2. XMLТребуется Подтверждение отгрузки контейнеров автомобильным или ж/д транспортом Терминал Линия/Агент EDIFACT CODECO v.D95B Не требуется Букинг на экспортные контейнеры Агент Терминал 1. EDIFACT COPARN v.D95B
2. XMLНе требуется Список погрузки Агент Терминал EDIFACT COPRAR v.D95B Не требуется Подтверждение доставки на терминал контейнеров автомобильным и ж/д транспортом Терминал Линия/Агент EDIFACT CODECO v.D95B Не требуется Инструкции по обработке судна Линия /Агент Терминал EDIFACT MOVINS v.D95B Не требуется Каргоплан погрузки Линия /Агент Терминал 1. EDIFACT BAPLIE v.D95B
2. XMLНе требуется Отчет о погрузке Терминал Линия/Агент EDIFACT COARRI v.D95B Не требуется План размещения контейнеров на судне после погрузки Терминал Линия/Агент EDIFACT BAPLIE v.D95B Не требуется Результат обработки входящих сообщений Терминал Отправитель сообщения EDIFACT APERAK v.D95B XML (на примере manifest) status; report Не требуется Приемные акты Терминал Агент XML Не требуется Запрос на справочные данные для работы с сообщениями в формате xml Линия Терминал XML Не требуется Номинирование клиента Линия Терминал XML Требуется Получить все спецификации одним файлом
Коносаменты. Указание весовых показателей при наличии порожних контейнеров как груз
-
- Вопросы по организации электронного обмена
- Транспортный протокол передачи сообщений (e-mail, ftp...). Требования по защите данных (если необходимо шифрование, то каким именно способом).
- Список необходимых сообщений с указанием версий и набор Message Implementation Guide по ним.
- Временной протокол обмена данными. Протокол должен содержать сведения о том, какие сообщения, по каким событиям, в какой последовательности и на какие адреса необходимо передавать, а также сведения о допустимых задержках отправки данных.
- Международные коды участников обмена (в качестве отправителей и получателей сообщений).
- Контактные лица по вопросам информационных технологий, служб планирования и исполнения грузовых операций.
- Планы судов и их международные идентификационные данные (название по-русски и по-английски, radio call sign), которые планируется обрабатывать.
- Протокол передачи расписания движения судов (плановые даты приходов и уходов судов их voyage number).
- Порядок взаимодействия служб сопровождения участников обмена при отслеживании корректности работы систем обмена, работающих в режиме штатной эксплуатации, выявлении и оперативном устранении проблем.
- XML-схемы импорта/экспорта данных в систему терминала
I. XML-схемы импорта данных в систему терминала:
Запрос на получение справочных данных
Query.xsd
Релиз-ордер
ReleaseOrder.xsd
Открепление линии на порожние контейнеры под затарку
inpackrel.xsd
Манифест
Manifest.xsd
Каргопланы и списки выгрузки
cargoplan.xsd
Букинги
booking.xsd
Отклик системы терминала:
Справочные данные
QueryResult.xsd
Результат импорта манифеста
ImportReport.xsd Результат импорта любого XML-документа ImportStatus.xsd
II. XML-отчеты, отправляемые системой терминала:
Определения общих типов
OutDocType.xsd
Документ учета (таможенный)
TDU.xsd
Приемные акты
ReceivingActs.xsd
Уведомление о действиях по досмотру контейнера
custexam.xsd
Уведомление о действиях по взвешиванию контейнера
WeighingNotice.xsd
- Технические требования и рекомендации по встраиванию средств электронной подписи во внешние информационные системы
Технические требования и рекомендации по встраиванию средств электронной подписи во внешние информационные системы
1. Формат электронного сообщения, подписанного ЭЦП
ЭЦП подписывается не почтовое сообщение, а непосредственно сам электронный документ (edi или xml файл, содержащий данные документа).Результатом при этом является файл в PKCS#7 формате, включающий:
- Исходный документ
- Цифровую подпись
- Сертификат лица, подписавшего документ
Укрупненный алгоритм получения подписанного документа:
Пример (в состав архива входят неподписанный документ, подписанный документ и тестовый сертификат, использованный для подписи)
2. Базовое программное обеспечение для подписи электронных документов
В качестве базового ядра, обеспечивающего реализацию криптографических алгоритмов для подписания и проверки подписанных документов используется программное обеспечение компании КРИПТО-ПРО (www.cryptopro.ru)
Независимо от выбранного Вами сценария получения подписанного документа Вам необходимо приобрести Криптопровайдер КриптоПро CSP и установить на все компьютеры (рабочие станции или серверы), где будет производится непосредственное подписание документов.Тестовую версию КриптоПро CSP (действительна в течение 90 дней) можно скачать с сайта КРИПТО-ПРО - http://www.cryptopro.ru/cryptopro/download/default.asp?n=1
3. Получение сертификатов ЭЦП
Инструкцию по получению сертификатов ЭЦП см. здесь
Дополнительные примечания:
- генерация ключей ЭЦП возможна только том на рабочем месте, где предварительно было установлено КриптоПро CSP
- при отсутствии необходимого для генерации ключей аппаратного обеспечения для генерации случайных чисел необходимо подключить "Биологический ДСЧ" в соответствии с документацией на КриптоПро CSP (Панель управления -> CryptoPRO CSP -> Оборудование -> Настроить ДСЧ -> Добавить «Биологический ДСЧ»)
- при генерации ключей рекомендуем сохранять ключи на флеш-карту (впоследствии вы сможете перенести их куда захотите). Для этого вам понадобится установить добавить считыватель “Все съемные диски” ( Панель управления -> CryptoPRO CSP -> Оборудование -> Настроить считыватели -> ….).
При необходимости возможна так же генерация временных сертификатов ЭЦП для проведения тестирования разрабатываемого Вами механизма создания ЭЦП для Ваших информационных систем.
4. Внешние приложения для подписи электронных документов
Ниже описаны те программные решения, которые были найдены и опробованы нами в рамках разработки приемной части электронного обмена с использованием ЭЦП.
Мы не настаиваем на использовании именно этого программного обеспечения, если вы сможете найти более дешевые(или бесплатные)/удобные/доступные альтернативы – можно попробовать использовать их.4.1 Интерактивная утилита
Для создания и проверки подписанных ЭЦП документов в интерактивном режиме (при участии пользователя) можно воспользоваться программой КриптоАРМ https://cryptoarm.ru/shop/cryptoarm-gost.4.2 Консольная утилита (приложение командной строки)
Домашняя страничка утилиты: http://www.cryptopro.ru/cryptopro/products/cryptcp/default.htm
Краткое описание использования:1. Регистрация утилиты Вводим тестовый серийный номер. cryptcp.exe -sn P020G-Q0010-A5000-01UXA-XUFFD 2. Подпись документа Подписываем файл coreor.edi, результат сохраняем в coreor.edi.p7s, сертификат берем из файла ./sergey.cer cryptcp.exe -sign -f ./sergey.cer -der coreor.edi coreor.edi.p7s 3. Проверка подписи. cryptcp.exe -verify coreor.edi.p7s
5. Примеры программной реализации
5.1 Visual Basic
Одним из вариантов является создание подписи с использованием COM технологии, например из Visual Basic.
Для реализации этого подхода потребуется библиотека CAPICOM (распространяется компанией Microsoft бесплатно)
Вместе с данной библиотекой поставляется достаточно обширный набор примеров. Основная проблема при работе с CAPICOM связа с тем, что он не может корректно обработать бинарные данные (не Unicode строки) нечетной длины. Про данную проблему и методы ее решения можно детально почитать тут:
http://www.cryptopro.ru/cryptopro/products/csp/-faq.htm#11
http://www.codeproject.com/KB/security/CapicomUTF8.aspx?display=PrintВ случае отправки сообщений (EDIFACT и XML) для нашей системы это проблема может быть просто решена путем добавления пробела в конец файла для получения документа четной длины.
Вот пример подписи на Visual Basic:Private Sub sign(ByVal SrcFile As String, ByVal DestFile As String) ' Читаем исходный файл Dim inputData As Byte() = My.Computer.FileSystem.ReadAllBytes(SrcFile) ' Если файл сдоержит нечетное кол-во байт - нас ожидают проблемы. ' дополняем прочитанный документ пробелом If ((inputData.Length Mod 2) = 1) Then System.Array.Resize(inputData, inputData.Length + 1) inputData(inputData.Length - 1) = 32 ' Space character End If ' Выбираем сертификат для подписи, искать будем ' в личный сертификатах текущего пользователя системы Dim Store As CAPICOM.Store = New CAPICOM.Store Store.Open(CAPICOM.CAPICOM_STORE_LOCATION.CAPICOM_CURRENT_USER_STORE, "My", CAPICOM.CAPICOM_STORE_OPEN_MODE.CAPICOM_STORE_OPEN_READ_ONLY) Dim Certificates As CAPICOM.Certificates = Store.Certificates.Find (CAPICOM.CAPICOM_CERTIFICATE_FIND_TYPE.CAPICOM_CERTIFICATE_FIND_KEY_USAGE, CAPICOM.CAPICOM_KEY_USAGE.CAPICOM_DIGITAL_SIGNATURE_KEY_USAGE) If (Certificates.Count = 0) Then MessageBox.Show("Нет сертификатов для подписи") Return End If Dim SelectedCerts As CAPICOM.Certificates ' Показываем пользователю диалог для выбора сертификата для подписи Try SelectedCerts = Certificates.Select("Выбор сертификата", "Выберите сертификат для создания подписи") Catch MessageBox.Show("Нет сертификатов для подписи") Return End Try ' Сертификат, при помощи которого будет производиться подписание Dim Signer As CAPICOM.Signer = New CAPICOM.Signer Signer.Certificate = SelectedCerts.Item(1) ' Начинаем подписывать Dim SignedData As CAPICOM.SignedData = New CAPICOM.SignedData ' Устанавливаем данные Dim utils As CAPICOM.Utilities = New CAPICOM.Utilities Dim inputString As String = utils.ByteArrayToBinaryString(inputData) SignedData.Content = inputString ' Собственно подпись. Чтобы не наступить на грабли с нечетным кол-вом байт ' Требуем выдачу сообщения в виде строки в Base64 виде Dim outputData = SignedData.Sign(Signer, False, CAPICOM.CAPICOM_ENCODING_TYPE.CAPICOM_ENCODE_BASE64) ' Декодируем Base64 методом, который ничего не потеряет. Dim result() As Byte result = System.Convert.FromBase64String(outputData) ' Сохраняем результат в файл My.Computer.FileSystem.WriteAllBytes(DestFile, result, False) MessageBox.Show("Message Signed") End Sub
Проект полностью можно скачать здесь.