You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法将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 中。
  • 导出证书到本地并测试访问
    • 提取 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"
      

配置 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 12:58:08