AS2 端口

Version 24.1.8896


AS2 端口


AS2 端口支持通过安全可靠的 AS2 协议发送和接收消息。

概述

有两个地方需进行 AS2 信息配置。AS2 个人设置部分应配置有本地 AS2 ID,证书以及在所有 AS2 连接中其它的全局信息。然后,每个 AS2 端口可以配置单个特定交易伙伴的连接设置。当输入文件由该 AS2 端口处理时,将打包并发送到指定的交易伙伴。

当知行之桥通过 AS2 接收文件时,将尝试将文件路由到特定的 AS2 端口。该应用程序使用 AS2 消息中的 AS2 ID 来确定应接收该文件的 AS2 端口。将文件路由到 AS2 端口时,该文件将放置在端口的 Receive 文件夹下,或传递到工作流中的下一个连接的端口。

AS2 端口支持所有使 AS2 成为流行协议的安全性和可靠性机制。可以在下面找到 AS2 协议交换的说明用于 AS2 安全的证书的说明

视频资源

观看此短视频,了解如何快速设置 AS2 端口。 这是由三部分组成的视频系列的第一部分,涵盖端到端 B2B 集成的每个步骤:托管文件传输(以 AS2 为例)、后端集成以及 EDI 翻译和映射。 该系列其他部分的链接如下。


配置

必须先配置 AS2 配置文件,然后各个 AS2 端口才能建立连接。

AS2 配置

个人 ID

用于标识本地配置文件的设置。

  • AS2 ID AS2 身份标识。知行之桥发送的消息将此值作为 “AS2-From” 消息头,传入消息必须将此值设置为 “AS2-To” 头才能成功接收。AS2 ID 区分大小写。

个人证书

与解密和签名私钥证书相关的设置。

  • 私钥证书 用来解密传入消息和签名发出消息的证书。该证书永远不与任何外部人员共享。单击创建证书按钮以生成一个新的自签名证书,还将生成具有相同文件名和 “.cer” 扩展名的相应公钥。该证书可以在 AS2 中使用。
  • 证书密码 访问私钥证书所需的密码。
  • 延期私钥证书 如果使用“私钥证书”进行的解密失败,则可以使用此私钥证书来解密收到的消息。仅当更换证书时,接收到的消息需要使用新证书或者旧证书互相过渡的时候,才应使用此设置。请注意,备用证书永远不会用于对发出消息进行签名,这在发送给仍使用旧证书的交易伙伴时可能会导致签名验证问题。
  • 延期私钥证书密码 访问延期私钥证书所需的密码。

应用 URLs

与从公共网站访问知行之桥有关的设置和显示值。

  • 异步 MDN URL 知行之桥用来侦听异步 MDN 响应的 URL。该值是根据公开URL和默认的 MDN 接口 ReceiveMDN.rsb 自动生成的。该接口很少需要修改。
  • 接收 URL 知行之桥用来侦听接收 AS2 消息的 URL。该 URL 应该被提供给所有交易伙伴。
  • 公开 AS2 个人设置 如果启用,将公开一个接口,交易伙伴可以在该接口上查看 AS2 配置详细信息,包括 ID,URL,算法和证书。
  • 公开 URL 交易伙伴可以查看 AS2 详细配置信息的接口。可以将该 URL 给交易伙伴,以简化 AS2 详细信息的交换程序。
  • 公钥证书 要在公共配置页面上发布的公钥证书。应将其设置为交易伙伴在将 AS2 消息发送到知行之桥时应使用的加密证书。该证书的名称应与私钥证书相同,但扩展名为 “.cer”。

特殊设置

特殊设置 适用于特定用例。

  • 其他设置 允许在以分号分隔的列表中配置隐藏的端口设置,例如setting1=value1;setting2=value2。 正常的端口用例和功能不需要使用这些设置。

端口配置

配置 AS2 个人信息后,可以在工作流页面中创建 AS2 端口,并为特定的交易伙伴进行配置。

设置

交易伙伴信息

用于标识和连接到特定 AS2 交易伙伴的设置。

  • 端口 Id 端口的静态、唯一标识符。
  • 端口类型 显示端口类型及其用途的描述。
  • 端口描述 一个可选字段,用于提供端口及其在流中的角色的自由格式描述。
  • AS2 ID 目标交易伙伴专用的 AS2 ID。此值包含在发出消息的 AS2 头部,并且还用于将传入的 AS2 消息路由到适当的 AS2 端口。
  • 交易伙伴 URL 交易伙伴的公共接口,通过此接口发送 AS2 消息。

连接信息

与指定交易伙伴的连接参数有关的设置。

  • 消息发送安全性 是否签名/加密发出的 AS2 消息。强烈建议签名和加密。
  • 消息接收安全性 是否要求收到的 AS2 消息存在签名和加密。如果收到的消息没有必需的安全性参数,将引发错误。
  • 压缩 是否压缩发出的消息。
  • 连接超时时长 端口在引发超时错误之前将等待连接响应的时长。
  • 加密算法 如果需要消息加密,则使用哪种加密算法。

MDN 回执

发送 AS2 消息时与请求的MDN相关的设置。

  • 请求 MDN 回执 是否要求对传出的 AS2 消息响应中返回 MDN 回执。强烈建议请求 MDN 回执。
  • 安全性 接收的 MDN 是否应包括签名块,以验证消息的完整性和接收者的身份。强烈建议启用 MDN 安全性。
  • 传输 MDN 是作为对传出的 AS2 消息的直接返回响应(同步),还是稍后使用单独连接返回(异步)。除非 AS2 消息的数据非常大(通常为 50MB),在这种情况下处理消息并传递同步MDN可能会增加连接超时时间,否则其它情况建议使用同步 MDN。

交易伙伴证书

与交易伙伴提供的公钥证书有关的设置。

  • 加密证书 发送消息时用于 AS2 加密的公钥证书。该证书必须与交易伙伴的私钥证书配对,并且在共享 AS2 配置详细信息时,交易伙伴应提供此公钥证书。
  • TLS 服务器证书 用于验证 TLS/SSL 服务器身份的公钥证书。仅在交易伙伴的 AS2 系统需要 HTTPS(而不是 HTTP )时才需要。如果交易伙伴未提供 TLS/SSL 服务器证书,则可以留空白以允许使用底层 OS/JVM 执行证书验证,也可以设置为 Any Certificate,无条件信任目标服务器的身份。

公开信息

AS2 配置的详细信息发布在交易伙伴可以访问的公共接口上。该接口是在 个人设置 页面中配置的。

自动化

自动化设置

与端口自动处理文件有关的设置。

  • 发送 到达端口的文件是否将自动作为 AS2 消息发送。
  • 重试间隔 重试发送失败消息之前的等待时间。当服务器未响应,或者回复否定响应,表明未收到文件时,将触发重试。
  • 最大重试次数 端口处理输入文件的最大次数。是否成功基于服务器相应和回执的验证(如需要回执)。如果设置为 0,那么端口将无限次尝试处理失败文件。
  • 重发间隔 重新发送未收到异步 MDN 回执之前的等待时间。服务器收到文件,但是在预期的时间范围内未回复异步 MDN 接收情况,就会触发重新发送。
  • 最大重发尝试次数(异步) 如果需要异步回执时,端口处理输入文件的最大次数。是否成功基于服务器在正确相应后异步回执是否在重发间隔内返回(如果服务器没有正确响应,那么最大重试次数会被使用)。如果设置为 0,那么端口将无限次尝试处理失败文件。

性能

与端口资源分配相关的设置。

  • 最大线程数 从线程池中消耗用于处理此端口上的文件的最大工作线程数。 如果设置,这将覆盖 设置 > 自动化 页面上的默认设置。
  • 最大文件数 分配给端口的每个线程发送的最大文件数。 如果设置,这将覆盖 设置 > 自动化 页面上的默认设置。

通知

与配置警报和服务等级协议 (SLA) 相关的设置。

端口邮件设置

在执行 SLA 之前,需要设置电子邮件警报以获取通知。 单击 配置通知 将打开一个新的浏览器窗口,转到 系统设置,可以在其中设置系统范围的警报。 有关详细信息,请参阅通知

服务等级协议 (SLA) 配置

SLA 能够配置期望工作流中的端口发送或接收的数量,并设置期望满足该数量的时间范围。 知行之桥在不满足 SLA 时发送电子邮件警告用户,并将 SLA 标记为 有风险,这意味着如果很快不满足 SLA,则会将其标记为 已违反。 这使用户有机会介入并确定未满足 SLA 的原因,并采取适当的措施。 如果在风险时间段结束时仍未满足 SLA,则将 SLA 标记为违反,并再次通知用户。

要定义 SLA,请单击 添加预期数量条件

  • 如果端口具有单独的发送和接收操作,请使用单选按钮指定 SLA 所属的方向。
  • 期待至少 设置为期望处理的最小交易数量(交易量),然后使用 字段指定时间范围。
  • 默认情况下,SLA 每天都有效。 要更改此设置,请取消选中每日,然后选中想要的一周中的几天的框。
  • 使用 将状态设置为“有风险” 来指示何时应将 SLA 标记为存在风险。
  • 默认情况下,在违反 SLA 之前不会发送通知。 要更改此设置,请选中 发送“有风险”通知

以下示例显示为预计周一至周五每天接收 1000 个文件的端口配置的 SLA。 如果尚未收到 1000 个文件,则会在该时间段结束前 1 小时发送风险通知。

高级设置

支持超大文件(VLM)

用于支持发送大型 AS2 消息的设置。

  • 流 -(HTTP分块传输编码) 发送消息时是否使用 HTTP 分块传输编码。这允许应用程序按顺序发送消息块,以避免连接超时。请注意,并非所有的 AS2 系统都支持这种方式的传输。
  • 断点续传(AS2 Restart) 配置此选项允许应用程序继续传输发送中断的文件,这对于发送大文件很有用。请注意,交易伙伴可能不支持此功能。

注意:并非所有 AS2 系统都支持此功能。

可靠性

与 AS2 协议的可靠性功能有关的设置。

  • AS2 可靠性 重新发送文件时是否重用 AS2 消息 ID。这有助于防止同一文件在接收方进行二次处理。
  • AS2 可靠性间隔 应用程序记住已接收文件的天数,即使这些文件已从“输出”选项卡中删除。 如果将值设置为 0,则应用程序永远不会清除接收到的文件列表。

