> ## Documentation Index
> Fetch the complete documentation index at: https://docs.kasoftware.com/llms.txt
> Use this file to discover all available pages before exploring further.

# AS2 端口

> 知行之桥AS2 端口的配置和使用指南。

export const CommonProxySettings = () => <>
    <p>这是一组用于识别连接所经代理并对其进行身份验证的设置。默认情况下，本节使用 <a href="/26.2/self-hosted/zh/getting-started/administration/settings/security">安全设置</a> 页面的 <a href="/26.2/self-hosted/zh/getting-started/administration/settings/proxy-settings">代理设置</a> 部分中的全局设置。清除此复选框可为您的端口提供特定的设置。</p>
    <table>
      <thead>
        <tr><th>设置</th><th>描述</th></tr>
      </thead>
      <tbody>
        <tr>
          <td><strong>代理类型</strong></td>
          <td>基于代理的防火墙使用的协议。</td>
        </tr>
        <tr>
          <td><strong>代理主机</strong></td>
          <td>基于代理的防火墙的名称或 IP 地址。</td>
        </tr>
        <tr>
          <td><strong>代理端口</strong></td>
          <td>基于代理的防火墙的 TCP 端口。</td>
        </tr>
        <tr>
          <td><strong>代理用户</strong></td>
          <td>用于通过基于代理的防火墙进行身份验证的用户名。</td>
        </tr>
        <tr>
          <td><strong>代理密码</strong></td>
          <td>用于对基于代理的防火墙进行身份验证的密码。</td>
        </tr>
        <tr>
          <td><strong>身份验证方案</strong></td>
          <td>保留默认值 <strong>None</strong> 或选择以下身份验证方案之一：<strong>Basic</strong>、<strong>Digest</strong>、<strong>Proprietary</strong> 或 <strong>NTLM</strong>。</td>
        </tr>
      </tbody>
    </table>
  </>;

export const SlasTab = ({siteName = "知行之桥"}) => <>
    <p><em>与配置服务级别协议 (SLA) 相关的设置。</em></p>
    <p>
      SLA 允许配置预期流程中端口发送或接收的数据量，并设置预期达到该数据量的时间范围。当 SLA 未达到时，{siteName} 会发送电子邮件警告用户，并将 SLA 标记为 <em>存在风险</em>，这意味着如果 SLA 未能尽快达到，则会被标记为 <em>已违反</em>。这让用户有机会介入并确定 SLA 未达到的原因，并采取适当的措施。如果在风险时间段结束时仍未达到 SLA，则会将 SLA 标记为已违反，并再次通知用户。
    </p>
    <p>
      要定义 SLA，请启用 <strong>预期数据量</strong>，然后点击 <strong>设置</strong> 选项卡。
    </p>
    <img src="/public/images/sla_empty.png" alt="SLA Empty" />
    <ul>
      <li>如果端口具有单独的发送和接收操作，请使用单选按钮指定 SLA 适用的方向。</li>
      <li>在窗口的 <strong>预计至少</strong> 部分中：
        <ul>
          <li>设置预计处理的最小事务数量（交易量）</li>
          <li>使用 <strong>每个</strong> 字段指定时间范围</li>
          <li>指示 SLA 生效的时间。如果选择 <strong>开始于</strong>，请填写日期和时间字段。</li>
          <li>勾选希望 SLA 生效的星期几对应的复选框。如有必要，请使用下拉菜单选择 <strong>每天</strong>。</li>
        </ul>
      </li>
      <li>在窗口的 <strong>将状态设置为“有风险”</strong> 部分中，指定应将 SLA 标记为有风险的时间。
        <ul>
          <li>默认情况下，只有在违反 SLA 的情况下才会发送通知。要更改此设置，请勾选 <strong>发送“有风险”通知</strong>。</li>
        </ul>
      </li>
    </ul>
    <p>
      以下示例显示了为端口配置的 SLA，该端口预计在周一至周五每天接收 1000 个文件。如果尚未收到 1000 个文件，则会在时间段结束前 1 小时发送风险通知。
    </p>
    <img src="/public/images/sla_defined.png" alt="SLA Configuration Example" />
    <Note>
      如果有必要，可以关闭 SLA 通知。这在维护窗口期间非常有用。点击导航栏上的 <strong>设置</strong>，然后跳转到 <strong>通知 &gt; 通用通知</strong>。点击平板和铅笔图标进行编辑，并取消勾选 <strong>SLA 通知</strong> 设置。
    </Note>
  </>;

export const AlertsTab = ({siteNameShort = "知行之桥"}) => <>
    <p><em>与配置通知相关的设置。</em></p>
    <p>
      在执行服务级别协议 (SLA) 之前，需要设置电子邮件通知以接收通知。默认情况下，{siteNameShort} 使用 <a href="/26.2/self-hosted/zh/getting-started/administration/settings/alerts">通知</a> 选项卡上的全局设置。要为此端口使用其他设置，请启用 <strong>覆盖全局设置</strong>。
    </p>
    <p>
      默认情况下，错误通知处于启用状态，这意味着每当出现错误时都会发送电子邮件。要关闭错误通知，请取消选中 <strong>启用</strong> 复选框。
    </p>
    <p>
      输入 <strong>主题</strong>（必填），然后（可选）输入以逗号分隔的 <strong>收件人</strong> 电子邮件列表。
    </p>
  </>;

