EJBCA Community Edition(EJBCA CE)是一款开源的公钥基础设施(PKI)和证书颁发机构(CA)软件,是运行时间最长的CA软件项目之一。EJBCA平台独立,可满足从证书注册、证书管理到证书验证的全流程需求。
EJBCA基于Java开发,可在OpenJDK等JVM上运行,支持Linux、Windows等多数平台。EJBCA分为两个版本:
最低系统要求:
EJBCA实例可部署用于以下一种或多种场景,支持从小型到超大型部署:
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管理系统(仅用于测试,生产环境禁用)容器完全启动后,访问 [***] 进入管理界面。
启动需要客户端证书认证的实例:
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证书[***],通过客户端证书认证容器行为可通过环境变量自定义,以下为关键配置:
生产环境必须自定义以下安全相关密码:
| 环境变量 | 描述 |
|---|---|
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。
| 数据库类型 | 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 |
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="***" \ -e SMTP_PASSWORD="userssecretpassword" \ -e SMTP_FROM="***" \ -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 Hub 加速,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
免费版仅支持 docker.io;专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
在 Linux 系统配置镜像加速服务
在 Docker Desktop 配置镜像加速
Docker Compose 项目配置加速
Kubernetes 集群配置 Containerd
在宝塔面板一键配置镜像加速
Synology 群晖 NAS 配置加速
飞牛 fnOS 系统配置镜像加速
极空间 NAS 系统配置加速服务
爱快 iKuai 路由系统配置加速
绿联 NAS 系统配置镜像加速
QNAP 威联通 NAS 配置加速
Podman 容器引擎配置加速
HPC 科学计算容器配置加速
ghcr、Quay、nvcr 等镜像仓库
无需登录使用专属域名加速
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429