EJBCA Community Edition(EJBCA CE)是一款开源的公钥基础设施(PKI)和证书颁发机构(CA)软件,是运行时间最长的CA软件项目之一。EJBCA平台独立,可满足从证书注册、证书管理到证书验证的全流程需求。
EJBCA基于Java开发,可在OpenJDK等JVM上运行,支持Linux、Windows等多数平台。EJBCA分为两个版本:
最低系统要求:
EJBCA实例可部署用于以下一种或多种场景,支持从小型到超大型部署:
证书颁发机构(CA)
验证机构(VA)
注册机构(RA)
EJBCA适用于需要建立和管理PKI的各类场景,包括但不限于:
通过Docker命令直接拉取最新EJBCA Community镜像:
bashsudo docker pull keyfactor/ejbca-ce
临时测试实例(无认证访问)
启动临时测试实例,允许无认证网络访问管理系统:
bashdocker run -it --rm -p 80:8080 -p 443:8443 -h mycahostname -e TLS_SETUP_ENABLED="simple" keyfactor/ejbca-ce
说明:
--rm:容器停止后自动删除-p 80:8080:映射HTTP端口(8080容器内→80主机)-p 443:8443:映射TLS端口(8443容器内→443主机)-h mycahostname:设置容器主机名TLS_SETUP_ENABLED="simple":生成管理CA和服务器TLS证书,但允许任何人通过HTTPS管理系统(仅用于测试,生产环境禁用)容器完全启动后,访问 https://mycahostname:443/ejbca/adminweb/ 进入管理界面。
经典工作流(客户端证书认证访问)
启动需要客户端证书认证的实例:
bashdocker run -it --rm -p 80:8080 -p 443:8443 -h mycahostname -e TLS_SETUP_ENABLED="true" keyfactor/ejbca-ce
说明:
TLS_SETUP_ENABLED="true":首次启动时生成管理CA,为服务器和初始管理员生成客户端TLS证书https://mycahostname:443/ejbca/adminweb/,通过客户端证书认证容器行为可通过环境变量自定义,以下为关键配置:
安全参数
生产环境必须自定义以下安全相关密码:
| 环境变量 | 描述 |
|---|---|
PASSWORD_ENCRYPTION_KEY | 用于加密EJBCA中的密码(如终端实体明文密码、加密令牌密码等),首次安装前设置,不可更改 |
CA_KEYSTOREPASS | 保护数据库中软件加密令牌(非HSM)的默认密码,建议为加密令牌手动设置密码 |
EJBCA_CLI_DEFAULTPASSWORD | 本地命令行界面(CLI)的默认用户('ejbca')密码 |
设置示例:
bashdocker run -it --rm -p 80:8080 -p 443:8443 -h mycahostname \ -e PASSWORD_ENCRYPTION_KEY="myrandomkey" \ -e CA_KEYSTOREPASS="anotherrandomkey" \ -e EJBCA_CLI_DEFAULTPASSWORD="randompassphrase" \ keyfactor/ejbca-ce
其他重要环境变量
通过 docker inspect keyfactor/ejbca-ce:latest 可查看所有环境变量及默认值,常用变量包括:
| 环境变量 | 描述 | 默认值 |
|---|---|---|
LOG_LEVEL_APP | 应用日志级别 | INFO |
TLS_SETUP_ENABLED | TLS配置模式:true(生成CA和证书)、simple(无认证访问)、later(代理TLS)、false(禁用TLS) | true(首次启动) |
DATABASE_JDBC_URL | 数据库JDBC连接URL | jdbc:h2:/mnt/persistent/ejbcadb;DB_CLOSE_DELAY=-1 |
DATABASE_USER | 数据库用户名(外部数据库时必填) | - |
DATABASE_PASSWORD | 数据库密码(外部数据库时必填) | - |
EJBCA支持外部数据库实现集群部署,默认使用内置H2数据库(仅适合测试),生产环境建议使用MariaDB/MySQL或PostgreSQL。
数据库连接URL格式
| 数据库类型 | JDBC URL示例 |
|---|---|
| H2(持久化) | jdbc:h2:/mnt/persistent/ejbcadb;DB_CLOSE_DELAY=-1 |
| H2(内存,非持久化) | jdbc:h2:mem:ejbcadb;DB_CLOSE_DELAY=-1 |
| MariaDB/MySQL | jdbc:mariadb://database:3306/ejbca?characterEncoding=UTF-8 |
| PostgreSQL | jdbc:postgresql://database/ejbca |
使用外部数据库示例(MariaDB)
bashdocker run -it --rm -p 80:8080 -p 443:8443 -h mycahostname \ -e TLS_SETUP_ENABLED="true" \ -e DATABASE_JDBC_URL="jdbc:mariadb://172.26.0.1:3306/ejbcatest?characterEncoding=UTF-8" \ -e DATABASE_USER="ejbca" \ -e DATABASE_PASSWORD="password" \ keyfactor/ejbca-ce
注意:首次启动时会自动创建数据库表结构,后续启动将复用现有数据。
适用于在反向代理(如Nginx、Apache Httpd)后部署,需禁用容器内部TLS配置,通过代理处理TLS。
关键配置变量
| 环境变量 | 描述 |
|---|---|
PROXY_AJP_BIND | AJP代理端口(8009)绑定的IP地址 |
PROXY_HTTP_BIND | HTTP后端端口(8081和8082)绑定的IP地址,8082接受SSL_CLIENT_CERT头 |
TLS_SETUP_ENABLED | 需设置为later(代理TLS)或false(禁用TLS),不可与true同时使用 |
说明:配置代理后会禁用管理CA创建,需手动配置EJBCA。
EJBCA通过JavaMail服务发送邮件通知,可通过环境变量配置SMTP参数:
| 环境变量 | 描述 | 默认值 |
|---|---|---|
SMTP_DESTINATION | SMTP服务器地址 | localhost |
SMTP_DESTINATION_PORT | SMTP端口 | 25 |
SMTP_TLS_ENABLED | 启用TLS | true |
SMTP_SSL_ENABLED | 启用SSL | true |
SMTP_USERNAME | SMTP认证用户名 | - |
SMTP_PASSWORD | SMTP认证密码 | - |
SMTP_FROM | 发件人*** | - |
Gmail SMTP示例:
bashdocker run -it --rm -p 80:8080 -p 443:8443 -h mycahostname \ -e TLS_SETUP_ENABLED="simple" \ -e SMTP_DESTINATION="smtp.gmail.com" \ -e SMTP_DESTINATION_PORT="587" \ -e SMTP_USERNAME="user@gmail.com" \ -e SMTP_PASSWORD="userssecretpassword" \ -e SMTP_FROM="user@gmail.com" \ -e SMTP_SSL_ENABLED="false" \ keyfactor/ejbca-ce
以下目录用于持久化数据、配置和密钥,生产环境建议通过Docker卷挂载:
| 目录路径 | 用途 |
|---|---|
/mnt/persistent | H2数据库持久化目录(默认),需通过卷挂载以保留数据 |
/mnt/external/secrets/tls/cas | DER编码的CA证书目录,文件名作为CA名称(如ManagementCA.crt) |
/mnt/external/secrets/tls/ks | 服务器密钥库目录,需包含server.jks、server.storepasswd等文件 |
/mnt/external/secrets/tls/ts | 信任库目录,需包含truststore.jks、truststore.storepasswd文件 |
/opt/keyfactor/ejbca/conf | 应用配置文件目录,可覆盖配置属性 |
/opt/keyfactor/bin | 启动脚本和CLI命令(如ejbca.sh、ejbcaClientToolBox.sh) |
bash# 创建卷 docker volume create ejbca-persistent-data # 启动容器,挂载卷 docker run -it --rm -p 80:8080 -p 443:8443 -h mycahostname \ -v ejbca-persistent-data:/mnt/persistent \ keyfactor/ejbca-ce
bash# 映射主机9443端口到容器8443端口 docker run -it --rm -p 80:8080 -p 9443:8443 -h mycahostname keyfactor/ejbca-ce
修复静态链接端口:
创建web.properties文件,设置httpserver.external.privhttps=9443,挂载到容器:
bashdocker run -it --rm -p 80:8080 -p 9443:8443 -h mycahostname \ -v $PWD/config/web.properties:/opt/primekey/ejbca/conf/web.properties \ keyfactor/ejbca-ce
bash# 创建插件目录并放入JAR文件 mkdir -p ejbca-plugins && cp my-plugin.jar ejbca-plugins/ # 启动容器,挂载插件目录 docker run -it --rm -p 80:8080 -p 443:8443 -h mycahostname \ -v $PWD/ejbca-plugins:/opt/primekey/ejbca/plugins \ keyfactor/ejbca-ce
EJBCA Enterprise版本提供商业支持,详情见EJBCA Enterprise。
EJBCA Community版基于LGPL许可证开源。
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。

探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
docker search 限制
站内搜不到镜像
离线 save/load
插件要用 plugin install
WSL 拉取慢
安全与 digest
新手拉取配置
镜像合规机制
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
域名连通性排查
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务