export const Logging = () => <>
    <p><em>用于管理日志创建和存储的设置。</em></p>
    <table>
      <thead>
        <tr>
          <th>设置</th>
          <th>描述</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <td><strong>日志级别</strong></td>
          <td>指定要记录在端口日志目录中的信息类型：
            <ul>
              <li><b>None</b> - 不创建任何日志。</li>
              <li><b>Error</b> - 仅当端口遇到错误时才创建日志。</li>
              <li><b>Warning</b> - 仅当端口发出警告时才创建日志。</li>
              <li><b>Info</b> - 记录工作流的一般信息，包括任何错误和警告（如果适用）。</li>
              <li><b>Debug</b> - 记录成功和失败工作流的详细调试信息。</li>
              <li><b>Trace</b> - 记录成功和失败工作流的详细跟踪信息。</li>
            </ul>
            <strong>请注意：</strong><strong>Debug</strong> 和 <strong>Trace</strong> 级别的日志可能会记录敏感信息，包括消息内容和 SSL 证书。尽管连接属性（例如密码）被屏蔽了，但在与您的组织外部共享它们之前，请查看此级别的日志以避免泄漏敏感信息。</td>
        </tr>
        <tr>
          <td><strong>日志文件夹结构</strong></td>
          <td>指示端口根据选定的时间间隔将日志文件夹中的文件分组。例如，<strong>Weekly</strong> 选项指示端口每周创建一个新的子文件夹，并将该周的所有日志存储在该文件夹中。空白设置告诉端口将所有日志直接保存在日志文件夹中。对于处理许多事务的端口，使用子文件夹有助于保持日志的有序性并提高性能。</td>
        </tr>
        <tr>
          <td><strong>保留消息副本</strong></td>
          <td>指示端口在日志目录中保存最新消息副本的切换。请注意，端口每个子文件夹只保留一个消息，并且端口在再次运行时会覆盖以前保存的消息。</td>
        </tr>
      </tbody>
    </table>
  </>;

export const Performance = () => <>
    <p><em>与端口资源分配相关的设置。</em></p>
    <table>
      <thead>
        <tr>
          <th>设置</th>
          <th>描述</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <td><strong>最大工作线程数</strong></td>
          <td>此端口上处理文件时从线程池中消耗的最大工作线程数。如果设置，则会覆盖 <a href="/26.2/self-hosted/zh/getting-started/administration/settings/advanced-settings">高级设置</a> 页面的 <a href="/26.2/self-hosted/zh/getting-started/administration/settings/performance-settings">性能设置</a> 部分的默认设置。</td>
        </tr>
        <tr>
          <td><strong>最大文件数</strong></td>
          <td>分配给端口的每个线程发送的最大文件数。如果设置，则会覆盖 <a href="/26.2/self-hosted/zh/getting-started/administration/settings/advanced-settings">高级设置</a> 页面的 <a href="/26.2/self-hosted/zh/getting-started/administration/settings/performance-settings">性能设置</a> 部分的默认设置。</td>
        </tr>
      </tbody>
    </table>
  </>;

export const siteNameShort = "知行之桥";

export const siteName = "知行之桥";

export const MiscConnector = () => <>
    <p><em>特殊设置适用于特定用例。</em></p>
    <table>
      <thead>
        <tr>
          <th>设置</th>
          <th>描述</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <td><strong>其他设置</strong></td>
          <td>允许在以分号分隔的列表中配置隐藏的端口设置，例如 <code>setting1=value1;setting2=value2</code>。正常的端口用例和功能不需要使用这些设置。</td>
        </tr>
      </tbody>
    </table>
  </>;

export const Message = () => <>
    <p><em>消息设置确定端口如何搜索消息并在处理后管理它们。</em></p>
    <table>
      <thead>
        <tr><th>设置</th><th>描述</th></tr>
      </thead>
      <tbody>
        
          <tr>
            <td><strong>保存到已发送文件夹</strong></td>
            <td>选中此项可将端口处理的文件复制到该端口的“已发送”文件夹中。</td>
          </tr>
        
        <tr>
          <td><strong>已发送文件夹方案</strong></td>
          <td>端口根据选定的时间间隔对 <strong>已发送</strong> 文件夹中的文件进行分组。例如，<strong>Weekly</strong> 选项指示端口每周创建一个新的子文件夹，并将本周发送的所有文件存储在该文件夹中。空白设置告诉端口将所有文件直接保存在 <strong>已发送</strong> 文件夹中。对于处理许多事务的端口，使用子文件夹可以帮助保持文件有序并提高性能。</td>
        </tr>
      </tbody>
    </table>
  </>;

export const MacrosExamples = ({extraMacros = []}) => <>
    <p>
      某些宏（例如 %Ext% 和 %ShortDate%）不需要参数，但其他宏则需要。所有带有参数的宏都使用以下语法：<code>%Macro:argument%</code>
    </p>

    <p>以下是带有参数的宏的一些示例：</p>

    <ul>
      <li>%Header:headername%：其中 <code>headername</code> 是消息上消息头的名称。</li>
      <li>%Header:mycustomheader% 解析为输入消息上设置的 <code>mycustomheader</code> 消息头的值。</li>
      <li>%Header:ponum% 解析为输入消息上设置的 <code>ponum</code> 消息头的值。</li>
      <li>%RegexFilename:pattern%：其中 <code>pattern</code> 是正则表达式模式。例如，<code>%RegexFilename:^([\w][A-Za-z]+)%</code> 匹配并解析为文件名中的第一个单词，并且不区分大小写（<code>test_file.xml</code> 解析为 <code>test</code>）。</li>
      <li>%Vault:vaultitem%：其中 <code>vaultitem</code> 是 <a href="/26.2/self-hosted/zh/getting-started/administration/settings/global-settings-vault">vault</a> 中项目的名称。例如，<code>%Vault:companyname%</code> 解析为存储在保管库中的 <code>companyname</code> 项的值。</li>
      <li>%DateFormat:format%：其中 <code>format</code> 是可接受的日期格式（有关详细信息，请参阅 <a href="/26.2/self-hosted/zh/scripting/value-formatters/date-formatters#sample-date-formats">示例日期格式</a>）。例如，<code>%DateFormat:yyyy-MM-dd-HH-mm-ss-fff%</code> 解析为文件上的日期和时间戳。</li>
      {extraMacros.filter(item => item.example).map(item => <li key={`ex-${item.name}`}>{item.example}</li>)}
    </ul>

    <p>还可以创建更复杂的宏，如以下示例所示：</p>

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

