商城首页欢迎来到中国正版软件门户

您的位置:首页 >SpringBoot配置Redis SSL及YML开启证书

SpringBoot配置Redis SSL及YML开启证书

  发布于2026-04-07 阅读(0)

扫一扫,手机访问

spring.redis.ssl.enable=true是开启Redis SSL的唯一有效开关,需配合trust-store/key-store路径及密码等参数使用,且证书路径必须用classpath:或file:显式声明,集群模式下还需调大max-redirects并选用Lettuce驱动。

SpringBoot怎么配置Redis的SSL_在yml开启证书开关

spring.redis.ssl.enable 是开启 Redis SSL 的唯一开关

Spring Boot 2.4+ 版本起,spring.redis.ssl=true 已被弃用,必须改用 spring.redis.ssl.enable=true。如果只写 spring.redis.ssl=true,应用启动时不会报错,但实际连接仍走明文,Redis 日志里会出现 Client sent AUTH, but no password is set 类似提示(尤其在集群模式下),本质是 SSL 握手失败后降级重试导致的混淆。

这个配置项必须配合其他 SSL 参数一起生效,单独设为 true 会导致连接超时或 javax.net.ssl.SSLHandshakeException

  • spring.redis.ssl.enable=true —— 必须显式启用
  • spring.redis.ssl.trust-storespring.redis.ssl.key-store 至少提供其一(单向认证只需 trust-store)
  • spring.redis.ssl.trust-store-passwordspring.redis.ssl.key-store-password 按需填写,空密码也要显式写 ""

证书路径必须用 classpath: 或 file: 显式声明

Spring Boot 不会自动推断证书位置。spring.redis.ssl.trust-store=redis-truststore.jks 这种写法无效,会被当成相对路径尝试加载,最终抛出 java.io.FileNotFoundException

正确写法只有两种:

  • 证书放在 src/main/resources 下:用 classpath:redis-truststore.jks
  • 证书放在 jar 外部(推荐生产环境):用 file:/etc/ssl/redis/redis-truststore.jks

注意:file: 路径必须是绝对路径;classpath: 后不能带斜杠开头,比如 classpath:/redis.jks 会失败。

Redis 集群 + SSL 需额外设置 max-redirects

开启 SSL 后,Jedis 或 Lettuce 在重定向时容易卡住,默认 spring.redis.cluster.max-redirects=1 不够用,尤其当集群节点分布在不同网络区域时,SSL 握手耗时增加,重试窗口变窄。

建议值设为 35,并确认客户端使用的驱动支持 SSL 重定向:

  • Jedis 3.8+ 支持集群 SSL,但不支持自动重定向证书验证(需自定义 JedisCluster 构造参数)
  • Lettuce 是更稳妥的选择,spring-boot-starter-data-redis 默认就是它,且对 SSL 集群重定向兼容更好
  • 务必检查依赖中没有混入旧版 jedis,否则可能触发 ClassCastException: SslConnectionProvider cannot be cast to ConnectionProvider

SSL 握手失败时最常被忽略的三个点

错误日志里出现 PKIX path building failedunable to find valid certification path to requested target,90% 是以下原因:

  • 证书链不完整:CA 根证书没导入到 trust-store,只放了 server.crt —— 要用 keytool -importcert -file ca.crt -keystore redis-truststore.jks 补全
  • 主机名验证失败:Redis 节点域名和证书 Subject Alternative Name (SAN) 不匹配 —— 开发环境可临时加 spring.redis.ssl.verify-mode=none(仅限测试)
  • JDK 版本太低:JDK 8u291 之前默认禁用 TLSv1.3,而某些云 Redis 服务强制要求 TLSv1.3 —— 升级 JDK 或在 JVM 启动参数加 -Djdk.tls.client.protocols=TLSv1.2,TLSv1.3

真正上线前,别只测通不通,要抓包确认 TCP 流里确实有 Change Cipher Spec 和加密载荷 —— 否则很可能只是“看起来连上了”,实则走的还是裸连。

本文转载于:互联网 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注