首选个人设置

该 AS2 端口的设置将覆盖的 个人设置 页面中的 AS2 配置。设置备用本地配置文件可以为某些交易伙伴使用不同的本地证书和 ID。

  • 本地 AS2 ID AS2 身份标识符。此配置将覆盖 个人设置 部分中 AS2 ID
  • 私钥证书 用来解密传入消息和签名发出消息的证书。此设置将覆盖 个人设置 部分中的私钥证书
  • 证书密码 访问本地私钥证书所需的密码。

TLS 客户端认证

需要 TLS 双向认证时,客户端认证有关的设置。

  • 使用“个人设置”界面设置 是否使用与 个人设置 页中配置的相同私钥证书作为 TLS 证书进行客户端身份认证。
  • 私钥证书 只用于 TLS 客户端身份验证的证书。仅适用于未使用与 个人设置 页中相同的私钥证书的情况。
  • 证书密码 访问 TLS 客户端证书所需的密码。

HTTP 认证

与 HTTP 客户端身份认证相关的设置。

  • HTTP 认证 是否启用客户端 HTTP 身份认证。
  • HTTP 认证类型 是否以加密格式(摘要)或纯文本(基本)提供 HTTP 身份认证凭据。仅当连接是 HTTPS 连接而不是 HTTP 时,才应使用基本身份认证。
  • 用户 HTTP客户端身份验证的用户。
  • 密码 HTTP客户端身份验证的密码。

自定义头部

一组任意的包含在发出消息中的自定义头部。

代理设置

这些是一组设置,用于识别和验证代理(AS2 连接应通过该代理进行路由)。 默认情况下,此部分使用设置页面上的全局设置。 清除该复选框可提供特定于的端口的设置。

  • 代理类型 基于代理的防火墙使用的协议。
  • 代理主机 基于代理的防火墙的名称或 IP 地址。
  • 代理端口 基于代理的防火墙的 TCP 端口。
  • 代理用户 用于通过基于代理的防火墙进行身份验证的用户名。
  • 代理密码 用于对基于代理的防火墙进行身份验证的密码。
  • 身份验证方案 保留默认值 None 或选择以下身份验证方案之一:BasicDigestProprietaryNTLM

高级设置

先前类别中未包含的设置。

  • 异步 MDN 超时时长 返回异步 MDN 时要等待的 HTTP 响应超时时间,以秒为单位。 默认情况下,此值设置为 60 秒。
  • 文件重复操作 当接收到 AS2 消息并带有以前接收过的文件名时,端口的行为方式。如果设置为 “Warning”,则端口将处理文件,但在 MDN 中返回警告。如果设置为 “Failure”,则端口将不接受文件并在 MDN 中返回错误。端口将记在文件重复间隔(分钟)一段时间内接收到的文件名。
  • 文件重复间隔(分钟) 在时长内发送文件名相同的文件(以分钟为单位)将被视为重复。换句话说,端口将记住已接收到文件名的时长。如果设置为 0,文件名将一直被储存到服务器重启为止。
  • 扩展名映射 一组名称-值对,将文件扩展名映射到所需的 HTTP Content-Type 消息头值。默认情况下,应用程序会将以下文件扩展名映射到内容类型中:
    .xml -> application/xml
    .edi or .x12 -> application/edi-x12
    .edifact -> application/edifact.
    所有其它文件扩展名均以 application/octet-stream 内容类型发送。要添加或覆盖映射,此处应设置为扩展名=内容类型语法的逗号分隔列表 (e.g. .txt=text/plain,.edi=application/edifact)。
  • HTTP 标题 包含在待发出的 AS2 消息中的 HTTP 主题头部。此头部未在 AS2 协议中使用,但是可以将其用于其它业务逻辑处理的解决方案。
  • 本地文件名格式 用于为端口输出的消息分配文件名的方案。 可以在文件名中动态使用宏来包含标识符和时间戳等信息。 有关详细信息,请参阅
  • 消息标识(Message ID) 提供一个值来替换发出消息上的 AS2 消息 Id 后缀(@ 之后的部分)。 例如,“AS2_Test-20231206-091640691-IcJq@MyValue”。
  • 解析 FDA 扩展名 是否解析发出的文件名,在 AS2 消息中包括特定的 FDA 头部。如果启用,则发送目录中的文件应包含以 FDA 中心和 FDA 提交类型作为文件名的部分,并用句点分隔(例如 CDRH.eMDR.myfile.txt)。应用程序将自动将这些文件名前缀转换为FDA要求的头部。
  • 交易伙伴签名证书 如果交易伙伴使用独立的私钥证书来签名消息和解密消息,则此处应设置为与伙伴的签名证书相对应的公钥证书。交易伙伴应提供此公钥证书。
  • 延迟处理 放置在输入文件夹中的文件的处理延迟的时间量(以秒为单位)。 这是一个遗留设置。 最佳实践是使用 File 端口 来管理本地文件系统,而不是此设置。
  • 签名算法 对发出消息签名时使用的算法。相应的 MDN 回执将请求相同的算法。
  • 启用 TLS 建立传出连接时支持的TLS/SSL协议列表。强烈建议仅使用 TLS 协议。一些过时的操作系统不支持 TLS 1.2。
  • 临时接收目录 如果已设置,则应用程序将在接收到文件时将接收到的文件写入临时目录,然后将完成的文件移动到接收目录。这样可以确保即使在接收非常大的文件时,部分文件也不会出现在 Receive 目录中。
  • HTTP 头 要包含 HTTP 消息的头作为下载消息的元数据,请以逗号分隔列表的形式提供消息头。

消息

消息设置 确定端口如何搜索消息并在处理后管理它们。 可以将消息保存到你的 已发送 文件夹,或者可以根据 已发送 文件夹方案将它们保存,如下所述。

  • 保存至 Sent 文件夹 选中此选项可将端口处理的文件复制到端口的已发送文件夹中。
  • 已发送文件夹方案 端口根据选定的时间间隔对已发送文件夹中的文件进行分组。例如,选项每周(Weekly)指示端口每周创建一个新的子文件夹,并将本周发送的所有文件存储在该文件夹中。空白设置告诉端口将所有文件直接保存在“Sent”文件夹中。对于处理许多事务的端口,使用子文件夹可以帮助保持文件有序并提高性能。

日志

管理日志的创建和存储的设置。

  • 日志级别 端口生成的日志的详细程度。 当请求支持时,请将其设置为 Debug
  • 日志子文件夹方案 指端口根据选定的时间间隔对日志文件夹中的文件进行分组。 例如,Weekly 选项表示端口每周创建一个新子文件夹并将该周的所有日志存储在该文件夹中。 空白设置告诉端口将所有日志直接保存在 Logs 文件夹中。 对于处理大量事务的端口,使用子文件夹有助于保持日志井井有条并提高性能。
  • 日志消息 选中此项可使已处理文件的日志条目包含文件本身的副本。 如果禁用此功能,可能无法从 输入输出 选项卡下载文件的副本。

特殊设置

特殊设置 适用于特定用例。

  • 其他设置 允许在以分号分隔的列表中配置隐藏的端口设置,例如setting1=value1;setting2=value2。 正常的端口用例和功能不需要使用这些设置。

建立连接

交易伙伴必须共享配置新的 AS2 端口时所需的一些连接详细信息。这些详细信息至少应包括:

  • AS2 ID
  • 交易伙伴 URL
  • 交易伙伴证书

AS2 ID

交易伙伴通过其 AS2 ID 在 AS2 交易中标识自己。发送发出请求时,在请求的消息头中使用 AS2 ID 指示接收者。

AS2 自检时,标识符应设置为与 个人设置 部分中的 AS2 ID相同的值。

注意:此值区分大小写。

交易伙伴 URL

交易伙伴 URL 是交易伙伴接收 AS2 传输的接口。发出的 AS2 消息应该发送到此目标接口,这对于每个交易伙伴而言都是唯一的。可以使用 Web 浏览器测试交易伙伴 URL,以检查是否存在网络或连接问题。

AS2 自检时,目标 URL 应该与 个人设置 页面中的接收 URL 相同。可以将 个人设置 页面中的域名替换为 “localhost”,将 AS2 交易保留在本地网络中。本地自测 URL 的示例为http://localhost:8001/pub/Receive.rsb.

如果域名未替换为 “localhost”,则 AS2 消息将路由到本地网络之外。这可用于检查网络配置设置,并确保消息可以通过任何防火墙到达知行之桥。

交易伙伴有时可能会提供多个URL:一个接收 URL 和一个用于异步 MDN 的 URL。在这种情况下,仅需要配置接收 URL(交易伙伴 URL);应用程序可以从传入的 AS2 请求中读取异步 MDN URL。

交易伙伴证书

必须为每个 AS2 端口配置目标交易伙伴的公钥证书。交易伙伴提供了加密和验证与其交换的 AS2 消息所需的证书。知行之桥接受 X.509 公钥证书(扩展名为 .cer,.der 或 .pem 的文件)。

通常,交易伙伴将提供一个证书,该证书应在加密证书字段中进行配置。

如果交易伙伴提供了多个证书,需要了解每个证书的目的。如果交易伙伴提供完整的证书链(从商业证书颁发机构获取),则仅需要配置叶子证书(链中的最后一个证书)。很少会需要单独的公钥证书来验证伙伴的数字签名。在这种情况下,请在高级设置-> 其它设置-> 交易伙伴签名证书下设置签名验证证书。

发送和接收文件

完成 AS2 配置和特定于交易伙伴的 AS2 端口配置后,可以安全地发送和接收文件。

发送文件

在 AS2 端口中,输入选项卡显示应发送到目标交易伙伴的文件。如果启用了发送自动化,则到达端口 Send 文件夹的文件将自动打包并发送。传输成功以绿色 “Sent” 状态表示,警告和错误状态以黄色和红色表示。可以通过展开已传输文件行来访问传输失败或成功的日志文件。

创建测试文件按钮可用于生成一系列简单的测试文件,发送给交易伙伴。

重发和重试

当预计交易伙伴将返回异步 MDN 时,会触发 AS2 重新发送,但在重发间隔持续时间内(默认为 60 分钟)则不会这样做。持续时间之后,应用程序尝试重新发送传输。应用程序将继续重新发送消息,直到收到 MDN 或最大重发尝试次数(异步)用完为止。

