博客详情页
  • 下载
  • 开发
  • 文档
  • 学习
  • 支持
  • 社区
  • 动态
Repositories
EN
Repositories
EN
PKI 实践指南:构建完整的证书服务系统

PKI 实践指南:构建完整的证书服务系统

实践案例

2025/08/11
沈威

PKI 实践指南:构建完整的证书服务系统

1. 引言

本文是一份基于 EJBCA 的证书服务实践教程,目标是在 Demo 环境中快速跑通 CA/RA 全流程,包括证书模板创建、终端实体模板配置、审批流程启用,以及 RA 端的终端证书申请与下载。教程聚焦“能跑起来”,适合实验、PoC 或内部演示,不涉及生产环境的安全加固与合规细节。

  • 主要收获:掌握 EJBCA 的核心操作路径,完成从模板配置到证书签发的全过程

2. 方案架构与术语

  • RA:负责终端实体注册与身份审核。
  • 证书模板(Certificate Profile):预设密钥用法、SAN、有效期等。

3. 实验环境与前置条件

  • 操作系统:Ubuntu 20.04 Server(离线安装)
  • 前置软件:Docker ,docker-compose (apt 包)

4. EJBCA Docker 部署与持久化

本文将详细介绍如何在 Docker 中部署 EJBCA 证书服务,并确保其数据持久化存储在独立数据盘上,避免因容器或虚拟机重启导致数据丢失。内容包括使用内部数据库(默认 H2)的持久化配置、docker-compose 方式运行容器、开放远程访问所需的配置。

4.1 环境准备与代理配置

由于部分 EJBCA Docker 镜像(如 keyfactor/ejbca-ce )需要从公网拉取,为确保环境可用,请先配置 Docker Daemon 的 HTTP/HTTPS 代理。

配置 systemd 代理

Docker Daemon 运行在 systemd 管理下,需添加配置以继承系统代理。

sudo mkdir -p /etc/systemd/system/docker.service.d
sudo nano /etc/systemd/system/docker.service.d/http-proxy.conf

内容如下:

[Service]
Environment="HTTP_PROXY=http://192.168.xxx.xxx:7890"
Environment="HTTPS_PROXY=http://192.168.xxx.xxx:7890"
Environment="NO_PROXY=127.0.0.1,localhost,192.168.13.119"//ip需要改成自己虚拟机主机ip

重新加载并重启 Docker

sudo systemctl daemon-reload
sudo systemctl restart docker
sudo systemctl status docker --no-pager -l

若输出中含有 Active: active (running) 即表示代理配置生效。

验证代理是否生效

docker info | grep -i proxy

出现如下输出说明代理生效:

HTTP Proxy: http://192.168.xxx.xxx:7890
HTTPS Proxy: http://192.168.xxx.xxx:7890

4.2 数据持久化配置

  • 使用文件方式保存 H2 数据库:将数据库配置为 jdbc:h2:/mnt/persistent/ejbcadb;DB_CLOSE_DELAY=-1
  • 宿主机挂载路径:/opt/ejbca-data:/mnt/persistent
  • 避免使用 --rm 启动容器
  • 设置宿主机权限:chown -R 10001:10001 /opt/ejbca-data

📌 提示:正式环境建议切换到 PostgreSQL / MySQL 等外部数据库,提升可靠性与容灾能力。

4.3 使用 Docker Compose 部署

  1. 创建目录结构:
mkdir -p /opt/ejbca-compose
cd /opt/ejbca-compose
mkdir -p /opt/ejbca-data
chown -R 10001:10001 /opt/ejbca-data
  1. 当前目录下创建docker-compose.yml,编写 docker-compose.yml
version: "3.3" # 使用 Docker Compose 文件格式版本 3.3

services:
  ejbca: # 定义名为 ejbca 的服务
    image: keyfactor/ejbca-ce:latest # 使用 Keyfactor 提供的 EJBCA 社区版镜像,使用最新版本
    container_name: ejbca # 容器名称为 ejbca
    hostname: myejbca.test.local # 容器内部主机名,影响证书中的 CN 等字段

    environment: # 设置环境变量配置 EJBCA 的启动行为
      - DATABASE_JDBC_URL=jdbc:h2:/mnt/persistent/ejbcadb;DB_CLOSE_DELAY=-1 # 使用嵌入式 H2 数据库,数据保存在挂载目录下
      - TLS_SETUP_ENABLED=true # 启用自动 TLS 设置(用于 HTTPS 接入)
      - SMTP_DESTINATION=192.168.xx.xx # 设置 SMTP 邮件服务器地址(用于发送通知邮件)
      - SMTP_DESTINATION_PORT=25 # SMTP 服务端口,默认 25(未启用加密)
      - SMTP_FROM=ejbca@example.local # 设置邮件发送的发件人地址
      - SMTP_TLS_ENABLED=false # 不启用 SMTP 的 STARTTLS
      - SMTP_SSL_ENABLED=false # 不启用 SMTP 的 SSL/TLS 加密

    ports: # 映射容器端口到宿主机
      - "80:8080" # 宿主机 80 端口映射到容器的 8080(HTTP)
      - "443:8443" # 宿主机 443 端口映射到容器的 8443(HTTPS)

    volumes: # 数据卷挂载,将容器中的目录映射到宿主机,以持久化数据
      - /opt/ejbca-data:/mnt/persistent # 将宿主机的 /opt/ejbca-data 目录挂载到容器中,持久化数据库等数据

    restart: unless-stopped # 如果容器异常退出则自动重启,除非人为停止
  1. 启动容器服务:
