SignServer 社区版生产环境容器部署配置
下面提供一个基于官方 SignServer 社区版镜像(keyfactor/signserver-ce)的 Docker Compose 配置片段,满足生产环境要求。该配置启用了安全模式(即管理界面需要客户端证书认证),使用嵌入式 H2 数据库并将其文件持久化到宿主机目录,同时未自动启用时间戳服务(TSA)或其他任何工作器,由用户在部署后自行配置。
docker-compose.yml 配置片段
services:
signserver:
image: keyfactor/signserver-ce:latest # 官方 SignServer CE 镜像
container_name: signserver
hostname: mysignserver.baixin.local # 可根据实际域名修改,用于TLS证书的主机名
environment:
- TLS_SETUP_ENABLED=true # 启用安全模式,要求使用客户端证书进行管理界面访问
- DATABASE_JDBC_URL=jdbc:h2:/mnt/persistent/signserverdb;DB_CLOSE_DELAY=-1 # 使用嵌入式 H2 数据库并指定持久化路径
- DATABASE_USER=signserver # 数据库用户名(H2 默认用户)
- DATABASE_PASSWORD=signserver # 数据库密码(H2 默认密码)
ports:
- "8080:8080" # HTTP 端口(容器默认 8080)
- "8443:8443" # HTTPS 端口(容器默认 8443,用于管理界面客户端证书登录)
volumes:
- /opt/signserver-data:/mnt/persistent # 持久化 SignServer 数据库文件等数据
- /path/to/ManagementCA.crt:/mnt/external/secrets/tls/cas/ManagementCA.crt:ro # 管理员CA证书,用于客户端证书认证
上述配置定义了一个名为 signserver 的服务,使用官方镜像并设置所需的环境变量、端口和卷挂载。
挂载目录结构
- 宿主机
/opt/signserver-data/持久化数据目录(挂载到容器内的/mnt/persistent/):用于存放 H2 数据库文件等持久化数据,防止容器重启导致的数据丢失。容器内默认的 H2 数据库文件路径为/mnt/persistent/signserverdb(启动时会在该目录下生成.db文件)。通过上述挂载,数据库文件将保存在宿主机的/opt/signserver-data目录下。 - 宿主机
ManagementCA.crt证书文件(挂载到容器内的/mnt/external/secrets/tls/cas/ManagementCA.crt):这是用于管理界面客户端认证的 CA 根证书(通常由 EJBCA 的 ManagementCA 签发)。运行容器前需要由用户从 EJBCA 提供该 CA 证书并放置在宿主机路径/path/to/ManagementCA.crt,容器启动时会信任此证书颁发的客户端证书,用于管理员身份验证。
配置说明
- 启用安全模式(TLS 客户端证书认证):通过设置环境变量
TLS_SETUP_ENABLED=true,SignServer 容器将在启动时启用安全模式,要求访问管理界面的客户端提供有效的证书进行身份验证。容器会使用提供的 ManagementCA.crt 来建立受信任的证书颁发机构链,只有由该 CA 签发的客户端证书才能访问管理控制台。请确保您已经在 EJBCA 上使用 ManagementCA 为自己签发了管理员客户端证书,并将该证书导入浏览器。上述挂载的 CA 证书即是让容器信任该管理员证书的颁发机构。 - 使用嵌入式 H2 数据库并持久化:配置中显式指定了
DATABASE_JDBC_URL=jdbc:h2:/mnt/persistent/signserverdb;DB_CLOSE_DELAY=-1,表示使用内置的 H2 数据库,并将数据库文件存储在容器内的/mnt/persistent/signserverdb路径。通过卷映射,此路径对应宿主机的/opt/signserver-data目录,从而确保 SignServer 的数据持久化存储在宿主机,不会因容器重建而丢失。默认的数据库用户名/密码为signserver/signserver,已在环境变量中配置以匹配镜像默认值。 - 未预配置 TSA 或其他工作器:该配置不包含任何自动启动的 Time Stamp Authority (TSA) 或其他签名工作器的设置。启动后的 SignServer 实例将不包含预先激活的工作器,用户可以通过 SignServer 管理界面或 CLI 根据需要手动添加和配置所需的工作器。这样确保了部署初始状态的最小化,符合“不自动启用 TSA/其他工作器”的要求。
- 端口配置:容器使用官方默认的端口 8080(HTTP)和 8443(HTTPS)。Compose 配置将它们映射到宿主机相同端口,保证宿主机可以直接通过
http://<host>:8080/或https://<host>:8443/访问相应服务。其中 8443 端口提供管理界面并要求客户端证书认证,8080 端口提供 SignServer 基本服务(初始页面会提示需要客户端证书)。根据生产环境需要,可在外部通过反向代理将 8443 映射为标准的 443 端口。
以上配置和参数均参考了官方 Docker 镜像文档和 Keyfactor 官方指南,确保与当前镜像版本的行为相符。使用该配置,可以搭建一个安全的 SignServer 容器实例,满足生产环境对客户端证书安全访问和数据持久化的要求。通过导入由 EJBCA 签发的管理员证书,管理员即可通过 HTTPS 8443 端口安全地访问 SignServer 管理界面。随后,您可以根据需要在 SignServer 内部添加 TSA 等工作器以提供相应的签名服务。