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

配置Bitnami Keycloak使用自定义CA遇PKIX路径错误求助

Keycloak对接MSAD FS自签名证书PKIX错误排查与解决

问题背景

通过Bitnami Helm Chart部署Keycloak后,添加MSAD FS作为身份提供商时,输入发现端点抛出PKIX路径构建失败异常,核心错误如下:

Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    at java.base/sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:439)
    at java.base/sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:306)
    ... 36 more

已执行操作:

  • 开启tls.enabled并指定existingSecret
  • 将CA证书导入JKS格式的信任库,创建包含keycloak.truststore.jks和keycloak.keystore.jks的Secret
  • 启动时Keycloak识别到配置,但提示https-trust-store-file等参数已废弃,需改用系统信任库

容器内确认/opt/bitnami/keycloak/certs/keycloak.truststore.jks已包含目标证书,但错误仍存在。


核心原因

Keycloak已废弃自定义信任库配置(https-trust-store-*),要求使用Java系统默认信任库(cacerts),之前导入证书到自定义信任库的操作不符合当前版本要求。


解决步骤

1. 导入证书到Java系统信任库

Bitnami Keycloak容器中,Java系统信任库路径为/opt/bitnami/java/lib/security/cacerts,默认密码为changeit。需将MSAD FS的CA证书导入此信任库:

# 进入Keycloak容器
kubectl exec -it <keycloak-pod-name> -- bash

# 导入证书(替换证书路径和别名)
keytool -importcert -file /path/to/custom-cacert.pem -keystore /opt/bitnami/java/lib/security/cacerts -alias msadfs-ca -storepass changeit -noprompt
  • -alias:为证书设置唯一别名,避免重复导入冲突
  • -noprompt:跳过交互式确认,适合自动化操作

2. 通过Helm实现证书自动导入(持久化方案)

手动导入证书会在Pod重建后丢失,需通过extraInitContainers在Pod启动前自动导入证书:

# values.yaml 配置片段
extraInitContainers:
  - name: import-msadfs-ca
    image: bitnami/java:17
    command:
      - sh
      - -c
      - |
        # 导入证书到系统信任库
        keytool -importcert -file /certs/custom-cacert.pem -keystore /opt/bitnami/java/lib/security/cacerts -alias msadfs-ca -storepass changeit -noprompt
    volumeMounts:
      # 挂载存储CA证书的Secret
      - name: msadfs-ca-secret
        mountPath: /certs
      # 挂载Java安全目录(覆盖默认只读的cacerts)
      - name: java-security-dir
        mountPath: /opt/bitnami/java/lib/security
volumes:
  - name: msadfs-ca-secret
    secret:
      secretName: msadfs-ca # 提前创建包含custom-cacert.pem的Secret
  - name: java-security-dir
    emptyDir: {}

3. 清理废弃配置

在values.yaml中移除以下废弃参数:

  • https-trust-store-file
  • https-trust-store-password
  • 替换proxy参数为proxy-headers(如proxy-headers: xforwarded)

排查验证步骤

  1. 确认证书已导入系统信任库
kubectl exec -it <keycloak-pod-name> -- keytool -list -keystore /opt/bitnami/java/lib/security/cacerts -storepass changeit | grep msadfs-ca

若输出证书别名,说明导入成功。

  1. 测试MSAD FS端点连通性
    在容器内用curl验证证书信任:
kubectl exec -it <keycloak-pod-name> -- curl -v --cacert /certs/custom-cacert.pem https://<msadfs-domain>/adfs/.well-known/openid-configuration

若返回正常的OpenID配置JSON,说明网络和证书本身无问题。

  1. 检查Keycloak启动日志
    确认日志中无https-trust-store-*相关的废弃警告,且系统信任库加载正常。

  2. 验证证书链完整性
    确保导入的是MSAD FS的根CA证书(而非服务器证书),若存在中间CA,需将整个证书链合并为PEM文件后导入。


内容的提问来源于stack exchange,提问作者gemorra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 13:46:20