docker-compose up -d
docker-compose logs -f

⚙️ 使用 Compose 可轻松管理配置版本,便于团队协作和恢复。

4.4 远程访问配置

  1. 提前设置容器 hostname(影响 TLS 证书 CN):
hostname: myejbca.test.local

4.5 管理证书信任

  • 下载超级管理员证书 .p12 后需双击导入证书存储

4.6 登录流程摘要

  1. docker-compose logs -f查找容器日志中 SuperAdmin URL 和一次性密码:
ejbca    | 2025-08-05 09:11:31,656+0000 INFO  [/opt/keyfactor/bin/start.sh] (process:1) *                                                                                                    *
ejbca    | 2025-08-05 09:11:31,656+0000 INFO  [/opt/keyfactor/bin/start.sh] (process:1) *   URL:      https://myejbca.test.local:443/ejbca/ra/enrollwithusername.xhtml?username=superadmin *
ejbca    | 2025-08-05 09:11:31,656+0000 INFO  [/opt/keyfactor/bin/start.sh] (process:1) *   Password: urAMy0He5c/hHy+DYyDFNy4E                                                               *
ejbca    | 2025-08-05 09:11:31,656+0000 INFO  [/opt/keyfactor/bin/start.sh] (process:1) *                                                                                                    *
ejbca    | 2025-08-05 09:11:31,656+0000 INFO  [/opt/keyfactor/bin/start.sh] (process:1) * Once the P12 is downloaded, use "urAMy0He5c/hHy+DYyDFNy4E" to import it.                           *
ejbca    | 2025-08-05 09:11:31,656+0000 INFO  [/opt/keyfactor/bin/start.sh] (process:1) *                                                                                                    *
ejbca    | 2025-08-05 09:11:31,656+0000 INFO  [/opt/keyfactor/bin/start.sh] (process:1) ******************************************************************************************************
  1. 访问领取 URL 填写密码 → 设置导出密码 → 下载 .p12
  2. 导入浏览器后访问:https://myejbca.test.local/ejbca/adminweb
  3. 若提示未提供客户端证书,检查是否导入成功、代理关闭、域名正确解析

✅ 至此,EJBCA 部署 + 持久化 + 管理登录流程即告完成。

4.7 重要提示(请务必遵守以下要求)

必须 先将 myejbca.test.local 添加到 hosts 文件,或搭建本地 DNS 服务器,否则浏览器可能无法解析域名。

超级管理员证书算法默认是 DILITHIUM2(根据版本默认算法会不一样),但 Windows 大概不能识别,建议改为 RSA 4096,以确保兼容性。

不能开代理,否则 EJBCA 可能无法正确处理客户端证书认证。

确保 Windows/macOS/Linux 证书存储正确导入,避免 No client certificate was presented 错误。

第一次建议使用 chrome 浏览器无痕模式,避免缓存问题导致No client certificate was presented


5. 初始 CA 创建与证书层级搭建

5.1 进入证书 Profile 管理

  • 登录 EJBCA 管理控制台
  • 依次点击 CA Functions → Certificate Profiles 进入管理页面。

5.2 创建证书 Profile

方法 1:克隆现有 Profile

  • 在列表中找到合适的 Profile(如 ENDUSER)。
  • 点击 Clone,输入新名称,保存。

方法 2:手动创建 Profile

  • 点击 Add,输入名称后进入编辑页面。
  • 根据实际需求设置 Key UsageExtended Key Usage、有效期、Subject DN 设置等。
  • 保存后返回列表查看。

5.3 创建 Crypto Token

  1. 进入 CA Functions → Crypto Tokens
  2. 点击 Create new 并填写:
    • Name:输入 Crypto Token 名称。
    • Type:选择 SOFT
    • Auto-activation:可选,勾选可自动激活。
    • Allow export of private keys:如需导出私钥,勾选 Allow
    • Authentication Code:输入认证码并重复确认。
      dd if=/dev/random bs=1 count=128 2>&1| sha256sum | awk '{print $1}
  3. 保存并在列表中确保状态为 Active

5.4 生成密钥对

  • 进入 Crypto Token 详情页面。
  • Crypto Token currently does not contain any key pairs. 处输入密钥名称(如 signKey)。
  • 选择密钥算法(如 RSA 4096)。
  • 点击 Generate new key pair 生成密钥。

注意:默认 Profile 不能修改,需克隆后新建。

5.5 创建 CA

  1. 打开 CA Functions → Certification Authorities
  2. 在顶部列表中会看到默认的 ManagementCA (Active)无需选中它
  3. 滚动到页面底部的 Add CA 区域:
    • 在文本框中输入新 CA 名称,例如 DemoCA
    • 点击右侧 Create… 按钮,进入 CA 配置向导。
  4. Create CA 页面完成相关字段:
  5. 点击最下方 Create 保存。若配置正确,页面将跳转回 CA 列表并看到 DemoSubCA (Active) 状态。
  6. (可选)若要手动上传由根 CA 签发的证书,可在列表中选中新 CA,然后使用 Import CA certificate… 功能上传链文件。

到此,中间 CA 创建完成,后续即可用它签发终端实体证书。

5.6 Root CA 创建简要步骤案例

1️⃣ CA 类型与密钥配置

参数说明
CA TypeX.509 CA ✅ 标准 X.509 证书 CA。
Crypto Token选择已创建的 Crypto Token ✅(如 demoCrypto)。
Signing AlgorithmSHA256WithRSA ✅ 更安全的签名算法。
Alternative Signing AlgorithmNone ❌ 无需备用签名算法。
Key Sequence FormatNumeric (0-9) ✅ 用于 CA 证书序列号。
Key Sequence00000 ✅ 初始序列号,可修改。
DescriptionRoot CA 说明,可填写用途、管理单位等 ✅

2️⃣ 证书策略(Directives)

参数说明
Enforce unique public keys✅ 强制公钥唯一性,防止重复
Enforce key renewal❌ Root CA 可不启用
Enforce unique DN✅ 确保 DN 唯一(适用于小规模 CA)
Enforce unique Subject DN SerialNumber❌ 仅适用于大规模 CA(20 个以下证书可不启用)
Use Certificate Request History❌ 记录证书请求历史,Root CA 不启用
Use User Storage✅ 存储用户信息
Use Certificate Storage✅ 存储已颁发证书

3️⃣ 证书数据(CA Certificate Data)

参数说明
Subject DNCN=test EnterpriseIT Root CA
Signed BySelf Signed ✅ Root CA 必须自签名
Certificate ProfileITROOTCA_profile ✅ 选择克隆后的 ROOTCA,允许修改参数
Validity20y ✅ 证书有效期 20 年
Subject Alternative Name❌ Root CA 通常不需要
Certificate Policy OID❌ 可选,默认留空
Use UTF-8 in policy notice text✅ 确保国际字符支持
PrintableString encoding in DN❌ 不勾选,避免影响国际化
LDAP DN order✅ 确保 DN 按 LDAP 规范排列
Serial Number Octet Size20 ✅ 推荐 20 字节,确保唯一性
Name Constraints, Permitted❌ Root CA 默认禁用,留空
Name Constraints, Excluded❌ Root CA 默认禁用,留空

4️⃣ CRL 配置(证书吊销列表)

参数说明
Microsoft CA Compatibility Mode❌ Root CA 不启用,仅适用于 Windows 证书颁发机构(AD CS)。
Authority Key ID✅ 启用,并标记 Critical,用于标识 CRL 发行者。建议 Root CA 和中间 CA 都启用。
CRL Number✅ 启用,并标记 Critical,确保 CRL 版本唯一。建议 Root CA 和中间 CA 启用。
Issuing Distribution Point on CRLs❌ Root CA 可不启用,仅适用于分层 CRL 结构的大规模 CA。
CA issuer URI❌ 留空,证书下载后期由用户自行提供接口。
Keep expired certificates on CRL❌ Root CA 不启用,中间 CA 视情况决定,启用后即使证书过期仍会出现在 CRL 中。
Use CRL partitions❌ Root CA 负载小,不需要。适用于大规模证书管理的 CA。
CRL Expire Period30d ✅ Root CA 设长一些,如 30d,中间 CA 采用较短的 CRL 过期时间。
CRL Issue Interval7d ✅ 定期更新 CRL,建议活跃 CA 采用 7d
CRL Overlap Time12h ✅ 旧 CRL 与新 CRL 重叠 12h,防止证书验证失败。
Delta CRL Period0m ❌ Root CA 不使用 Delta CRL,只有对实时性要求高的 CA 才需要启用。
Generate CRL Upon Revocation❌ Root CA 不启用,中间 CA 需要时启用,证书撤销后立即生成新的 CRL。
Allow changing revocation reason✅ 启用,允许修改证书撤销原因。适用于所有 CA。
Allow invalidity date✅ 启用,允许设置证书失效日期。适用于所有 CA。

5️⃣ 审批设置

参数说明
Add/Edit End EntityNone ❌ Root CA 不管理终端实体
Key RecoveryNone ❌ Root CA 不提供密钥恢复
RevocationNone ❌ Root CA 很少撤销自身证书
CA Service ActivationNone ❌ Root CA 手动激活

6️⃣ 其他数据

参数说明
ValidatorsFinish User ✅ 启用证书验证策略。
CMP RA Authentication Secret❌ 留空,仅在使用 CMP 协议时需要配置。
Monitor if CA active (healthcheck)Activate ✅ 启用 CA 运行监控,适用于所有 CA。
Request ProcessorNone ❌ Root CA 通常不需要外部请求处理。

7️⃣ 外部签名 CA 创建或更新(Externally signed CA creation/renewal)

参数说明
Renew CA❌ 建议创建新的 Root CA,而不是重新生成密钥并重新签名现有 CA,以避免同名 Root CA 证书带来的问题。
CA Chain Certificates✅ 仅当 CA 由外部 CA 签名时才需要上传证书链文件(PEM/DER 格式)。如果 Root CA 已安装在本地,则不需要上传此文件。

8️⃣ 完成 CA 创建

检查所有参数,确认无误后,点击 Create 生成 CA。

① 下载并验证 Root CA 证书:

使用以下 OpenSSL 命令验证证书格式和有效性:

# 验证 PEM 格式证书
openssl x509 -in rootca.pem -text -noout

# 验证 DER 格式证书
openssl x509 -in rootca.der -inform DER -text -noout

# 检查证书 SHA256 指纹信息
openssl x509 -noout -fingerprint -sha256 -in rootca.pem

# 验证证书的有效性(自签名证书验证)
openssl verify -CAfile rootca.pem rootca.pem

② 部署并验证 CRL(证书吊销列表):

若配置了 CRL URL,执行:

# 验证 CRL 文件
openssl crl -in rootca.crl -text -noout

确保 CRL 可通过 Web 正常访问。

🚀 Root CA 现在已成功创建,可用于签发中间 CA! 🎉

5.7 中间 CA 创建简要步骤案例

1️⃣ CA 类型与密钥配置

参数说明
CA TypeX.509 CA ✅ 标准 X.509 证书 CA
Crypto Token选择已创建的 Crypto Token ✅(如 demoCrypto
Signing AlgorithmSHA256WithRSA ✅ 更安全的签名算法
Alternative Signing AlgorithmNone ❌ 无需备用签名算法
Key Sequence FormatNumeric (0-9) ✅ 用于 CA 证书序列号
Key Sequence00001 ✅ 初始序列号,与 Root CA 区分
Description中间 CA 说明,可填写用途、管理单位等 ✅

2️⃣ 证书策略(Directives)

参数说明
Enforce unique public keys✅ 强制公钥唯一性,防止重复
Enforce key renewal✅ 中间 CA 建议启用,保证安全
Enforce unique DN✅ 确保 DN 唯一
Enforce unique Subject DN SerialNumber❌ 规模小于 20 个证书时可不启用
Use Certificate Request History✅ 记录证书请求历史
Use User Storage✅ 存储用户信息
Use Certificate Storage✅ 存储已颁发证书

3️⃣ 证书数据(CA Certificate Data)

参数说明
Subject DN例如 CN=test Intermediate CA
Signed Bytest EnterpriseIT Root CA ✅ 中间 CA 必须由 Root CA 签名
Certificate ProfileINTERMEDIATE_CA_profile ✅ 克隆后配置适合中间 CA
Validity10y ✅ 通常为 10 年,有效期小于 Root CA
Subject Alternative Name❌ 中间 CA 通常不需要
Certificate Policy OID❌ 默认留空,或按需填写
Use UTF-8 in policy notice text✅ 确保国际字符支持
PrintableString encoding in DN❌ 不勾选,避免影响国际化
LDAP DN order✅ 按 LDAP 规范排列 DN
Serial Number Octet Size20 ✅ 推荐 20 字节
Name Constraints, Permitted❌ 默认禁用,留空
Name Constraints, Excluded❌ 默认禁用,留空

4️⃣ CRL 配置(证书吊销列表)

参数说明
Microsoft CA Compatibility Mode❌ 一般不启用,仅用于 Windows AD 环境
Authority Key ID✅ 启用,并标记为 Critical
CRL Number✅ 启用,并标记为 Critical
Issuing Distribution Point on CRLs❌ 通常不启用
CA issuer URI❌ 留空,或按需填写下载地址
Keep expired certificates on CRL❌ 中间 CA 建议启用,保留过期证书,目前不启用,会导致吊销列表越来越大
Use CRL partitions❌ 通常不需要
CRL Expire Period7d ✅ 建议 7 天,确保及时更新
CRL Issue Interval1d ✅ 每天发布,确保及时更新
CRL Overlap Time12h ✅ 与旧 CRL 重叠 12 小时,确保平稳过渡
Delta CRL Period0m ❌ 不使用 Delta CRL
Generate CRL Upon Revocation✅ 启用,证书撤销后立即更新
Allow changing revocation reason✅ 允许修改证书撤销原因
Allow invalidity date✅ 允许设置证书失效日期

5️⃣ 默认 CA 验证数据(Default CA defined validation data)

参数说明
Default CRL Distribution Point❌ 默认留空或按需填写,用于 CRL 分发地址
Default CRL Issuer❌ 默认留空,通常无需填写
Default Freshest CRL Distribution Point❌ 默认留空,通常无需填写
OCSP Service Default URI❌ 默认留空,按需填写 OCSP 地址
CA Issuer Default URI❌ 默认留空或后期提供接口

6️⃣ 审批设置与其他数据

审批设置目前只有None选项,表示无需额外审批流程,如需开启需检查 EJBCA 的全局审批策略,Supervision Fuctions。

参数说明
ValidatorsFinish User ✅ 启用证书验证策略
CMP RA Authentication Secret❌ 留空,仅在使用 CMP 协议时需要配置
Monitor if CA active (healthcheck)Activate ✅ 启用运行监控
Request ProcessorNone ❌ 一般不需外部请求处理

7️⃣ 完成中间 CA 创建

检查所有参数,确认无误后,点击 Create 生成 CA 请求文件 (CSR)。

提交 CSR 给 Root CA 签名后,下载签名后的证书并验证:

openssl x509 -in intermediate_ca.pem -text -noout
openssl verify -CAfile rootca.pem intermediate_ca.pem

🚀 中间 CA 已成功创建,可用于签发终端实体证书!🎉


6. RA 普通用户创建与权限配置

6.1 创建 RA 角色(Role)

  1. 进入 RA 管理界面(RA Web),选择菜单:
    Role Management →Roles →Create New Role
    
  2. 填写角色信息
    字段推荐填写值
    NamespaceNo namespace
    Role nametest RA Users
  3. 设置 Certificate Authorities 权限
    • 从Available列表选择对应CA(如 Intermediate CA, Root CA),点击Add
  4. 设置 End Entity 权限(permissions)(推荐配置):
    • ✅ Create end entities
    • ✅ Create certificates
      • ✅ ...by using username and password
      • ✅ ...by using a request ID
    • ✅ View end entities and certificates
  5. 设置 End Entity Profiles 权限
    • 从 Available 列表选择EMPTY,点击Add
  6. 点击Add保存创建好的角色。

6.2 创建 RA 普通用户 (End Entity)

  1. 进入 EJBCA Admin Web 界面,选择:
    RA Functions → Add End Entity
    
  2. 填写用户详细信息:
    字段推荐填写值
    End Entity ProfileEMPTY
    Usernametest_signuser
    Password123
    Confirm Password123
    Batch generation不勾选
    E-mailcert-user@example.com
    CNtest RA user S1
    Otest
    CCN
    Certificate ProfileENDUSER
    CAtest Intermediate CA
    TokenP12 file
  3. 点击Add,完成 End Entity 创建。

6.3 用户证书下载

  1. 用户进入RA Web 界面,选择:
    Enroll → Use Username
    
  2. 使用刚创建的用户名和密码登录:
    • Username: test_signuser
    • Password: 123
  3. 登录后选择密钥算法:
    • 选择RSA 4096算法,生成并下载.p12用户证书。

6.4 将用户加入 RA 角色

  1. 进入 RA Web 界面,选择菜单:
    Search → End Entities
    
  2. 查找并复制刚才创建证书的 CN 。
  3. 进入 RA 管理界面,选择菜单:
    Role Management → Roles → Members → Add Role Member
    
  4. 填写 Role Member 信息:
    字段推荐填写值
    Roletest RA Users
    Token TypeCertificate
    CAtest Intermediate CA
    Match withCN Common Name
    Match Value粘贴刚复制的证书 CN
    DescriptionRA 普通用户
  5. 点击Add,完成角色成员添加。
  6. 重启 EJBCA 服务,使权限生效(推荐):
    docker restart ejbca
    

6.5 用户登录 RA 界面

  1. 非管理员角色将下载的.p12证书导入浏览器。
  2. 访问 RA Web 界面,自动认证并登录。
  3. 用户即可执行授权内的 RA 操作(如创建和查看证书等)。

6.6 重要提示(请务必遵守以下要求)

第一次建议使用 chrome 浏览器无痕模式快速启动验证,避免缓存问题导致No OAuth providers configured. Please log in using a valid certificate.

访问时候 使用 https 访问https://192.168.xxx.xxx/ejbca/ra/,避免出现No OAuth providers configured. Please log in using a valid certificate.


7. 证书模板设置说明

本节用于解释 EJBCA 中终端证书模板(Certificate Profile)设置项的具体含义及推荐用途,适用于 HTTPS/Web/设备/客户端等常见终端证书签发需求。


7.1 基本信息

配置项描述
Certificate Profile ID模板在数据库中的唯一标识,仅供系统内部识别
类型可用终端实体,子 CA,根 CA
Available Key Algorithms可用密钥算法,如 RSA、ECDSA、Ed25519、 DILITHIUM 等
Available ECDSA curvesECDSA 可选曲线,当前未启用任何曲线
可用位长度支持的密钥位数(针对 RSA),如 2048、4096 等
签名算法用于签发证书时的签名哈希算法,如 SHA3-256withRSA
Alternative Signature是否启用替代签名算法,如 ECDSA, EdDSA 等
有效期 or end date of the certificate默认有效期,如 "2y" 表示 2 年
Validity Offset签发日期的偏移量,允许向前或向后设定起始时间
Expiration Restrictions限制最大到期时间,用于合规控制
Profile Description证书模板说明,用于备注用途(如“终端设备证书”)

7.2 权限控制(Permissions)

配置项描述推荐设置
Allow Validity Override允许在签发证书时覆盖默认有效期✅,如需手动调整有效期时使用
Allow Expired Validity End Date允许设置一个已过期的结束时间(用于测试或审计)✅(调试用)
Allow Extension Override允许 CSR 中的扩展字段覆盖模板中预定义的扩展❌,若开启会破坏模板统一性,可能引入风险
Allow certificate serial number override允许在签发时自定义证书序列号❌,仅特定需求下开启(如证书克隆、替换)
Allow Subject DN Override by CSR允许 CSR 中的主题信息(如 CN/O)覆盖模板配置✅,适用于自动化签发流程
Allow Subject DN Override by End Entity Information允许通过终端实体信息(用户输入)指定 Subject 字段✅,灵活性高,推荐开启
Allow Key Usage Override允许 CSR 中设置 keyUsage 字段覆盖模板配置❌,开启会造成用途不一致,影响安全性
Allow Backdated Revocation允许将吊销时间设置为历史时间,用于追溯性撤销✅,部分审计/合规场景下需要
Use Certificate Storage启用证书在数据库中存储(必须开启,除非特殊离线用途)
Store Certificate Data存储证书完整原文数据(配合 OCSP/CRL 使用)✅,建议与存储功能一同开启

✅ 建议:在生产环境中保持模板统一性,除非明确需要,否则尽量关闭 Override 类权限项,避免 CSR/End Entity 越权操作。


7.3 X.509v3 扩展 - 基础信息

扩展项描述推荐设置
基本约束(Basic Constraints)限制是否为 CA 证书(终端证书应设为 FALSE)✅ 使用,关键
CA 密钥标识符标识签发 CA 的信息✅ 使用
主题密钥标识符生成此证书的唯一标识✅ 使用

7.4 X.509v3 扩展 - 密钥用途(Key Usage)

项目描述
数字签名 (digitalSignature)用于验证签名,如身份认证、代码签名
不可抵赖 (nonRepudiation)表明签名不可否认(法律场景)
数据加密 (dataEncipherment)用于加密非密钥数据
密钥加密 (keyEncipherment)用于加密密钥材料,如对称密钥
密钥协议 (keyAgreement)支持密钥协商协议(如 DH)
CRL 签名 (cRLSign)用于签署吊销列表(CA 用)
密钥证书签名 (keyCertSign)用于签署证书(CA 用)
只用于加密 (encipherOnly)与密钥协议联合使用(仅加密)
只用于解密 (decipherOnly)与密钥协议联合使用(仅解密)
Forbid encryption usage for ECC keys禁止 ECC 密钥用于加密

7.5 X.509v3 扩展 - 扩展密钥用途(Extended Key Usage)

扩展用途描述
TLS client用于客户端 TLS 认证
TLS server用于服务器 TLS 认证
EAP over LAN (EAPOL)企业网身份认证
EAP over PPP点对点协议身份认证
ETSI TSL Signing用于 ETSI TSL 签名场景
ICAO Deviation List SigningICAO 签名用途之一
ICAO Master List SigningICAO 主列表签名
Intel AMT managementIntel 管理认证专用
Internet Key Exchange for IPsecIPsec 密钥交换
Kerberos Client AuthenticationKerberos 客户端认证
Kerberos KDCKerberos 密钥中心
MS CA Key ExchangeMicrosoft CA 密钥交换用途
MS Commercial Code SigningMicrosoft 商业代码签名
MS Document SigningMicrosoft 文档签名
MS EFS RecoveryMicrosoft EFS 恢复用途
MS Encrypted File SystemMicrosoft 加密文件系统用途
MS Individual Code SigningMicrosoft 个人代码签名
MS 智能卡登录Microsoft 智能卡登录验证
OCSP 签发者在线证书状态协议(OCSP)签名证书用途
PDF Signing用于 PDF 文件签名
PIV Card AuthenticationPIV 卡身份认证
RFC9336 Document Signing符合 RFC9336 的文档签名用途
SCVP Client简化证书验证协议客户端
SCVP Server简化证书验证协议服务端
SIP Domain用于 VoIP/SIP 域名认证用途
SSH Client用于 SSH 客户端认证
SSH Server用于 SSH 服务器认证
代码签名 (codeSigning)用于软件/驱动程序签名
任意扩展的密钥用途任意通用用途扩展支持
安全 Email (emailProtection)S/MIME 邮件签名/加密用途
客户身份验证 (clientAuth)用于 TLS 客户端身份认证
时间戳 (timeStamping)时间戳服务签名用途
服务器验证 (serverAuth)用于服务器身份验证(HTTPS 等)

7.6 名称扩展

项目描述建议
主题别名(Subject Alt Name)支持 IP/DNS/UEmail 作为证书标识✅ 使用
Issuer Alternative Name可添加额外的 CA 名称信息可选
Name Constraints限定主题中可用的命名空间可选(高安全场景使用)

7.7 验证扩展(Validation Data)

项目描述推荐
CRL 发布点证书吊销列表地址✅ 使用,关键
Delta CRL(Freshest CRL)增量吊销列表按需开启
Authority Information Access (AIA)提供 OCSP/CA 信息

7.8 私钥使用期限制

项目描述
Start Offset私钥可用的起始偏移时间
Period Length私钥的可使用周期(独立于证书有效期)

7.9 🇪🇺 ETSI 合规扩展(一般用于合规性要求高的 PKI 环境)

项目描述
资质证书声明用于标识法律或合规用途证书
Assured validity确保短期证书的有效性

7.10 其他扩展(Other Extensions)

扩展用途
OCSP No Check禁用 OCSP 检查(通常仅对 OCSP responder 有用)
Microsoft 模板值用于 Windows AD 集成的特殊扩展
CA/B Forum OID用于 CA/B 合规的组织标识扩展

7.11 审批设置 & 附加字段

配置项说明
添加/编辑终端实体绑定的审批流程
密钥恢复是否支持密钥找回(如用于备份恢复)
撤销审批吊销时是否需审批
CN 后缀在 Subject CN 后自动添加字符串
主题字段子集限制限制允许使用的 Subject 字段

7.12 CA & 发布设置

项目说明
可用的 CA允许哪些 CA 使用此证书模板
发布器(Publisher)可配置发布至 LDAP、数据库或外部服务
单证书限制是否启用一个 End Entity 只能有一张有效证书
Account Binding Namespace用于设备账户绑定场景(如 IoT)

如需配置 "代码签名证书" 模板,请在此基础上调整 keyUsage 与 extendedKeyUsage 字段即可。

📌 建议对不同应用(如:VPN、HTTPS、代码签名、客户端认证)创建不同模板,便于管理和合规控制。


8. 审批配置与管理

8.1 创建 Approval Profile(审批配置)

  1. 进入:
监察员功能 → Approval Profiles
  1. 在底部输入名称(如 test)→ 点击 添加
  2. 在列表中点击 编辑 进入详细设置。

8.2 基本参数设置

字段建议/示例
Approval Profile TypeAccumulative Approval(累计);跨部门可用 Partitioned Approval(分区)
Request Expiration Period8h(超时未批作废)
Approval Expiration Period8h(结果过期需重批)
Max Extension Time0d(不允许延长)
Allow Self Approved Request Editing不勾选(生产禁用自批)

8.3 审批步骤(Approval Steps)

  1. 设置 Number of Required Approvals
    • 开发/测试:1(1-of-1)。
    • 生产/敏感操作:2(2-of-2)或分区审批。
  2. 通知邮件:
    • Notification message email recipientapproval-admin-group@example.org supervisor@example.org
    • Notification message email senderno-reply@192.168.xxx.xx
    • 主题模板示例:
      [AR-${approvalRequest.ID}-${approvalRequest.STEP_ID}-${approvalRequest.PARTITION_ID}] Approval Request
      
    • 正文可引用变量:${approvalRequest.TYPE}${approvalRequest.REQUESTOR}${approvalRequest.WORKFLOWSTATE} 等。

8.4 绑定到具体动作

End Entity Profile:

CA Functions → End Entity Profiles → <Profile> → Approval Settings → 勾选需要审批的操作(如Add/Edit End Entity) → 选择上面创建的 Approval Profile → Save

常用勾选:Add/Edit End EntityKey Recovery(若启用)。

Certificate Profile:

CA Functions → Certificate Profiles → <Profile> → Approval Settings → 勾选相关操作 → 选择 Approval Profile → Save

管理员敏感动作: 中间 CA 变更、吊销等建议使用 2-of-2 或分区审批。

8.5 测试与验证

  1. 用一个普通 RA 账号在 RA Web 发起一次需要审批的操作(如创建 End Entity)。
  2. 监察员功能 → Approvals 查看待审批队列,使用另一个审批员账号完成审批。
  3. 确认操作自动执行,且邮件通知正常到达。

8.6 常见问题

  • 邮件收不到:检查 SMTP 配置、防火墙、收件人拼写;查看容器日志。
  • 一直待审批Number of Required Approvals 设置过高或审批人不具备权限。
  • 能自批:误勾选了 Allow Self Approved Request Editing;生产应关闭。
  • 过期作废Request/Approval Expiration 设置过短;可调到 8–24h

9. 终端实体模板设置

位置:RA Functions → End Entity Profiles。终端实体模板(End Entity Profile)决定了“能填哪些字段”“哪些必填/可改”“默认使用哪个证书模板/CA/Token”。

9.1 新建与进入

  1. 进入:
RA Functions → End Entity Profiles
  1. 在底部输入模板名(如 test)→ 添加模板
  2. 在列表中选中该模板 → 编辑终端实体模板

9.2 基本信息(用户名/密码/邮箱)

是否必须提前填? 通常 不需要 在模板里写死具体“用户名/密码”。模板里只定义“规则与方式”,具体的 Username/Password/Enrollment Code创建 End Entity 或申请时填写即可。

推荐做法

  • Username:选择 Auto-generated(批量/自动化最方便),或在创建 End Entity 时手动指定。
  • Password (or Enrollment Code):勾选 Required,作为一次性 Enrollment Code 使用;具体值在创建 End Entity 或 RA 端申请时再填。
  • Minimum password strength / length:保持策略(如长度 ≥ 8),但不在模板里填具体密码。
  • Maximum number of failed login attempts:按需限制;可勾 Modifiable 便于临时调整。
  • Batch generation:一般关闭;避免明文存储 Enrollment Code。
  • E-mail:按业务是否 Required/Modifiable,便于通知与标识。

不同申请路径对 Username/Password 的影响

  • RA Web → Enroll → Use Username:创建 End Entity 时需要指定 UsernamePassword/Enrollment Code,用户用该账号登录领取证书。
  • RA Web → Enroll → Use Request ID:由系统分配 Request IDPassword/Enrollment Code 在创建时设置,申请人用 ID+Code 领取。
  • User Generated(CSR 提交)Token=User Generated;保留 Required 以生成一次性代码,申请人用 CSR+Code 完成签发。

Directives(指令)

  • Reverse Subject DN and Subject Alt Name Checks:不勾也可以。
  • Allow merge DN for all interfaces:通常 不勾,仅在多接口需要聚合 DN 时启用。
  • Allow multi-value RDNs:仅特殊需求启用(默认关闭更安全)。

9.3 主体 DN 属性(Subject DN Attributes)—需要自己添加

左侧是“可选属性”,右侧是“已选属性”。把需要的字段添加到右侧,并为每个字段设置 Required / Modifiable / Validation

常见推荐(客户端/通用):

字段建议
CN, Common nameRequiredModifiable 由 RA 决定
emailAddress, E-mail address in DN选配;如需与邮件系统绑定可 Required
O, Organization / OU, Org. Unit视业务;建议 Modifiable 关闭以避免乱填
C, Country固定为 CN 或所在国家;通常不允许修改

若需要更严格的校验,可在 Validation 指定正则/格式规则。

9.4 其他主体属性(Other Subject Attributes)—需要自己添加

Subject Alternative Name(SAN)

  • 客户端证书:RFC 822 Name (e-mail address)(与账户邮箱一致)
  • 服务器证书:DNS NameIP Address(按域名/IP 添加)
  • 设备证书:OtherName(写入设备 ID/OID)

Subject Directory Attributes(可选):

  • 仅在需要存档/合规时使用,例如 Date of birth (YYYYMMDD) 等;默认不建议开启过多目录属性。

添加方法:在 Other Subject Attributes 区域选择条目 → 添加 到右侧;如界面支持,可设置 Required/Modifiable

9.5 主要证书数据(Main Certificate Data)

字段建议/说明
Default Certificate Profile选择目标证书模板(如 ENDUSER / SERVER
Available Certificate Profiles仅勾选允许使用的模板,避免误选
Default CA / Available CAs指定可签发的 CA;注意:修改可用 CA 会影响角色对此 Profile 的访问
Default Token / Available TokensP12 file(RA 直接下载 p12)或 User Generated(用户自带 CSR)

9.6 其他证书数据(Other Certificate Data)

  • Custom certificate serial number:默认关闭
  • Certificate Validity Start/End Time:默认由 Certificate Profile 控制;如需临时证书可开启并 Modifiable
  • Name Constraints (Permitted/Excluded):一般用于中间 CA;终端实体模板通常不启用
  • Custom certificate extension data / ETSI PSD2 QC Statement / CA/B Forum Organization Identifier:按合规需要开启

9.7 其他数据与限制(Other Data / Restrictions)

字段建议
Number of allowed requests1(防多次重复签发)
Allow renewal before expiration例如 30 天;如不限制填 -1
Revocation reason to set after certificate issuance默认 Active(一般不改)
Redact Subject Name from logs仅在隐私/合规强需求时开启
Send Notification按需;与 SMTP 配置关联

9.8 保存与授权

  1. 点击 保存
  2. RA Web → Role Management 确认相关角色已被授权“使用此 End Entity Profile”(可见/可创建)。
  3. Search → End Entities 使用该模板创建测试用户,验证:
    • DN/SAN 是否按规则入库;
    • 证书是否使用了期望的 Certificate Profile/CA/Token
    • 下载/导入是否成功(P12/PEM/CSR 流程)。

10. RA 普通用户申请终端证书

位置:RA Web → Enroll

默认建议:优先使用 By the CA(CA 端生成密钥),无需 CSR,流程最稳、最少出错。

10.1 路径与前置

  • 已在 End Entity Profiles(第 9 节)与 Certificate Profiles 准备好模板;用户具备访问权限。
  • 若启用审批(第 8 节),提交后会进入待审队列,审批通过才签发。

10.2 推荐:By the CA(无需 CSR)

  1. 进入:
Enroll → Make New Request
  1. 选择 Certificate Type(End Entity Profile)与 Certificate subtype(Certificate Profile)。
  2. Key‑pair generation 选择 By the CA
  3. 展开 Provide request info,按模板要求填写 Subject DN / SAN(如 CN、Email、DNS/IP)。
  4. 下载 *.p12

10.3 可选:Provided by user(上传 CSR)

仅当必须在客户端/服务器本地生成密钥(如合规要求、HSM/专用设备、已有密钥迁移)时使用。

  1. 本地生成私钥与 CSR:
  2. 在页面选择 Provided by user,将完整 CSR(含 BEGIN/END CERTIFICATE REQUEST)粘贴到输入框。
  3. 提交并按提示下载证书(不会包含你的私钥)。

10.4 审批联动与通知

  • 当 Profile 绑定了 Approval Profile 时,提交即进入待审;通过后自动签发或开放下载。
  • 邮件主题/正文遵循第 8 节的通知模板。

10.5 常见问题

  • 字段不通过:DN/SAN 与 Profile 约束不一致;按第 9 节调整。
  • 不能下载 P12:浏览器拦截或口令策略冲突;更换浏览器/检查口令长度与字符集。
  • CSR 被拒:CSR 中 Subject/SAN 与模板冲突;按模板重建 CSR 或改用 By the CA
  • 审批卡住:审批人数未满足或审批人权限不足;去“监察员功能 → Approvals”。

【版权声明】Copyright © 2026 openUBMC Community。本文由openUBMC社区首发,欢迎遵照CC-BY-SA 4.0协议规定转载。转载时敬请在正文注明并保留原文链接和作者信息。

【免责声明】本文仅代表作者本人观点,与本网站无关。本网站对文中陈述、观点判断保持中立,不对所包含内容的准确性、可靠性或完整性提供任何明示或暗示的保证。本文仅供读者参考,由此产生的所有法律责任均由读者本人承担。

关于作者

沈威

openubmc 社区开发者对BMC与开源固件有长期兴趣,活跃于openubmc社区,热衷于探索和交流新特性。