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

Spring Boot连接HTTPS Vault遇PKIX路径构建失败问题求助

问题

Spring Boot应用连接HTTPS协议的Vault服务时,抛出以下SSL握手错误:

org.springframework.vault.authentication.VaultLoginException: Cannot log in using
org.springframework.web.client.ResourceAccessException: I/O error on POST request for "https://10.166.181.83:31975/v1/auth/cert/login":
sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target; nested exception is javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

依赖配置:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-vault-config</artifactId>
</dependency>

bootstrap.properties配置:

spring.cloud.vault.scheme=https
spring.cloud.vault.kv.enabled=true
spring.cloud.vault.generic.enabled=true
spring.cloud.vault.generic.backend=configuration-server
spring.cloud.vault.generic.default-context=credentials
spring.cloud.vault.connection-timeout=5000
spring.cloud.vault.read-timeout=15000
spring.cloud.vault.config.order=-10

spring.cloud.vault.authentication=CERT
spring.cloud.vault.ssl.cert-auth-path=cert
spring.cloud.vault.ssl.trust-store-location=classpath:vault.jks
spring.cloud.vault.ssl.trust-store-password=ril@12345

management.endpoints.web.exposure.include=*
management.endpoint.env.post.enabled=true

spring.cloud.vault.uri=https://../../../
spring.cloud.vault.token=hvs.XXXXXXXX

注:连接本地HTTP协议的Vault服务时功能正常。

解决方案

该错误核心是JVM无法信任Vault的SSL证书,导致PKIX证书路径构建失败,以下是具体排查和修复步骤:

  • 验证信任库有效性
    先确认vault.jks中是否包含Vault服务器的根证书/中间证书,执行命令检查:

    keytool -list -v -keystore vault.jks -storepass ril@12345
    

    如果未找到对应证书,将Vault的CA证书导入信任库:

    keytool -import -alias vault-ca -file vault-ca.crt -keystore vault.jks -storepass ril@12345
    
  • 检查信任库路径配置
    确保spring.cloud.vault.ssl.trust-store-location=classpath:vault.jks配置正确:vault.jks需放在项目src/main/resources目录下,打包后能被类路径加载;若使用外部文件,需改为绝对路径格式(如file:/opt/certs/vault.jks)。

  • 补全双向认证配置(若需)
    因为采用CERT认证方式,若Vault开启双向认证,需补充客户端证书配置到bootstrap.properties:

    spring.cloud.vault.ssl.key-store-location=classpath:client.jks
    spring.cloud.vault.ssl.key-store-password=你的客户端密钥库密码
    

    同时确认Vault的cert认证后端已启用,且客户端证书的DN已被授权访问Vault。

  • 排除系统级SSL配置冲突
    检查是否存在JVM参数(如-Djavax.net.ssl.trustStore)覆盖了应用的信任库设置,如有需调整或移除该参数,确保应用使用自身配置的信任库。

  • 独立测试SSL连接
    用curl测试与Vault的SSL连通性,验证证书本身有效性:

    curl --cacert vault-ca.crt https://10.166.181.83:31975/v1/sys/health
    

    若curl能正常返回健康状态,说明证书无问题,需重新排查应用端的信任库加载逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 20:45:57