当交易伙伴的 HTTP 响应指示服务器尚未接收到传输时,即响应不是肯定的 200 OK 状态,将触发重试。这通常是网络或连接问题,是暂时的。应用程序将每隔重试间隔时长进行重试传输,直到接收到传输或最大重试次数用完为止。

接收文件

在 AS2 端口中,输出选项卡显示应用程序已接收并路由到该端口的文件(基于传入的 AS2 消息中存在的 AS2 ID)。可以展开每个文件行查看传输日志列表。

这些文件位于端口的 Receive 文件夹中。如果端口已连接到工作流中的其它端口,则文件将自动从 AS2 端口的 Receive 文件夹移至工作流中下一个端口的 Send 文件夹。

AS2 协议不允许主动从交易伙伴处获取文件。AS2 端口只能被动地等待交易伙伴发送文件。

对接收文件进行故障排除

接收 AS2 消息时发生的问题可能比发送文件时发生的问题更难追踪。发送文件时发生错误时,该错误会立即在 AS2 端口的输入选项卡和交易日志中报告。接收文件时,错误和其它调试信息可能会出现在多个位置。

知行之桥收到 AS2 消息后,它将尝试根据端口中配置的 AS2 ID(以及传入消息中存在的 AS2 ID)将该消息路由到特定的 AS2 端口。根据此路由操作是否成功,可以在三个位置检查日志记录信息:

  • 如果知行之桥可以成功路由消息,则为此交易伙伴配置的 AS2 端口的输出选项卡可以看到错误日志。
  • 如果知行之桥无法成功路由消息,则应用程序日志将具有错误日志。
  • 如果没有日志出现在 AS2 端口或应用程序日志中,则 AS2 消息没有到达知行之桥。

在最后一种情况下,在 AS2 端口或应用程序日志中都没有日志出现时,该问题很可能与网络配置有关。通常是由于防火墙的干扰而发生的,因此,需要确认交易伙伴和部署知行之桥的系统在防火墙上打开了适当的端口,并在必要时将 IP 地址列入了白名单。交易伙伴方面也可能存在简单的错误配置,例如发送到错误的接口(交易伙伴应发送到个人设置页面的 AS2 个人设置选项卡中的接收 URL)。

AS2 交换中发生了什么

由于应用方面的复杂性,AS2 可以归结为两个基本部分:通过 HTTP(一种非常灵活的客户端-服务器协议)将文档从 AS2 发送者发送到 AS2 接收者,该协议充当了万维网的骨干网络; 接收方通过向发送方提供回执来确认传输。

下图将进一步详细介绍的不同步骤。

AS2  Diagram

步骤 1: EDI 文件准备

在 AS2 交换中,可以发送任何类型的文档,从文本文件到 PDF。但是通常,大多数交易伙伴都会针对特定文件类型和实施标准。

最常见的文档类型是电子数据交换(EDI)X12 文档(.x12 或 .edi 文件)、用于管理,商业和运输的电子数据交换(EDIFACT)文档(.edifact 文件)或 XML 文件(.xml 文件)。文档准备工作在 AS2 通讯开始之前进行。

EDI(电子数据交换)是交易伙伴与遵守的标准之间的文件传输的总称,它也表示为 Internet 上的 EDI(EDIINT)。

Step 2: AS2 打包

AS2 文档已准备好发送。 这包括三种类型的文档转换:

  • 如果文档包含可压缩的数据(即不是二进制数据),则可以使用 zlib 压缩算法对文档进行压缩,以减少传输数据的大小。
  • 通常使用发送者的私钥对数据进行_签名_,以确保发送者作为文档创建者的身份(通常使用 SHA-1 签名算法)。
  • 最后,可以使用接收者的公钥对数据进行加密,这样只有贸易伙伴才能读取数据(通常使用 3DES 加密算法)。 如果数据将通过安全传输机制(例如 HTTPS)传送,则可以跳过此步骤。

S/MIME 是用于对消息/文档进行加密和签名的一组标准。它不仅包含签名和加密的功能,而且还提供了最终消息格式的标准,以便符合要求的阅读器可以轻松识别消息的结构。

Step 3: HTTP/S 可达

然后将准备好的文档通过 Internet 上的 HTTP 或 HTTPS 协议传递给交易伙伴,再传递到交易伙伴的 Web 服务器。

Step 4: AS2 拆包

文档接收者会拆包并检索EDI文档。如果数据已加密,则使用接收者的私钥对文档进行 解密。如果数据已签名,则使用发送方的公钥对文件上的签名进行 认证 ,以确保发送方的身份。如果文档已被压缩,则文档将被 解压缩 生成原始的 EDI 文档。

Step 5: EDI 处理

此时,AS2 端口将 EDI 文档传递后端业务系统进行数据处理,执行其它业务逻辑。此时将解析 EDI 文档,并且接收方甚至可以发起新的 AS2 交易,在该交易中,发送方和接收方的角色将互换。特别是对于 EDI-X12 文档,通常会向原始发送者发送 997 功能确认,以表示原始 EDI 文档已在后端业务逻辑中进行了处理。

Step 6: MDN 回复

接收者将消息传递通知(MDN)发送回发送者,在大多数情况下,使用接收者的私钥进行签名。MDN是在 AS2 交换中返回的回执,用于向发件人报告收到了什么以及是否已成功接收。

