无法将EJBCA配置为Cluster Issuer的问题求助
EJBCA 作为 Kubernetes Cluster Issuer 的配置方案及问题排查
可行性确认
EJBCA 完全可以作为 Kubernetes 的 Cluster Issuer,通过 cert-manager 对接实现集群内服务的批量证书签发,替代 Vault 的证书管理能力。
先解决管理界面 "No client certificate was presented" 错误
这个错误是因为 EJBCA 管理界面默认强制客户端证书认证,必须携带有效管理员证书才能访问。
排查与修复步骤
- 确认初始管理员证书是否生成
- Bitnami Helm 部署:在 EJBCA 所在命名空间下查询 secret,执行
kubectl get secrets -n <ejbca-namespace> <your-release-name>-ejbca-admin-cert,正常情况下会包含admin.p12格式的证书文件。 - Keyfactor 镜像部署:检查容器启动日志或预设的 secret,初始管理员证书通常会存储在指定的 secret 中。
- Bitnami Helm 部署:在 EJBCA 所在命名空间下查询 secret,执行
- 导出证书到本地并测试访问
- 提取
admin.p12文件:kubectl get secret <admin-cert-secret-name> -n <ejbca-namespace> -o jsonpath='{.data.admin\.p12}' | base64 -d > admin.p12 - 用 curl 测试访问(替换
<password>和<ejbca-service-url>):
密码为部署时设置的curl --cert-type P12 --cert admin.p12:<password> https://<ejbca-service-url>/ejbca/adminweb/adminPassword(Bitnami Helm)或镜像预设密码(Keyfactor)。
- 提取
- 重新部署时确保生成管理员证书
- Bitnami Helm:在
values.yaml中配置:ejbca: admin: createCertificate: true password: "<your-secure-password>" - Keyfactor 镜像:启动时添加环境变量:
EJBCA_ADMIN_PASSWORD="<your-secure-password>" EJBCA_CREATE_ADMIN_CERT="true"
- Bitnami Helm:在
配置 EJBCA 作为 Cluster Issuer(基于 cert-manager)
前提:已安装 cert-manager,EJBCA 正常运行且可通过客户端证书访问管理界面。
1. 在 EJBCA 中配置签发所需资源
- 登录管理界面,创建或选择一个用于 Kubernetes 证书签发的 CA,开启 Allow PKCS#10 Requests 和 Allow Certificate Renewal 选项。
- 启用并配置 ACME 端点:
进入「ACME Configuration」,启用 ACME 服务,绑定之前选择的 CA,设置 ACME 目录端点(默认路径为/ejbca/acme/directory)。
2. 创建 cert-manager ClusterIssuer
方式:通过 ACME 协议对接(推荐)
- 先创建 ACME 账户密钥的 secret:
apiVersion: v1 kind: Secret metadata: name: ejbca-acme-account-key namespace: cert-manager type: Opaque data: tls.key: <base64-encoded-rsa-private-key> - 再创建 ClusterIssuer:
apiVersion: cert-manager.io/v1 kind: ClusterIssuer metadata: name: ejbca-cluster-issuer spec: acme: server: https://<ejbca-service-url>/ejbca/acme/directory privateKeySecretRef: name: ejbca-acme-account-key solvers: - http01: ingress: class: nginx # 替换为你的集群 ingress 类
3. 验证配置
创建测试 Certificate 资源:
apiVersion: cert-manager.io/v1 kind: Certificate metadata: name: test-ejbca-cert namespace: default spec: secretName: test-ejbca-cert-secret issuerRef: name: ejbca-cluster-issuer kind: ClusterIssuer dnsNames: - test-service.example.com
执行 kubectl get certificates test-ejbca-cert,若状态为 Ready,说明 Cluster Issuer 配置生效。
部署常见问题排查
- Bitnami Helm 部署:确保 ingress 的 TLS 配置正确,EJBCA 管理界面必须通过 HTTPS 访问。
- Keyfactor 镜像:检查环境变量
EJBCA_DATABASE_URL、EJBCA_ADMIN_PASSWORD是否正确,避免数据库连接失败导致证书生成异常。 - cert-manager 日志排查:执行
kubectl logs -n cert-manager -l app=cert-manager,查看是否存在证书认证失败、API 端点不可达等错误。
内容的提问来源于stack exchange,提问作者quenting
相关产品推荐
相关产品推荐

