跳到主要内容

自定义 CA 证书库

注意

本教程为社区贡献内容,不属于 OPL 数据空间官方支持范围。它主要演示如何按你的实际环境定制 OPL 数据空间。

如果你在运行 OPL 数据空间时遇到 [SSL: CERTIFICATE_VERIFY_FAILED],常见原因是你的网络环境会拦截 HTTPS 流量,例如公司内网代理。

要解决这个问题,需要把新的根证书加入 OPL 数据空间使用的信任证书库中。

预构建 Docker 镜像

  1. 把宿主机证书库挂载到容器中,例如:
--volume=/etc/ssl/certs/ca-certificates.crt:/etc/ssl/certs/ca-certificates.crt:ro
  1. 设置 SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt,强制 Python 使用系统信任库。

示例 compose.yaml

services:
  openwebui:
    image: ghcr.io/open-webui/open-webui:main
    volumes:
      - /var/containers/openwebui:/app/backend/data:rw
      - /etc/containers/openwebui/compusrv.crt:/etc/ssl/certs/ca-certificates.crt:ro
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    environment:
      - WEBUI_NAME=compusrv
      - ENABLE_SIGNUP=False
      - ENABLE_COMMUNITY_SHARING=False
      - WEBUI_SESSION_COOKIE_SAME_SITE=strict
      - WEBUI_SESSION_COOKIE_SECURE=True
      - ENABLE_OLLAMA_API=False
      - SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt

ro 表示只读挂载,可以避免误改宿主机的 CA 库。

本地开发

如果你在本地改 UI 或自行构建镜像,也可以直接在 Dockerfile 构建过程中加入证书。由于镜像使用了多阶段构建,需要在两个阶段都处理:

1. 前端构建阶段(build

COPY package.json package-lock.json <YourRootCert>.crt ./
ENV NODE_EXTRA_CA_CERTS=/app/<YourRootCert>.crt
RUN npm ci

2. 后端基础阶段(base

COPY <CorporateSSL.crt> /usr/local/share/ca-certificates/
RUN update-ca-certificates
ENV PIP_CERT=/etc/ssl/certs/ca-certificates.crt \
    REQUESTS_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt