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

# 为第三方签名验证签署插件

> 在 Dify 社区版中启用已签名的 `.difypkg` 安装，无需完全禁用签名验证（生成密钥、签署软件包、分发公钥）

<Warning>
  第三方签名验证是 **Dify 社区版** 功能。Dify 云版本集中管理签名，不开放这些控制选项。
</Warning>

自托管 Dify 默认强制执行签名验证。第三方签名验证允许管理员安全地安装不在市场上的插件，而无需完全禁用验证。

两种场景：

<CardGroup cols={2}>
  <Card title="管理员签署已批准的插件" icon="user-shield">
    管理员审核来自可信开发者的 `.difypkg` 文件，并在安装前使用自己的密钥进行签名。
  </Card>

  <Card title="开发者提供已签名的插件" icon="key">
    开发者签署 `.difypkg` 并发布匹配的公钥。信任该开发者的管理员将该公钥添加到验证列表中。
  </Card>
</CardGroup>

两种情况的机制相同：生成密钥对，使用私钥签名，使用公钥验证。

## 生成密钥对

```bash theme={null}
dify signature generate -f your_key_pair
```

当前目录中会生成两个文件：

| 文件                          | 用途         |
| :-------------------------- | :--------- |
| `your_key_pair.private.pem` | 签署插件（保密）   |
| `your_key_pair.public.pem`  | 验证签名（公开分享） |

<Warning>
  妥善保管私钥。任何拥有私钥的人都可以签署插件，而这些插件在信任你公钥的安装实例上都能通过验证。
</Warning>

## 签署和验证插件

<Steps>
  <Step title="签署软件包">
    ```bash theme={null}
    dify signature sign your_plugin_project.difypkg -p your_key_pair.private.pem
    ```

    在同一目录中生成 `your_plugin_project.signed.difypkg`。
  </Step>

  <Step title="验证已签名的软件包">
    ```bash theme={null}
    dify signature verify your_plugin_project.signed.difypkg -p your_key_pair.public.pem
    ```

    在分发或安装之前确认签名匹配。
  </Step>
</Steps>

<Info>
  如果省略 `-p` 参数，`dify signature verify` 将使用 Dify 市场公钥进行验证。任何未由 Dify 签署的插件在该模式下都将验证失败。
</Info>

## 在守护程序上启用验证

管理员通过向插件守护程序提供受信任公钥列表来安装已签名的插件。

<Steps>
  <Step title="放置公钥">
    将 `.public.pem` 文件放置在守护程序容器可以访问的位置。对于 Docker Compose 安装：

    ```bash theme={null}
    mkdir -p docker/volumes/plugin_daemon/public_keys
    cp your_key_pair.public.pem docker/volumes/plugin_daemon/public_keys/
    ```
  </Step>

  <Step title="配置守护程序环境">
    在 `plugin_daemon` 服务上设置以下变量：

    | 变量                                               | 值            |
    | :----------------------------------------------- | :----------- |
    | `FORCE_VERIFYING_SIGNATURE`                      | `true`       |
    | `THIRD_PARTY_SIGNATURE_VERIFICATION_ENABLED`     | `true`       |
    | `THIRD_PARTY_SIGNATURE_VERIFICATION_PUBLIC_KEYS` | 容器内公钥的逗号分隔路径 |

    `docker-compose.override.yaml` 示例片段：

    ```yaml theme={null}
    services:
      plugin_daemon:
        environment:
          FORCE_VERIFYING_SIGNATURE: true
          THIRD_PARTY_SIGNATURE_VERIFICATION_ENABLED: true
          THIRD_PARTY_SIGNATURE_VERIFICATION_PUBLIC_KEYS: /app/storage/public_keys/your_key_pair.public.pem
    ```

    <Note>
      `docker/volumes/plugin_daemon` 挂载到容器内的 `/app/storage`，因此 `THIRD_PARTY_SIGNATURE_VERIFICATION_PUBLIC_KEYS` 中的路径必须使用容器内路径。
    </Note>
  </Step>

  <Step title="重启 Dify">
    ```bash theme={null}
    cd docker
    docker compose down
    docker compose up -d
    ```

    现在已强制执行验证安装：与配置的公钥匹配的已签名 `.difypkg` 文件可以顺利安装；未签名或不匹配的文件将被拒绝。
  </Step>
</Steps>

## 相关资源

* [打包为本地文件并分享](/zh/3.10.x/develop/plugins/publishing/marketplace-listing/release-by-file)
* [发布到个人 GitHub 仓库](/zh/3.10.x/develop/plugins/publishing/marketplace-listing/release-to-individual-github-repo)
* [插件开发指南](/zh/3.10.x/develop/plugins/publishing/standards/contributor-covenant-code-of-conduct)
* [发布常见问题](/zh/3.10.x/develop/plugins/publishing/faq/faq)

***

[编辑此页面](https://github.com/langgenius/dify-docs/edit/main/en/develop-plugin/publishing/standards/third-party-signature-verification.mdx) | [报告问题](https://github.com/langgenius/dify-docs/issues/new?template=docs.yml)