MDN 包含文件是否已成功解包的信息,以及根据接收到的有效数据计算出的消息摘要。然后,根据发件人如何请求传递 MDN,以两种方式之一将 MDN 返回给发件人。在 同步 事务中,接收者在来自接收者 Web 服务器的 HTTP 响应中返回 MDN。在 异步 事务中,HTTP回复包含一个简单的确认(200 OK),而 MDN 通过单独的连接返回(通常如果 AS2 传输的解包预计需要一段时间,会出现这种情况)。

Step 7: MDN 处理

当发送方从接收方收到 MDN 时,如果 MDN 已签名,则 MDN 签名为 已验证 。检查 MDN 的状态,查看接收方是否成功处理了事务,或者接收方是否遇到了 MDN 中报告的错误。最后,将 MDN 中报告的消息摘要与根据已发送的 EDI 数据计算出的消息摘要进行匹配。使用签名的 MDN,发送方可以验证消息的接收者是否收到了要传递的 EDI 文档的全部内容。

证书

AS2 端口同时使用私钥证书和公钥证书。

私钥证书

AS2 端口允许以 PKCS#12 格式(.pfx 文件或 .p12 文件)指定证书。私钥证书用于只有私钥持有者才能执行的两项操作:

  • 签名 数据以验证身份。
  • 解密 接收数据。

公钥证书

公钥证书由交易伙伴提供的。AS2 端口允许使用 X.509 格式(.cer 或 .der 文件)的公共密钥证书。公钥证书用于与需要私钥的操作相反的工作。这些操作包括:

  • 认证 交易伙伴创建的签名。
  • 加密 数据,以保证只有交易伙伴才能解密。

在文件命名策略中使用宏可以提高组织效率和对数据的上下文理解。 通过将宏合并到文件名中,可以动态地包含相关信息,例如标识符、时间戳和消息头信息,从而为每个文件提供有价值的上下文。 这有助于确保文件名反映对组织重要的详细信息。

知行之桥 支持这些宏,它们都使用以下语法:%Macro%

描述
ConnectorID 替换为端口的 ConnectorID。
Ext 替换为端口当前正在处理的文件的文件扩展名。
Filename 替换为端口当前正在处理的文件的文件名(包括扩展名)。
FilenameNoExt 替换为端口当前正在处理的文件的文件名(不带扩展名)。
MessageId 计算端口输出的消息的 MessageId。
RegexFilename:pattern 将正则表达式模式应用于端口当前正在处理的文件的文件名。
Header:headername 替换为端口正在处理的当前消息的目标消息头 (headername) 的值。
LongDate 以常规格式计算系统的当前日期时间(例如,2024 年 1 月 24 日星期三)。
ShortDate 以 yyyy-MM-dd 格式计算系统的当前日期时间(例如 2024-01-24)。
DateFormat:format 以指定格式(format)计算系统的当前日期时间。 有关可用的日期时间格式,请参阅示例日期格式
Vault:vaultitem 计算指定保管库项目的值。
AS2MessageId 替换为端口接收到的 AS2 消息的 MessageId。
IncomingFilename 替换为端口接收的 AS2 消息中存在的文件的文件名。
AS2To 替换为端口接收到的 AS2 消息上 AS2To 消息头的值。
AS2From 替换为端口接收到的 AS2 消息上的 AS2From 消息头的值。

示例

某些宏(例如 %Ext% 和 %ShortDate%)不需要参数,但其他宏则需要。 所有带有参数的宏都使用以下语法:%Macro:argument%

以下是带有参数的宏的一些示例:

  • %Header:headername%:其中 headername 是消息上消息头的名称。
  • %Header:mycustomheader% 解析为输入消息上设置的 mycustomheader 消息头的值。
  • %Header:ponum% 解析为输入消息上设置的 ponum 消息头的值。
  • %RegexFilename:pattern%:其中“pattern”是正则表达式模式。 例如,%RegexFilename:^([\w][A-Za-z]+)% 匹配并解析为文件名中的第一个单词,并且不区分大小写(test_file.xml解析为test) 。
  • %Vault:vaultitem%:其中 vaultitemvault 中项目的名称。 例如,%Vault:companyname%解析为存储在保管库中的companyname项的值。
  • %DateFormat:format%:其中 format 是可接受的日期格式(有关详细信息,请参阅示例日期格式)。 例如,%DateFormat:yyyy-MM-dd-HH-mm-ss-fff%解析为文件上的日期和时间戳。

还可以创建更复杂的宏,如以下示例所示:

  • 将多个宏组合在一个文件名中:%DateFormat:yyyy-MM-dd-HH-mm-ss-fff%%EXT%
  • 包括宏之外的文本:MyFile_%DateFormat:yyyy-MM-dd-HH-mm-ss-fff%
  • 在宏中包含文本: %DateFormat:'DateProcessed-'yyyy-MM-dd_'TimeProcessed-'HH-mm-ss%

常见错误

以下是常见的错误,其原因和解决方案的列表。请联系 support@kasoftware.cn 。

错误:

“The receipt signature could not be verified: Message digest mismatch in signature”

造成原因