export const MacrosTable = ({siteName = "知行之桥", extraMacros = []}) => <>
    <p>
      在文件命名策略中使用宏可以提高组织效率和对数据的上下文理解。通过将宏合并到文件名中，可以动态地包含相关信息，例如标识符、时间戳和消息头信息，从而为每个文件提供有价值的上下文。这有助于确保文件名反映对组织重要的详细信息。
    </p>

    <p>{siteName} 支持这些宏，它们都使用以下语法：<code>%Macro%</code>。</p>

    <table>
      <thead>
        <tr><th>宏</th><th>描述</th></tr>
      </thead>
      <tbody>
        <tr><td>ConnectorID</td><td>替换为端口的 ConnectorID。</td></tr>
        <tr><td>Ext</td><td>替换为端口当前正在处理的文件的文件扩展名。</td></tr>
        <tr><td>Filename</td><td>替换为端口当前正在处理的文件的文件名（包括扩展名）。</td></tr>
        <tr><td>FilenameNoExt</td><td>替换为端口当前正在处理的文件的文件名（不带扩展名）。</td></tr>
        <tr><td>MessageId</td><td>计算端口输出的消息的 MessageId。</td></tr>
        <tr><td>RegexFilename:<em>pattern</em></td><td>将正则表达式模式应用于端口当前正在处理的文件的文件名。</td></tr>
        <tr><td>Header:<em>headername</em></td><td>替换为端口正在处理的当前消息的目标消息头（<code>headername</code>）的值。</td></tr>
        <tr><td>LongDate</td><td>以常规格式计算系统的当前日期时间（例如，2024 年 1 月 24 日星期三）。</td></tr>
        <tr><td>ShortDate</td><td>以 yyyy-MM-dd 格式计算系统的当前日期时间（例如 2024-01-24）。</td></tr>
        <tr><td>DateFormat:<em>format</em></td><td>以指定格式（<code>format</code>）计算系统的当前日期时间。有关可用的日期时间格式，请参阅 <a href="/26.2/self-hosted/zh/scripting/value-formatters/date-formatters#date-formats-with-literal-characters">示例日期格式</a>。</td></tr>
        <tr><td>Vault:<em>vaultitem</em></td><td>计算指定保管库项目的值。</td></tr>
        {extraMacros.map(item => <tr key={item.name}>
            <td>{item.name}</td>
            <td>{item.description}</td>
          </tr>)}
      </tbody>
    </table>
  </>;

export const extraMacros = [{
  name: "AS2MessageId",
  description: "替换为端口接收到的 AS2 消息的 MessageId。"
}, {
  name: "IncomingFilename",
  description: "替换为端口接收的 AS2 消息中存在的文件的文件名。"
}, {
  name: "AS2To",
  description: "替换为端口接收到的 AS2 消息上 AS2To 消息头的值。"
}, {
  name: "AS2From",
  description: "替换为端口接收到的 AS2 消息上 AS2From 消息头的值。"
}];

AS2 端口支持使用 Applicability Statement 2 (AS2) 协议发送和接收消息。

## 核心功能

