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

Spring Boot中通过SSL连接Redis时如何配置有效证书路径?

Redis SSL连接PKIX路径错误解决方案

错误原因

你遇到的PKIX path building failed错误,本质是JVM的默认信任库不包含Redis服务器的SSL证书test.pem,导致SSL握手时无法验证证书有效性。

两种配置方案

方案1:通过application.yml配置(需转换证书格式)

  1. 转换PEM证书为PKCS12格式
    用OpenSSL命令把test.pem转成通用的PKCS12格式(执行时会要求设置密码,记好这个密码):
    openssl pkcs12 -export -in test.pem -out redis-cert.p12 -name "redis-cert"
    
  2. 放置证书并配置application.yml
    把转换后的redis-cert.p12放到项目resources目录下,然后在application.yml中添加配置:
    spring:
      redis:
        ssl: true
        # 基础连接信息(主机、端口、密码按需补充)
        host: XXX
        port: XXX
        password: XXX
        lettuce:
          ssl:
            trust-store: classpath:redis-cert.p12
            trust-store-type: PKCS12
            trust-store-password: 你设置的PKCS12密码
    

方案2:Java代码配置(直接加载PEM证书)

如果不想转换证书格式,直接自定义Redis连接工厂加载PEM证书:

  1. 确保test.pem在resources目录下,创建配置类:
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.data.redis.connection.RedisStandaloneConfiguration;
    import org.springframework.data.redis.connection.lettuce.LettuceClientConfiguration;
    import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
    import io.lettuce.core.ClientOptions;
    import io.lettuce.core.SslOptions;
    import io.lettuce.core.SslVerifyMode;
    import java.io.IOException;
    import java.io.InputStream;
    import java.security.cert.CertificateException;
    import java.security.cert.CertificateFactory;
    import java.security.cert.X509Certificate;
    
    @Configuration
    public class RedisSslConfig {
    
        @Bean
        public LettuceConnectionFactory redisConnectionFactory() throws IOException, CertificateException {
            // 配置Redis基础连接信息
            RedisStandaloneConfiguration redisConfig = new RedisStandaloneConfiguration();
            redisConfig.setHostName("你的Redis主机");
            redisConfig.setPort(你的Redis端口);
            // 有密码的话打开下面注释
            // redisConfig.setPassword("你的Redis密码");
    
            // 加载resources下的test.pem证书
            CertificateFactory certFactory = CertificateFactory.getInstance("X.509");
            try (InputStream certStream = getClass().getResourceAsStream("/test.pem")) {
                X509Certificate cert = (X509Certificate) certFactory.generateCertificate(certStream);
    
                // 配置SSL选项
                SslOptions sslOptions = SslOptions.builder()
                        .trustManager(cert)
                        .verifyMode(SslVerifyMode.FULL) // 生产环境建议用FULL严格验证
                        .build();
    
                ClientOptions clientOptions = ClientOptions.builder()
                        .sslOptions(sslOptions)
                        .build();
    
                // 构建Lettuce客户端配置
                LettuceClientConfiguration clientConfig = LettuceClientConfiguration.builder()
                        .useSsl()
                        .clientOptions(clientOptions)
                        .build();
    
                return new LettuceConnectionFactory(redisConfig, clientConfig);
            }
        }
    }
    

测试环境临时方案(不推荐生产)

如果是测试环境,也可以临时关闭证书验证来绕过错误,但会降低安全性:
在application.yml中添加:

spring:
  redis:
    lettuce:
      ssl:
        verify-hostname: false

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 17:27:15