MDN 接收签名包含一个消息摘要,以确保消息的内容在传输过程中没有被更改。摘要不匹配可能表明 MDN 在被接收之前已被更改,或者在交易伙伴端未正确生成。

有时,这个错误可能是由杀毒安全软件不正确地删除了 MDN 回执的一部分引起的。ESET 的应用程序协议过滤功能存在一个已知问题,其中折叠的 MDN 消息头可能会由于删除了空格而无效。

解决方案

首先,查看交易伙伴返回的 MDN 是否存在明显问题。下载引发该错误的交易的 .mdn 文件,然后将其与问题说明一起发送至 support@kasoftware.cn 或独立进行问题排查。

与交易伙伴联系,确认他们使用的 AS2 软件也可能会有所帮助。知行之桥可与任何经过 Drummond 认证的 AS2 软件进行互操作。

错误:

“The receipt signature could not be verified: The certificate specified does not match the signature”

造成原因

MDN 回执使用私钥签名,并且此签名需使用相应的公钥进行认证。该错误表明为来自此交易伙伴的签名的公钥不正确。

解决方案

通常,用于加密的同一公钥证书也用于认证签名。在这种情况下,请检查 AS2 端口中设置->加密证书下设置的证书,以确保已为此交易伙伴正确配置了证书。

有时,交易伙伴将使用单独的证书进行签名。在这种情况下,请将高级设置->交易伙伴签名证书设置为与交易伙伴的签名密钥相匹配的公钥证书。

错误:

“The receipt signature could not be verified: Message digest was encrypted with unknown algorithm”

造成原因

在仅支持 SMIME 加密 v3.1 的较早版本的应用程序中,这是一个已知问题。如果 MDN 包含使用 SMIME 3.2 加密的消息摘要,则将引发此错误。

解决方案

知行之桥的所有当前版本,包括发布的 v2016 版本,均支持 SMIME 3.2。较旧的版本将需要进行升级才能解决此错误。

错误:

“MDN Error: Authentication failed”

或者

错误:

“MDN Error: Signature Authentication failed: Could not authenticate signer’s identity”

造成原因

该错误包含在 MDN 响应中,表明交易伙伴无法认证 AS2 请求中的签名。这表明交易双方之间一般证书不匹配。

解决方案

检查在知行之桥的 AS2 配置文件中配置的私钥证书是否正确,以及在交易伙伴端配置了匹配的公钥证书。

错误:

“MDN Error: Unexpected processing error”

造成原因

此错误由交易伙伴的系统抛出,并作为 MDN 的一部分返回,以指示处理 AS2 请求失败。此错误是一般错误,当问题与签名,加密或压缩无关时,可能会出现此错误。

解决方案

由于此错误不包括明确的调试信息,因此应与交易伙伴联系,获取有关导致故障的原因的更多信息。

错误:

“System Error: Connection refused”

造成原因

此错误是一般的网络连接问题。当尝试连接到未处于主动侦听状态的服务器时,将抛出该错误。这可能表明服务器已关闭,或者正在尝试连接到错误的 URL。

解决方案

检查目标 URL 是否正确。如果错误仍然存在,请与目标系统的服务器管理员联系以确定目标服务器是否已关闭,或者他们可以通过有关此问题了解更多信息。

错误:

“Connection failed: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond”

或者

错误:

“Connection timed out”

造成原因

此错误是一般的网络连接问题。当到服务器的连接尝试在一段时间(通常为 60 秒)内未答复时,将引发该错误。这通常是防火墙干扰服务器响应的结果,但也可能是连接参数不正确。

解决方案

检查防火墙是否阻止了服务器响应的返回。如果服务器也位于防火墙后面,请检查发送 AS2 消息的 IP 地址是否已列入防火墙白名单。

如果已排除防火墙设置,请检查目标 URL 是否正确。

错误:

“Synchronous MDN expected but not received”

造成原因

这是一个一般错误,提示对 AS2 请求的响应不是 MDN。这可能是未按预期将 AS2 请求发送到 AS2 服务器。也可能是返回了 MDN 文件,文件已损坏,也可能引发此错误,因此知行之桥无法将其识别为 MDN。

解决方案

检查目标 URL 是否正确。然后,检查防火墙是否可能从 MDN 剥离内容,从而阻止了知行之桥正确解析。如果不清楚 MDN 的问题,可以查找与失败的交易关联的 .mdn 文件,并将其与问题说明一起提供给 support@kasoftware.cn。

错误:

“Unsigned MDN received, but signed MDN requested”

造成原因

当预期从交易伙伴处收到的响应是签名的MDN,实际却收到其他内容时,将出现此错误。可以通过 AS2 端口中的 MDN回执->安全性设置来切换 MDN 中的签名状态。

解决方案

检查失败事务中 .MDN 日志文件的内容。 该文件将包含服务器回复,无论是未签名的 MDN 还是某些非 MDN 响应。 .MDN 日志文件的内容将指示接下来的步骤; 如果服务器响应根本不是 MDN,则它可能包含错误或指示发送 AS2 请求的接口根本不是 AS2 接收接口。 如果 .MDN 日志文件包含未签名的 MDN,则表明贸易伙伴的系统中存在配置问题。

错误:

“Unable to find valid certification path to requested target”

造成原因