* 安全可靠的 B2B 文档交换
* 全面的安全支持，包括签名、加密和压缩
* 同步和异步 MDN 回执处理，具有自动重试和重发功能
* 支持超大消息，具备流式传输和断点续传能力
* 面向交易伙伴关系的全面证书管理
* AS2 可靠性和 FDA 扩展解析等高级功能
* 已获得 [Drummond Group](https://www.drummondgroup.com/certified-products/b2b-interoperability/) 认证

## 概述

AS2 连接需要在两个位置进行配置。首先在 AS2 [配置文件](../getting-started/administration/profiles)页面配置本地 AS2 标识符、私钥证书以及适用于所有 AS2 连接的其他全局信息。然后，为单个交易伙伴在各个 AS2 端口中配置专用连接设置。当输入文件由 AS2 端口处理时，它会被打包并发送到指定的交易伙伴。

当 {siteNameShort} 通过 AS2 接收文件时，会尝试将文件路由到特定的 AS2 端口。应用程序使用 AS2 消息中的 AS2 标识符确定应由哪个 AS2 端口接收该文件。文件路由到 AS2 端口后，会放入端口的**交易** Tab，或传递到工作流中的下一个端口。

AS2 端口支持使 AS2 成为常用协议的所有安全性和可靠性机制。更多信息，请参阅 [AS2 协议交换说明](#as2-交换中发生了什么)和[用于 AS2 安全性的证书说明](#证书)。

### 视频资源

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

<iframe width="560" height="315" src="//player.bilibili.com/player.html?aid=955541298&bvid=BV16W4y1Z7GB&cid=1185848690&page=1" scrolling="no" frameBorder="0" allowFullScreen />

<br />

* 第二部分：[{siteName} 数据库端口操作指南](https://www.bilibili.com/video/BV1aM4y1x7uq/?share_source=copy_web\&vd_source=29fa5020de01e134fbc75a4f560ea8f6)
* 第三部分：[{siteName} EDI 工作流操作指南](https://www.bilibili.com/video/BV1zV4y1h7Le/?share_source=copy_web\&vd_source=29fa5020de01e134fbc75a4f560ea8f6)

## 配置文件配置

必须先配置 AS2 配置文件，才能与各个 AS2 端口建立连接。单击导航栏上的**配置文件**。

### AS2 配置文件 Tab

#### 个人 ID

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

| 设置          | 说明                                                                                             |
| ----------- | ---------------------------------------------------------------------------------------------- |
| **AS2 标识符** | 你的 AS2 标识符。{siteNameShort} 发送的消息会将此值作为 `AS2-From` 头。传入消息必须将此值作为 `AS2-To` 头才能成功接收。AS2 标识符区分大小写。 |

#### 个人证书

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

| 设置         | 说明                                                                                                                        |
| ---------- | ------------------------------------------------------------------------------------------------------------------------- |
| **私钥证书**   | 用于解密传入消息并签名传出消息的证书。切勿与外部方共享此证书。单击**创建证书**按钮生成可用于 AS2 交易的自签名证书；同时还会生成一个同名、扩展名为 `.cer` 的对应公钥证书。                             |
| **证书密码**   | 访问**私钥证书**所需的密码。                                                                                                          |
| **轮转私钥证书** | 一个辅助私钥证书；如果使用**私钥证书**解密失败，可用它解密传入消息。仅在更换证书且需要重叠期以接收使用旧证书或新证书加密的传入消息时，才使用此设置。轮转证书绝不会用于签名传出消息；发送给仍在使用旧证书的交易伙伴时，这可能导致签名验证问题。 |
| **轮转证书密码** | 访问**轮转私钥证书**所需的密码。                                                                                                        |

#### 应用程序 URL

*与从公网访问 {siteNameShort} 相关的设置和显示值。*

| 设置                | 说明                                                                                                |
| ----------------- | ------------------------------------------------------------------------------------------------- |
| **异步 MDN URL**    | {siteNameShort} 侦听异步消息传递通知（MDN）响应的 URL。此值根据**基础 URL** 和默认 MDN 端点 `ReceiveMDN.rsb` 自动生成。此端点很少需要修改。 |
| **接收 URL**        | {siteNameShort} 侦听传入 AS2 消息的 URL。请与所有交易伙伴共享此 URL。                                                 |
| **发布 AS2 配置文件设置** | 如果启用，将公开一个端点，交易伙伴可在其中查看 AS2 配置详情，包括标识符、URL、算法和证书。                                                 |
| **公共 URL**        | 交易伙伴可在其中查看 AS2 配置详情的端点。可以与交易伙伴共享此 URL，以简化 AS2 详细信息的沟通。                                            |
| **公钥证书**          | 要在公共配置页面上共享的公钥证书。将其设置为交易伙伴向 {siteNameShort} 发送 AS2 消息时应使用的加密证书。此证书应与**私钥证书**同名，但扩展名为 `.cer`。      |

#### 其他

<MiscConnector />

## 端口配置

配置全局 AS2 配置文件设置后，可在[工作流](../flows/flows)页面为每个交易伙伴创建并配置单独的 AS2 端口。

### 设置 Tab

#### 交易伙伴信息

*用于识别并连接到特定 AS2 交易伙伴的设置。*

| 设置          | 说明                                                              |
| ----------- | --------------------------------------------------------------- |
| **端口 ID**   | 端口的静态唯一标识符。                                                     |
| **端口类型**    | 显示端口名称及其功能说明。                                                   |
| **端口描述**    | 可选字段，用于自由描述端口及其在工作流中的作用。                                        |
| **AS2 标识符** | 目标交易伙伴专用的 AS2 标识符。此值包含在传出消息的 AS2 头中，也用于将传入 AS2 消息路由到相应的 AS2 端口。 |
| **伙伴 URL**  | 发送传出 AS2 消息的交易伙伴公共端点。                                           |

#### 连接信息

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

| 设置          | 说明                                            |
| ----------- | --------------------------------------------- |
| **消息发送安全性** | 是否签名和/或加密传出的 AS2 消息。强烈建议使用签名和加密。              |
| **消息接收安全性** | 是否要求传入的 AS2 消息包含签名和加密。如果收到的消息缺少必需的安全参数，将引发错误。 |
| **压缩**      | 是否压缩传出消息的负载。                                  |
| **连接超时时长**  | 端口在抛出超时错误之前等待连接响应的时长（秒）。                      |
| **加密算法**    | 如果需要消息加密，应使用哪种加密算法。                           |

#### MDN 回执

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

| 设置            | 说明                                                                                                              |
| ------------- | --------------------------------------------------------------------------------------------------------------- |
| **请求 MDN 回执** | 是否应返回 MDN 回执以响应传出的 AS2 消息。强烈建议请求 MDN 回执。                                                                        |
| **安全性**       | MDN 回执是否应包含签名块，以验证消息完整性和接收者身份。强烈建议使用此选项。                                                                        |
| **传输**        | MDN 是作为传出 AS2 消息的直接响应返回（同步），还是稍后通过单独连接返回（异步）。除非 AS2 消息非常大（常见阈值为 50MB），导致处理消息并传递同步 MDN 可能使连接超时时长紧张，否则建议使用同步 MDN。 |

#### 交易伙伴证书

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

| 设置            | 说明                                                                                                                                                     |
| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **加密证书**      | 发送消息时用于 AS2 加密的公钥证书。该证书必须与交易伙伴的私钥证书配对，交易伙伴在共享 AS2 配置详情时应提供此公钥证书。                                                                                       |
| **TLS 服务器证书** | 用于验证 TLS/SSL 服务器身份的公钥证书。仅当伙伴的 AS2 系统需要 HTTPS 而不是 HTTP 时才需要。如果交易伙伴未提供 TLS 服务器证书，可以将此设置留空，以允许底层 OS/JVM 执行证书验证；也可以将其设置为 `Any Certificate`，以无条件信任目标服务器的身份。 |

#### 公开配置文件

发布在公共端点上的 AS2 配置文件详情，交易伙伴可访问该端点。此端点在[配置文件](../getting-started/administration/profiles)页面中配置。

### 高级 Tab

#### 超大消息支持 (VLM)

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

| 设置           | 说明                                                   |
| ------------ | ---------------------------------------------------- |
| **流式传输**     | 发送消息时是否使用 HTTP 分块传输编码。这允许应用程序按顺序发送消息的各部分（块），以避免连接过载。 |
| **AS2 断点续传** | 是否支持恢复中断的传输。在分块流式传输大型消息时，此功能很有用。                     |

<Note>并非所有 AS2 系统都支持此功能。</Note>

#### 可靠性

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

| 设置            | 说明                                                               |
| ------------- | ---------------------------------------------------------------- |
| **AS2 可靠性**   | 重新发送文档时是否重用 AS2 Message ID。这有助于防止接收方重复处理同一文档。                    |
| **AS2 可靠性间隔** | 应用程序记住已接收文件的天数，即使这些文件已从**交易** Tab 中移除。如果设置为 0，应用程序永远不会清除已接收文件列表。 |

#### 备用本地配置文件

*此特定 AS2 端口中用于覆盖**配置文件**页面 AS2 配置的设置。设置备用本地配置文件后，可以为某些交易伙伴使用不同的本地证书和标识符。*

| 设置             | 说明                                       |
| -------------- | ---------------------------------------- |
| **本地 AS2 标识符** | 你的 AS2 标识符。覆盖“配置文件”页面上的 **AS2 标识符**。     |
| **私钥证书**       | 用于解密传入消息并签名传出消息的证书。覆盖“配置文件”页面上的**私钥证书**。 |
| **证书密码**       | 访问本地私钥证书所需的密码。                           |

#### TLS 客户端认证

*需要双向 TLS 认证时，与客户端认证相关的设置。*

| 设置           | 说明                                           |
| ------------ | -------------------------------------------- |
| **使用配置文件设置** | 是否使用“配置文件”页面上配置的**私钥证书**作为客户端认证的 TLS 证书。     |
| **私钥证书**     | TLS 客户端认证期间提供的私钥证书。仅当不使用“配置文件”页面中的同一私钥证书时适用。 |
| **证书密码**     | 访问 TLS 客户端证书所需的密码。                           |

#### HTTP 认证

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

| 设置            | 说明                                                                              |
| ------------- | ------------------------------------------------------------------------------- |
| **HTTP 认证**   | 是否使用客户端 HTTP 认证。                                                                |
| **HTTP 认证类型** | 以加密格式（Digest）还是纯文本格式（Basic）提供 HTTP 认证凭据。仅当连接为 HTTPS 连接（而不是 HTTP）时，才使用 Basic 认证。 |
| **用户**        | HTTP 客户端认证的用户凭据。                                                                |
| **密码**        | HTTP 客户端认证的密码凭据。                                                                |

#### 自定义头

一组要包含在传出消息中的自定义头。

#### 高级设置

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

| 设置              | 说明                                                                                                                                                                                                                                                                                                                         |
| --------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **异步 MDN 超时时长** | 返回异步 MDN 回执时要遵守的 HTTP 响应超时时长（秒）。默认值为 60 秒。                                                                                                                                                                                                                                                                                 |
| **重复文件操作**      | 当端口收到包含此前见过的文件名（即重复文件名）的 AS2 消息时，应如何处理。设置为 `Continue` 时，重复文件名会被重命名，但不会向交易伙伴发送警告。设置为 `Warning` 时，端口会重命名重复文件名，并在 MDN 中返回警告。设置为 `Warning - Ignore File` 时，重复文件名不会被重命名，但端口会在 MDN 中返回警告。设置为 `Failure` 时，端口不接受该文件，并在 MDN 中返回错误。端口会在**重复文件间隔**设置的时长内记住接收到的文件名。                                                                    |
| **重复文件间隔**      | 具有相同文件名的文件被视为重复的时长（分钟）。换句话说，就是端口记住特定文件名已被接收的时长。如果设置为 0，文件名将无限期存储。                                                                                                                                                                                                                                                          |
| **扩展名映射**       | 一组名称-值对，用于将文件扩展名映射到所需的 HTTP Content-Type 头值。默认情况下，应用程序会将以下文件扩展名映射到内容类型：`.xml` → `application/xml`，`.edi` 或 `.x12` → `application/edi-x12`，`.edifact` → `application/edifact`。所有其他文件扩展名均以 `application/octet-stream` 内容类型发送。要添加或覆盖映射，请使用 `extension=contenttype` 语法提供逗号分隔列表（例如 `.txt=text/plain,.edi=application/edifact`）。 |
| **HTTP 主题**     | 要包含在传出 AS2 消息中的 HTTP Subject 头。此头不在 AS2 协议中使用，但某些解决方案可将其用于额外的业务逻辑处理。                                                                                                                                                                                                                                                       |
| **本地文件命名方案**    | 为端口输出的消息分配文件名的方案。可以在文件名中动态使用宏，以包含标识符、时间戳等信息。更多信息，请参阅[宏](#宏)。                                                                                                                                                                                                                                                               |
| **消息 ID**       | 提供一个值，用于替换出站消息上 AS2 Message Id 的后缀（@ 之后的部分）。例如：`AS2_Test-20231206-091640691-IcJq@MyValue`。                                                                                                                                                                                                                                 |
| **解析 FDA 扩展**   | 是否解析传出文件名，以在 AS2 消息中包含 FDA 专用头。如果启用，**交易** Tab 上的文件应将 FDA 中心和 FDA 提交类型作为文件名的前两部分，并用句点分隔（例如 `CDRH.eMDR.myfile.txt`）。应用程序会自动将这些文件名前缀转换为相应的 FDA 必需头。                                                                                                                                                                          |
| **伙伴签名证书**      | 如果交易伙伴使用不同的私钥证书签名消息和解密消息，请将此项设置为与伙伴签名证书对应的公钥证书。交易伙伴应能够提供此公钥证书。                                                                                                                                                                                                                                                             |
| **签名算法**        | 签名传出消息时使用的算法。相应的 MDN 回执也会请求使用同一算法。                                                                                                                                                                                                                                                                                         |
| **启用的 TLS 协议**  | 建立传出连接时支持的 TLS/SSL 协议列表。最佳实践是仅使用 TLS 协议。SSL v2 和 SSL v3 被认为存在漏洞，只有在伙伴不支持更高版本时才应使用。请注意，TLS v1.3 尚未被普遍采用，如果目标服务器不支持，可能会被拒绝。                                                                                                                                                                                                  |
| **临时接收目录**      | 如果设置，应用程序会在接收文件时将其写入临时目录，然后将完成的文件移动到**交易** Tab。这可确保即使端口接收超大文件，**交易** Tab 中也不会出现部分文件。                                                                                                                                                                                                                                       |
| **HTTP 头**      | 要将 HTTP 消息中的头作为下载消息的元数据包含在内，请以逗号分隔列表提供这些头。                                                                                                                                                                                                                                                                                 |
| **本地文件命名方案**    | 为端口输出的消息分配文件名的方案。可以在文件名中动态使用宏，以包含标识符、时间戳等信息。更多信息，请参阅[宏](#宏)。                                                                                                                                                                                                                                                               |
| **处理延迟**        | 放入**交易** Tab 的文件延迟处理的时间（秒）。这是一个旧设置。最佳实践是[使用文件端口](../flows/designing-a-flow#interacting-with-the-local-file-system)来管理本地文件系统，而不是使用此设置。                                                                                                                                                                                      |

#### 代理设置

<CommonProxySettings />

#### 消息

<Message />

#### 日志

<Logging />

#### 其他

<MiscConnector />

### 自动化 Tab

#### 自动化设置

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

| 设置             | 说明                                                                                                        |
| -------------- | --------------------------------------------------------------------------------------------------------- |
| **发送**         | 到达端口的文件是否会自动作为 AS2 消息发送。                                                                                  |
| **重试间隔**       | 发送失败后重试前等待的分钟数。当服务器未响应发送尝试，或返回否定响应表示未收到文件时，将触发重试。                                                         |
| **最大尝试次数**     | 端口处理输入文件的最大次数。是否成功取决于服务器成功确认以及回执验证（同步请求回执时）。如果设置为 0，端口将无限期重试该文件。                                          |
| **重发间隔**       | 重新发送未确认消息前等待的分钟数。当服务器收到文件，但未在预期时间范围内提供异步 MDN 回执时，将触发重发。                                                   |
| **最大尝试次数（异步）** | 请求异步回执时，端口处理输入文件的最大次数。是否成功取决于服务器成功确认后，异步回执是否在**重发间隔**内返回。如果未返回成功的服务器确认，则改用**最大尝试次数**。如果设置为 0，端口将无限期重发该文件。 |

#### 性能

<Performance />

### 警报 Tab

<AlertsTab />

### SLA Tab

<SlasTab />

## 建立连接

交易伙伴必须提供配置新 AS2 端口时所需的一些连接详情。这些详情至少应包括：

* AS2 标识符
* 伙伴 URL
* 伙伴证书

### AS2 标识符

在 AS2 交易中，交易伙伴通过其 AS2 标识符进行识别。发送传出请求时，AS2 标识符用于请求头，以指示接收者。

要建立 AS2 自检，标识符应设置为与[配置文件](../getting-started/administration/profiles)页面上的 **AS2 标识符**相同的值。

<Note>此值区分大小写。</Note>

### 伙伴 URL

伙伴 URL 是交易伙伴接收 AS2 传输的端点。传出的 AS2 消息会发送到此目标端点，且每个交易伙伴都必须具有唯一端点。可以使用 Web 浏览器测试伙伴 URL，以检查网络或连接问题。

要建立 AS2 自检，目标 URL 应与[配置文件](../getting-started/administration/profiles)页面上的**接收 URL** 相同或几乎相同。可以将“配置文件”页面中的域名替换为环回地址 localhost，使 AS2 交易保留在本地网络中。本地自检 URL 示例为 `http://localhost:8001/pub/Receive.rsb`。

如果不将域名替换为 localhost，AS2 消息会被路由到本地网络之外。可以利用这一点检查网络配置设置，并确保消息能够穿过任何防火墙到达 {siteNameShort}。

交易伙伴有时可能会提供多个 URL：一个接收 URL 和一个用于异步 MDN 的 URL。在这种情况下，只需配置接收 URL（伙伴 URL）；应用程序可以从传入的 AS2 传输中读取异步 MDN URL。

### 伙伴证书

每个 AS2 端口都必须配置目标交易伙伴的公钥证书。交易伙伴会提供加密和验证与其交换的 AS2 消息所需的证书。{siteNameShort} 接受 X.509 公钥证书（扩展名为 .cer、.der 或 .pem 的文件）。

通常，交易伙伴会提供一个证书，应将其配置在**加密证书**字段中。

如果交易伙伴提供多个证书，应说明每个证书的用途。如果伙伴提供完整证书链（例如从商业证书颁发机构获取），则只需配置叶子证书（证书链中的最后一个证书）。少数情况下，可能需要单独的公钥证书来验证伙伴的数字签名。在这种情况下，请在**高级 Tab** > **高级设置** > **伙伴签名证书**中设置签名验证证书。

## 发送和接收文件

配置 AS2 配置文件和特定于伙伴的 AS2 端口后，即可安全地发送和接收文件。

### 发送文件

在 AS2 端口中，**交易** Tab 显示要发送到目标交易伙伴的文件。如果在[自动化](#自动化-tab) Tab 上启用了**发送自动化**，到达端口**交易** Tab 的文件会自动打包并发送。展开与已传输文件关联的行，即可访问所有传输的日志文件。

**创建测试文件**按钮可生成一组简单的测试文件，以发送给交易伙伴。

### 重发和重试

当预期交易伙伴返回异步 MDN，但其未在**重发间隔**时长内（默认为 60 分钟）返回时，将触发 AS2 重发。随后应用程序会尝试重新发送该传输。应用程序将继续重发消息，直到收到 MDN 或\*\*最大尝试次数（异步）\*\*用尽为止。

当交易伙伴的 HTTP 响应表明服务器未收到传输（响应不是肯定的 200 OK 状态）时，将触发重试。这可能表示网络或连接问题，且通常是暂时性的。应用程序每隔**重试间隔**分钟重试一次传输，直到传输被接收或**最大尝试次数**用尽为止。

### 接收文件

在 AS2 端口中，**交易** Tab 显示应用程序已接收并路由到该端口的文件（基于传入 AS2 消息中的 AS2 标识符）。展开每个文件行可显示该传输的可用日志列表。

这些文件可在端口的**交易** Tab 中查看。如果端口连接到工作流中的其他端口，文件会自动从 AS2 端口的**交易** Tab 移动到工作流中下一个端口的**交易** Tab。

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

### 接收文件故障排除

接收 AS2 消息时发生的问题可能比发送文件时的问题更难追踪。\_发送\_文件时发生错误，该错误会立即显示在 AS2 端口的**交易** Tab 和[活动](../getting-started/administration/activity)页面上。\_接收\_文件时，错误和其他调试信息可能会出现在多个位置。

{siteNameShort} 收到 AS2 消息后，会根据端口中配置的 **AS2 标识符**（以及传入消息中的 AS2 标识符）尝试将该消息路由到特定的 AS2 端口。根据此路由操作是否成功，可以在三个位置检查日志信息：

* 如果 {siteNameShort} 成功路由消息，则为此交易伙伴配置的 AS2 端口的**交易** Tab 中会有错误日志。
* 如果 {siteNameShort} 无法成功路由消息，[应用程序日志](../getting-started/administration/activity#application-logs)中会有错误日志。
* 如果 AS2 端口或应用程序 Tab 中都没有日志，则 AS2 消息一开始就没有到达 {siteNameShort}。

在最后一种完全没有日志的情况下，问题很可能与网络配置有关。这通常是防火墙干扰导致的，因此务必确认交易伙伴以及托管 {siteNameShort} 的系统已在防火墙上打开适当端口，并在必要时将 IP 地址加入白名单。交易伙伴端也可能存在简单的配置错误，例如发送到了错误的端点（伙伴应发送到[配置文件](../getting-started/administration/profiles)页面 **AS2 配置文件** Tab 中的**接收 URL** 值）。

## AS2 交换中发生了什么

尽管 AS2 在应用层面较为复杂，但可以归结为两个基本部分：文档通过 HTTP 从 AS2 发送方发送到 AS2 接收方；HTTP 是一种非常灵活的客户端-服务器协议，也是 Web 的基础。接收方通过向发送方提供回执来确认传输。

下图更详细地展示了这些步骤。

<img src="https://mintcdn.com/qiao/U-KEZ9JbQY4Wqs1D/public/images/AS2-Diagram.png?fit=max&auto=format&n=U-KEZ9JbQY4Wqs1D&q=85&s=8e1d4a46b147f44b5e521a916f7c6bc7" alt="AS2 图示" width="622" height="573" data-path="public/images/AS2-Diagram.png" />

### 步骤 1：EDI 文档准备

AS2 交换中可以发送任何类型的文档，从文本文件到 PDF 均可。不过，通常大多数交易伙伴会针对特定文档类型实施标准。

最常见的文档类型是电子数据交换（EDI）X12 文档（.x12 或 .edi 文件）、行政、商业和运输电子数据交换（EDIFACT）文档（.edifact 文件），或 XML 文件（.xml 文件）。文档准备工作在 AS2 通信开始之前完成。

EDI 是交易伙伴之间传输文档及其遵循标准的总称，也称为 Internet 上的 EDI（EDIINT）。

### 步骤 2：AS2 打包

AS2 文档会被准备好以便发送。这包含三种文档转换：

* 如果文档由可压缩数据组成（即不是二进制数据），可以使用 zlib 压缩算法对文档进行\_压缩\_，以减小传输数据的大小。
* 通常使用发送方的私钥对数据进行\_签名\_，以确保发送方作为文档创建者的身份（通常使用 SHA-1 签名算法）。
* 最后，可以使用接收方的公钥对数据进行\_加密\_，使只有交易伙伴能够读取数据（通常使用 3DES 加密算法）。如果数据将通过 HTTPS 等安全传输机制交付，则可以跳过此步骤。

S/MIME 是用于消息/文档加密和签名的一组标准。它不仅规范签名和加密功能，还提供最终消息格式的标准，使符合规范的读取器能够轻松识别消息结构。

### 步骤 3：HTTP/S 交付

准备好的文档会通过 HTTP 或 HTTPS 协议，经由 Internet 交付到交易伙伴的 Web 服务器。

### 步骤 4：AS2 解包

准备好文档的接收方会将其解包以获取 EDI 文档。如果数据已加密，则使用接收方的私钥对准备好的文档进行\_解密\_。如果数据已签名，则使用发送方的公钥\_验证\_文档上的签名，以确保发送方身份。如果文档已压缩，则对准备好的文档进行\_解压缩\_，以生成原始 EDI 文档。

### 步骤 5：EDI 处理

AS2 接收方将解包后的 EDI 文档传递给处理数据的后端流程，以执行任何额外的业务逻辑。系统会解析 EDI 文档，接收方还可能发起一个新的 AS2 交易，在该交易中发送方和接收方角色互换。尤其对于 EDI-X12 文档，通常会向原始发送方发送 997 功能确认，以表示原始 EDI 文档已在后端业务逻辑中处理。

### 步骤 6：MDN 回复

接收方向发送方发送 MDN，通常使用接收方的私钥进行\_签名\_。MDN 是 AS2 交换中返回的回执，用于向发送方报告接收到了什么以及是否成功接收。

MDN 包含文档是否成功解包的信息，以及基于已接收负载计算出的消息摘要。随后，MDN 会根据发送方请求的交付方式，以两种方式之一返回给发送方。在\_同步\_交易中，接收方在其 Web 服务器的 HTTP 响应中返回 MDN。在\_异步\_交易中，HTTP 响应包含一个简单确认（200 OK），而 MDN 通过单独连接返回（通常在预计 AS2 传输解包需要一段时间时使用）。

### 步骤 7：MDN 处理

发送方从接收方收到 MDN 后，如果 MDN 已签名，则会\_验证\_ MDN 签名。随后检查 MDN 状态，以确认接收方是否成功处理了交易，或是否遇到 MDN 中报告的错误。最后，将 MDN 中报告的消息摘要与根据已发送 EDI 数据计算出的消息摘要进行匹配。借助签名 MDN，发送方可以验证消息接收者是否按预期收到了 EDI 文档的完整内容。

## 证书

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

### 私钥证书

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

* \_签名\_数据以证明你的身份
* \_解密\_原本发送给你的数据

### 公钥证书

公钥证书由交易伙伴提供。AS2 端口允许指定 X.509 格式（.cer 或 .der 文件）的公钥证书。公钥证书用于执行与需要私钥的操作相反的工作。这些操作包括：

* \_验证\_交易伙伴创建的签名
* \_加密\_数据，使只有交易伙伴能够读取

## 宏

<MacrosTable siteName={siteName} extraMacros={extraMacros} />

### 示例

<MacrosExamples siteName={siteName} extraMacros={extraMacros} />

## 常见错误

以下是常见错误、原因和建议解决方案列表。如需更多信息，请联系 [support@kasoftware.cn](mailto: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](mailto:support@kasoftware.cn)，或自行进行排查。

联系交易伙伴确认他们使用的 AS2 解决方案也可能有所帮助。{siteNameShort} 可与任何通过 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 加密的消息摘要，就会抛出此错误。

**解决方案**

{siteNameShort} 的所有当前版本（包括 v2016 的最终发布版本）均支持 SMIME 3.2。较旧版本需要升级才能解决此错误。

### 错误：MDN Error

Authentication failed *或*

Signature Authentication failed: Could not authenticate signer's identity

**造成原因**

此错误作为 MDN 响应的一部分返回，表示交易伙伴无法验证 AS2 请求中的签名。这通常表明交易双方之间存在证书不匹配。

**解决方案**

检查 {siteNameShort} 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 *或*

Connection timed out

**造成原因**

此网络错误表示一般连接问题。当连接服务器的尝试在一段时间内（通常为 60 秒）没有响应时会抛出此错误。这通常是防火墙干扰服务器响应导致的，但也可能表示连接参数不正确。

**解决方案**

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

如果已排除防火墙因素，请检查目标 URL 是否正确。

### 错误：Synchronous MDN expected but not received

**造成原因**

这是一个一般错误，表示 AS2 请求的响应不是 MDN。这可能表示 AS2 请求未按预期发送到 AS2 服务器。如果返回了 MDN，但该 MDN 已损坏，导致 {siteNameShort} 无法正确识别它，也会抛出此错误。

**解决方案**

检查目标 URL 是否正确。然后检查防火墙是否可能剥离了 MDN 内容，导致 {siteNameShort} 无法正确解析。如果 MDN 问题不明确，请找到与失败交易关联的 .mdn 文件，并将其与问题说明一起提供给 [support@kasoftware.cn](mailto:support@kasoftware.cn)。

### 错误：Unsigned MDN received, but signed MDN requested

**造成原因**

当预期交易伙伴响应为已签名 MDN 回执，但实际收到其他内容时，会抛出此错误。这可能是未签名的 MDN 回执，也可能是根本不是 MDN 的响应。

**解决方案**

检查失败交易的 MDN 日志文件内容。该文件包含服务器回复，无论它是未签名 MDN 还是某种非 MDN 响应。MDN 日志文件内容会指示后续步骤：如果服务器响应根本不是 MDN，它可能包含错误，或表明发送 AS2 请求的端点不是 AS2 接收端点。如果 MDN 日志文件包含未签名 MDN，则表示交易伙伴系统存在配置问题。

### 错误：Unable to find valid certification path to requested target

**造成原因**

此错误由 Java 版本中的底层 Java 安全提供程序抛出，表示目标 Web 服务器提供的 SSL 服务器证书不受系统信任。

**解决方案**

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

### 错误：Key does not exist

**造成原因**

这是 Windows CryptoAPI 的一个已知问题，会在多个线程尝试访问同一私钥时出现。默认情况下，{siteNameShort} 使用 Windows CryptoAPI 执行加载私钥证书等安全操作。

**解决方案**

{siteNameShort} 自带加密操作的内部实现，可以启用此托管实现来绕过 Windows CryptoAPI 限制。导航到 {siteNameShort} 安装目录中的 `data` 文件夹，找到相关 AS2 端口的文件夹，并在文本编辑器中打开 `port.cfg`。为在加载证书时启用托管安全实现，请确保存在以下行：

```
CertUseManagedSecurityAPI = true
```

### 错误：Input string was not in a correct format

**造成原因**

这表示 AS2 端口配置的某些方面未通过字符串验证。通常，**接收 URL** 设置或事件脚本中的某些字符串处理是错误来源。

**解决方案**

检查**接收 URL** 中的目标 URL 是否以有效的 HTTP 前缀开头（纯文本连接为 `http://`，SSL 连接为 `https://`），并且不包含任何意外空白。

如果端口的事件中存在脚本（例如 `BeforeSend` 或 `AfterReceive`），请检查是否执行了无效字符串处理。请联系 [support@kasoftware.cn](mailto:support@kasoftware.cn)，确认脚本是否导致该问题。

### 错误：500 Internal Server Error

**造成原因**

此 HTTP 错误表示一般服务器端故障。AS2 消息已成功接收，但处理消息时发生错误，且没有更多调试信息可用。

**解决方案**

唯一可能与此问题相关的客户端设置是目标 URL。如果该 URL 正确，请查阅服务器端日志，了解导致处理失败的更多信息。请与交易伙伴确认这些服务器日志是否可用。

### 错误：404 Not Found

**造成原因**

此 HTTP 错误表示在目标 URL 处找不到资源。这通常表示 URL 前半部分正确（主机、端口），但 URL 后半部分（资源路径）无法识别。

**解决方案**

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

### 错误：401 Unauthorized

**造成原因**

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

**解决方案**

如果需要 TLS 客户端认证，请在端口配置的**高级** > **TLS 客户端认证**部分设置适当的证书。如果需要 HTTP 认证，请在**高级** > **HTTP 认证**中设置适当的凭据。

要确认是否需要 HTTP 认证，请使用 Web 浏览器测试到目标 URL 的连接，并留意是否出现用户名/密码凭据提示。

### 错误：Incoming request did not match a configured trading partner profile

**造成原因**

当 {siteNameShort} 收到 AS2 消息时，应用程序会根据配置的 AS2 标识符尝试将消息路由到特定 AS2 端口。此错误表示找不到发送方和接收方 AS2 标识符与 AS2 消息中值匹配的端口。

**解决方案**

检查 AS2 [配置文件](../getting-started/administration/profiles)页面以及受此错误影响的特定交易伙伴对应 AS2 端口上配置的 AS2 标识符。

### 错误：Error during handshake: The token supplied to the function is invalid

**造成原因**

这是 WinSock 库（Windows 套接字）返回的几个 SSL 错误之一。通常在尝试通过 HTTP 连接到期望 HTTPS 连接的服务器时，会发生此错误。

**解决方案**

请与交易伙伴确认 AS2 连接应使用 HTTP 还是 HTTPS，并检查目标 URL 是否具有适当的前缀和端口。

### 错误：Error during handshake: the buffer supplied to a function was too small

**造成原因**

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

* `TLS_DHE_RSA_WITH_AES_128_GCM_SHA256`
* `TLS_DHE_RSA_WITH_AES_256_GCM_SHA384`

**解决方案**

{siteNameShort} 自带加密操作的内部实现，可以启用此托管实现来绕过 Windows CryptoAPI 限制。导航到 {siteNameShort} 安装目录中的 `data` 文件夹，并在文本编辑器中打开 `profile.cfg` 文件。确保 `[Application]` 部分下存在以下行：

```
UseManagedSecurityAPI = true
```

作为使用托管安全提供程序的替代方案，可以使用第三方系统加密工具在操作系统级别禁用这两个受影响的密码。

### 错误：Error during handshake: the function requested is not supported

**造成原因**

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

**解决方案**

可以在 AS2 端口的**高级** > **其他设置** > **启用的 TLS 协议**下启用 TLS 版本。请与交易伙伴确认支持哪些 TLS/SSL 版本，并相应配置端口。