该错误是在 Java 版本中的底层 Java 安全提供程序引发的,它标识目标 Web 服务器提供的 TLS 服务器证书不受系统信任。

解决方案

通过将交易伙伴证书-> TLS 服务器证书设置为服务器的公钥证书或 Any Certificate ,可以在 AS2 端口中覆盖信任的 TLS 服务器证书。可以通过大多数 Web 浏览器连接到 Web 服务器来获取服务器的证书。

错误:

“Key does not exist”

造成原因

当多个线程试图访问同一私钥时会引发该错误,这是 Windows CryptoAPI 中的一个已知问题。默认情况下,知行之桥使用 Windows CryptoAPI 执行安全性操作,例如加载私钥证书。

解决方案

知行之桥自带了加密操作的内部实现,可以启用此设置实现来解决 Windows CryptoAPI 的限制。打开知行之桥安装目录中的 “data” 文件夹,找到相关 AS2 端口的文件夹,然后在文本编辑器中打开 “port.cfg” 文件。为了在加载证书时启用托管安全性 API,请确保存在以下行:

CertUseManagedSecurityAPI = true

错误:

“Input string was not in a correct format”

造成原因

这表明对于 AS2 端口配置的某些方面,字符串认证失败。通常,接收 URL 设置或事件脚本中的某些字符串处理是引发错误的根源。

解决方案

检查接收 URL 是以有效的 HTTP 前缀开头的(对于纯文本连接为 “http://”,对于 TLS 连接是为 “https://”),并且不包含任何空格。

如果端口的事件中存在脚本(例如发送前,接收后),请检查是否存在执行无效的字符串处理。可以将脚本提供给 support@kasoftware.cn,知行 EDI 技术团队可以协助检查是否是脚本引起的问题。

错误:

“500 Internal Server Error”

造成原因

此 HTTP 错误表示一般的服务器端故障。成功接收到 AS2 消息,但是在处理该消息时发生了一些错误,并且没有其它调试信息可用。

解决方案

此问题相关的唯一可能是客户端设置的目标 URL。如果 URL 正确,则必须查阅服务器端日志,了解有关导致处理失败的原因的更多信息。请咨询交易伙伴,以查看这些服务器日志是否可用。

错误:

“404 Not Found”

造成原因

此 HTTP 错误表明在目标 URL 上找不到资源。这通常表示 URL 的前半部分正确(主机,端口),但 URL 的后半部分(资源路径)未被识别。

解决方案

检查目标 URL 中的资源路径是否正确。可能值得与交易伙伴确认预期的资源路径。

错误:

“401 Unauthorized”

造成原因

此 HTTP 错误表明访问指定 URL 需要授权。这可能是需要 TLS 客户端身份认证或 HTTP 身份认证。

解决方案

如果需要 TLS 客户端身份认证,请在端口配置的高级设置-> TLS客户端身份认证部分中设置适当的 TLS 证书。如果需要 HTTP 身份认证,请在端口配置的高级 -> HTTP 身份认证部分中设置正确的凭证。

要查看是否需要 HTTP 身份认证,请使用 Web 浏览器测试与目标 URL 的连接,并注意提示输入用户名/密码的提示。

错误:

“Incoming request did not match a configured trading partner profile”

造成原因

当知行之桥收到 AS2 消息时,应用程序将尝试根据配置的 AS2 ID 将消息路由到指定的 AS2 端口。此错误表明找不到与 AS2 消息中匹配的发送方和接收方的 AS2 ID的端口。

解决方案

检查在知行之桥的 AS2 个人设置中配置的 AS2 ID 和发生错误的特定交易伙伴配置的 AS2 端口。

错误:

“Error during handshake: The token supplied to the function is invalid”

造成原因

这是 WinSock 库(Windows 套接字)返回的 TLS 错误之一。通常,与需要 HTTPS 连接的服务器尝试进行 HTTP 连接时,会发生此错误。

解决方案

与交易伙伴确认 AS2 连接应通过 HTTP 还是 HTTPS 进行,并检查目标 URL 是否具有正确的前缀和端口。

错误:

“Error during handshake: the buffer supplied to a function was too small”

造成原因

这是系统 WinSock 库返回的 TLS 错误之一,并且是某些服务器操作系统上 Windows CryptoAPI 的已知错误。使用 TLS 1.2 和两个特定的密码套件时,会发生此问题:

TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 RLS_DHE_RSA_WITH_AES_256_GCM_SHA384

解决方案

知行之桥自带加密操作的内部实现,可以启用此设置实现来解决 Windows CryptoAPI 的限制。在资源管理器中打开到知行之桥安装目录 “data” 文件夹下的 “profile.cfg” 文件。在此文件的 [Application] 部分下加入以下行:

UseManagedSecurityAPI = true

作为使用托管安全提供程序的替代方法,请使用第三方系统加密工具在操作系统级别禁用两个有影响的密码。

错误:

“Error during handshake: the function requested is not supported”

造成原因

这是系统 WinSock 库返回的 TLS 错误之一,表示客户端和服务器之间支持的 SSL/TSL 版本不匹配。

解决方案

可以在 AS2 端口中的高级 -> 其它设置 -> 启用 TLS下选择要启用 TLS 版本。与交易伙伴确认支持的 TLS/SSL 版本,并选择合适的协议进行配置。